dezibot/src/colorDetection/ColorDetection.h
2025-02-16 02:04:02 +01:00

93 lines
2.2 KiB
C++

/**
* @file ColorDetecion.h
* @author Hans Haupt
* @brief Class that controls the colorsensor (VEML6040) of the dezibot.
* @version 0.1
* @date 2024-06-01
*
* @copyright Copyright (c) 2024
*
*/
#ifndef ColorDetection_h
#define ColorDetection_h
#include "../power/PowerManager.h"
#include <Arduino.h>
#include <Wire.h>
#include <stdint.h>
//Definitions for I2c
#define I2C_MASTER_SCL_IO 2 /*!< GPIO number used for I2C master clock */
#define I2C_MASTER_SDA_IO 1 /*!< GPIO number used for I2C master data */
//Chipadress of the VEML6040
#define VEML_ADDR 0x10 /*!< Slave address of the MPU9250 sensor */
//CMDCodes for communicate with the VEML6040
#define CMD_CONFIG 0x00
#define REG_RED 0x08
#define REG_GREEN 0x09
#define REG_BLUE 0x0A
#define REG_WHITE 0x0B
#define COLOR_DETECTION_MAX_EXECUTION_DELAY_MS 1
#define TAG "ColorDetection"
enum duration{
MS40,
MS80,
MS160,
MS320,
MS640,
MS1280
};
enum vemlMode{
AUTO,
MANUAL
};
struct VEML_CONFIG{
vemlMode mode;
bool enabled;
duration exposureTime;
};
enum color{
VEML_RED,
VEML_GREEN,
VEML_BLUE,
VEML_WHITE
};
class ColorDetection{
public:
void begin(void);
void configure(VEML_CONFIG config);
uint16_t getColorValue(color color);
/**
* @brief Current consumtion of the sensor
* @note May not be accurate, as it is not known if the consumption is
* constant, or only if sensor is active. Could not be measured.
*
* @return
*/
static float modelCurrentConsumption();
/**
* @brief Estimates charge consumption of the sensor for the given duration
* @note May not be accurate, as it is not known if the consumption is
* constant, or only if sensor is active. Could not be measured.
*
* @param durationMs
* @return float
*/
static float modelChargeConsumption(uint16_t durationMs);
protected:
uint16_t readDoubleRegister(uint8_t regAddr);
void writeDoubleRegister(uint8_t regAddr, uint16_t data);
};
#endif //ColorDetection_h