MRMS
mrm-col.h
1 #pragma once
2 #include <Arduino.h>
3 #include <Wire.h>
4 
12 #define MAX_MRM_COL 6 //Maximum number of sensors.
13 
14 #define I2C_AS72XX_SLAVE_STATUS_REG 0x00
15 #define I2C_AS72XX_SLAVE_WRITE_REG 0x01
16 #define I2C_AS72XX_SLAVE_READ_REG 0x02
17 #define I2C_AS72XX_SLAVE_TX_VALID 0x02
18 #define I2C_AS72XX_SLAVE_RX_VALID 0x01
19 
20 #define I2C_AS726X_DEVICE_TYPE 0x00
21 #define I2C_AS726X_HW_VERSION 0x01
22 #define I2C_AS726X_CONTROL_SETUP 0x04
23 #define I2C_AS726X_INT_T 0x05
24 #define I2C_AS726X_DEVICE_TEMP 0x06
25 #define I2C_AS726X_LED_CONTROL 0x07
26 
27 #define I2C_AS7262_V 0x08
28 #define I2C_AS7262_B 0x0A
29 #define I2C_AS7262_G 0x0C
30 #define I2C_AS7262_Y 0x0E
31 #define I2C_AS7262_O 0x10
32 #define I2C_AS7262_R 0x12
33 #define I2C_AS7262_V_CAL 0x14
34 #define I2C_AS7262_B_CAL 0x18
35 #define I2C_AS7262_G_CAL 0x1C
36 #define I2C_AS7262_Y_CAL 0x20
37 #define I2C_AS7262_O_CAL 0x24
38 #define I2C_AS7262_R_CAL 0x28
39 
40 typedef bool(*BreakCondition)();
41 
42 class Mrm_col
43 {
44  int nextFree;
45  uint8_t addresses[MAX_MRM_COL];// I2C address
46  HardwareSerial * serial; // Additional serial port
47 
53  float calibrated(uint8_t sensorNumber, uint8_t firstRegister);
54 
60  uint16_t channel(uint8_t sensorNumber, uint8_t firstRegister);
61 
66  void print(String message, bool eol = false);
67 
73  uint8_t read(uint8_t sensorNumber, uint8_t virtualReg);
74 
80  uint8_t readRegister(uint8_t sensorNumber, uint8_t addr);
81 
87  void write(uint8_t sensorNumber, uint8_t virtualReg, uint8_t d);
88 
94  void writeRegister(uint8_t sensorNumber, uint8_t addr, uint8_t val);
95 
96 public:
101  Mrm_col(HardwareSerial * hardwareSerial = 0);
102 
103  ~Mrm_col();
104 
112  void add(byte address = 0x49, uint8_t integrationTime = 50, uint8_t dataConversionType = 2, uint8_t gain = 3);
113 
118  uint16_t blue(uint8_t sensorNumber);
119 
124  float blueCalibrated(uint8_t sensorNumber);
125 
134  void dataConversionTypeSet(uint8_t sensorNumber, uint8_t mode);
135 
140  boolean dataReadyGet(uint8_t sensorNumber);
141 
145  void dataReadyClear(uint8_t sensorNumber);
146 
155  void gainSet(uint8_t sensorNumber, uint8_t gain);
156 
161  uint16_t green(uint8_t sensorNumber);
162 
167  float greenCalibrated(uint8_t sensorNumber);
168 
173  void integrationTimeSet(uint8_t sensorNumber, uint8_t integrationValue);
174 
179  void interruptSet(uint8_t sensorNumber, bool enabled);
180 
189  void ledForIlluminationCurrentSet(uint8_t sensorNumber, uint8_t current);
190 
195  void ledForIlluminationSet(uint8_t sensorNumber, bool enabled);
196 
205  void ledIndicatorCurrentSet(uint8_t sensorNumber, uint8_t current);
206 
211  void ledIndicatorSet(uint8_t sensorNumber, bool enabled);
212 
217  uint16_t orange(uint8_t sensorNumber);
218 
223  float orangeCalibrated(uint8_t sensorNumber);
224 
229  uint16_t red(uint8_t sensorNumber);
230 
235  float redCalibrated(uint8_t sensorNumber);
236 
240  void reset(uint8_t sensorNumber);
241 
246  uint8_t temperature(uint8_t sensorNumber);
247 
251  void test(BreakCondition breakWhen = 0);
252 
257  uint16_t violet(uint8_t sensorNumber);
258 
263  float violetCalibrated(uint8_t sensorNumber);
264 
269  uint16_t yellow(uint8_t sensorNumber);
270 
275  float yellowCalibrated(uint8_t sensorNumber);
276 };
277 
278 //Declaration of error function. Definition is in Your code.
279 void error(String message);
280 
Definition: mrm-col.h:43
void interruptSet(uint8_t sensorNumber, bool enabled)
Definition: mrm-col.cpp:171
uint16_t green(uint8_t sensorNumber)
Definition: mrm-col.cpp:146
void gainSet(uint8_t sensorNumber, uint8_t gain)
Definition: mrm-col.cpp:133
uint16_t violet(uint8_t sensorNumber)
Definition: mrm-col.cpp:370
float blueCalibrated(uint8_t sensorNumber)
Definition: mrm-col.cpp:51
void ledIndicatorCurrentSet(uint8_t sensorNumber, uint8_t current)
Definition: mrm-col.cpp:211
uint16_t yellow(uint8_t sensorNumber)
Definition: mrm-col.cpp:429
void dataReadyClear(uint8_t sensorNumber)
Definition: mrm-col.cpp:117
void integrationTimeSet(uint8_t sensorNumber, uint8_t integrationValue)
Definition: mrm-col.cpp:162
void ledForIlluminationCurrentSet(uint8_t sensorNumber, uint8_t current)
Definition: mrm-col.cpp:185
void reset(uint8_t sensorNumber)
Definition: mrm-col.cpp:334
Mrm_col(HardwareSerial *hardwareSerial=0)
Definition: mrm-col.cpp:7
void add(byte address=0x49, uint8_t integrationTime=50, uint8_t dataConversionType=2, uint8_t gain=3)
Definition: mrm-col.cpp:19
void ledIndicatorSet(uint8_t sensorNumber, bool enabled)
Definition: mrm-col.cpp:223
uint16_t orange(uint8_t sensorNumber)
Definition: mrm-col.cpp:233
uint16_t red(uint8_t sensorNumber)
Definition: mrm-col.cpp:319
uint16_t blue(uint8_t sensorNumber)
Definition: mrm-col.cpp:43
float orangeCalibrated(uint8_t sensorNumber)
Definition: mrm-col.cpp:241
void test(BreakCondition breakWhen=0)
Definition: mrm-col.cpp:351
void ledForIlluminationSet(uint8_t sensorNumber, bool enabled)
Definition: mrm-col.cpp:197
float violetCalibrated(uint8_t sensorNumber)
Definition: mrm-col.cpp:378
float yellowCalibrated(uint8_t sensorNumber)
Definition: mrm-col.cpp:437
void dataConversionTypeSet(uint8_t sensorNumber, uint8_t mode)
Definition: mrm-col.cpp:94
float redCalibrated(uint8_t sensorNumber)
Definition: mrm-col.cpp:327
uint8_t temperature(uint8_t sensorNumber)
Definition: mrm-col.cpp:344
boolean dataReadyGet(uint8_t sensorNumber)
Definition: mrm-col.cpp:109
float greenCalibrated(uint8_t sensorNumber)
Definition: mrm-col.cpp:154