/* * Copyright 2021 Birte Kristina Friesel * * SPDX-License-Identifier: BSD-2-Clause */ #ifndef MAX44006_H #define MAX44006_H #include /** * Driver for MAX44006 RGB, IR, and Temperature Sensor. * Does not support interrupts. */ class MAX44006 { public: enum Registers { interruptStatusReg = 0x00, mainConfigReg = 0x01, ambientConfigReg = 0x02, }; enum InterruptStatus { AMBINTS = 0b00000001, PWRON = 0b00000100, SHDN = 0b00001000, RESET = 0b00010000, }; enum MainConfig { AMBINTE = 0b00000001, AMBSEL_00 = 0b00000000, AMBSEL_01 = 0b00000100, AMBSEL_10 = 0b00001000, AMBSEL_11 = 0b00001100, MODE_00 = 0b00000000, MODE_01 = 0b00010000, MODE_10 = 0b00100000, }; enum AmbientConfig { AMBPGA_00 = 0b00000000, AMBPGA_01 = 0b00000001, AMBPGA_10 = 0b00000010, AMBPGA_11 = 0b00000011, AMBTIM_000 = 0b00000000, AMBTIM_001 = 0b00000100, AMBTIM_010 = 0b00001000, AMBTIM_011 = 0b00001100, AMBTIM_100 = 0b00010000, TEMPEN = 0b00100000, COMPPEN = 0b01000000, TRIM = 0b10000000, }; const unsigned char AMBPGA_MASK = 0b00000011; const unsigned char AMBTIM_MASK = 0b00011100; private: MAX44006(const MAX44006 ©); unsigned char const address; unsigned char txbuf[2]; unsigned char rxbuf[10]; unsigned char ambientConfig; public: MAX44006(unsigned char const addr = 0x45) : address(addr), ambientConfig(TEMPEN) {} bool init(); uint16_t getTemperature(); bool getLight(float *red, float *green, float *blue, float *clear, float *ir); bool setAmbientConfig(AmbientConfig config); }; extern MAX44006 max44006; #endif