2626*/
2727/* *************************************************************************/
2828class WipperSnapper_I2C_Driver_MLX90632D : public WipperSnapper_I2C_Driver {
29- public:
29+ public:
3030 /* ******************************************************************************/
3131 /* !
3232 @brief Constructor for an MLX90632 sensor.
@@ -71,61 +71,68 @@ class WipperSnapper_I2C_Driver_MLX90632D : public WipperSnapper_I2C_Driver {
7171 /* !
7272 @brief Configures the MLX90632 sensor and prints its information.
7373 @param extendedInsteadOfMedicalRange
74- If true, configures the sensor for extended temperature range/acc.
74+ If true, configures the sensor for extended temperature
75+ range/acc.
7576 @returns True if configuration fetching and setting were successful.
7677 */
7778 /* ******************************************************************************/
7879 bool ConfigureAndPrintSensorInfo (bool extendedInsteadOfMedicalRange = false ) {
7980 // Reset the device
8081 if (!_mlx90632->reset ()) {
8182 WS_PRINTER.println (F (" Device reset failed" ));
82- while (1 ) { delay (10 ); }
83+ while (1 ) {
84+ delay (10 );
85+ }
8386 }
8487 WS_PRINTER.println (F (" Device reset: SUCCESS" ));
85-
88+
8689 uint64_t productID = _mlx90632->getProductID ();
8790 WS_PRINTER.print (F (" Product ID: 0x" ));
8891 WS_PRINTER.print ((uint32_t )(productID >> 32 ), HEX);
8992 WS_PRINTER.println ((uint32_t )(productID & 0xFFFFFFFF ), HEX);
90-
93+
9194 uint16_t productCode = _mlx90632->getProductCode ();
9295 WS_PRINTER.print (F (" Product Code: 0x" ));
9396 WS_PRINTER.println (productCode, HEX);
94-
97+
9598 uint16_t eepromVersion = _mlx90632->getEEPROMVersion ();
9699 WS_PRINTER.print (F (" EEPROM Version: 0x" ));
97100 WS_PRINTER.println (eepromVersion, HEX);
98-
101+
99102 // Decode product code bits
100103 uint8_t fov = (productCode >> 8 ) & 0x3 ;
101- uint8_t package = (productCode >> 5 ) & 0x7 ;
104+ uint8_t package = (productCode >> 5 ) & 0x7 ;
102105 uint8_t accuracy = productCode & 0x1F ;
103-
106+
104107 WS_PRINTER.print (F (" FOV: " ));
105108 WS_PRINTER.println (fov == 0 ? F (" 50°" ) : F (" Unknown" ));
106-
109+
107110 WS_PRINTER.print (F (" Package: " ));
108111 WS_PRINTER.println (package == 1 ? F (" SFN 3x3" ) : F (" Unknown" ));
109-
112+
110113 WS_PRINTER.print (F (" Accuracy: " ));
111114 if (accuracy == 1 ) {
112115 WS_PRINTER.println (F (" Medical" ));
113116 } else if (accuracy == 2 ) {
114- WS_PRINTER.println (F (" Standard" ));
117+ WS_PRINTER.println (F (" Standard" ));
115118 } else {
116119 WS_PRINTER.println (F (" Unknown" ));
117120 }
118121
119122 // Set and get mode - choose one:
120123 WS_PRINTER.println (F (" \n --- Mode Settings ---" ));
121124 if (!_mlx90632->setMode (MLX90632_MODE_CONTINUOUS)) {
122- // if (!_mlx90632->setMode(MLX90632_MODE_STEP)) { // Uncomment for step mode testing
123- // if (!_mlx90632->setMode(MLX90632_MODE_SLEEPING_STEP)) { // Uncomment for sleeping step mode testing
125+ // if (!_mlx90632->setMode(MLX90632_MODE_STEP)) { // Uncomment
126+ // for step mode testing if
127+ // (!_mlx90632->setMode(MLX90632_MODE_SLEEPING_STEP)) { // Uncomment for
128+ // sleeping step mode testing
124129 WS_PRINTER.println (F (" Failed to set mode" ));
125- while (1 ) { delay (10 ); }
130+ while (1 ) {
131+ delay (10 );
132+ }
126133 }
127-
128- // TODO: use Step mode?
134+
135+ // TODO: use Step mode?
129136 mlx90632_mode_t currentMode = _mlx90632->getMode ();
130137 WS_PRINTER.print (F (" Current mode: " ));
131138 switch (currentMode) {
@@ -149,15 +156,24 @@ class WipperSnapper_I2C_Driver_MLX90632D : public WipperSnapper_I2C_Driver {
149156 if (accuracy == 1 ) {
150157 // Set and get measurement select (medical)
151158 WS_PRINTER.println (F (" \n --- Measurement Select Settings ---" ));
152- if (!extendedInsteadOfMedicalRange && !_mlx90632->setMeasurementSelect (MLX90632_MEAS_MEDICAL)) {
159+ if (!extendedInsteadOfMedicalRange &&
160+ !_mlx90632->setMeasurementSelect (MLX90632_MEAS_MEDICAL)) {
153161 WS_PRINTER.println (F (" Failed to set measurement select to Medical" ));
154- while (1 ) { delay (10 ); }
155- } else if (extendedInsteadOfMedicalRange && !_mlx90632->setMeasurementSelect (MLX90632_MEAS_EXTENDED_RANGE)) {
156- WS_PRINTER.println (F (" Failed to set measurement select to Extended Range" ));
157- while (1 ) { delay (10 ); }
162+ while (1 ) {
163+ delay (10 );
164+ }
165+ } else if (extendedInsteadOfMedicalRange &&
166+ !_mlx90632->setMeasurementSelect (
167+ MLX90632_MEAS_EXTENDED_RANGE)) {
168+ WS_PRINTER.println (
169+ F (" Failed to set measurement select to Extended Range" ));
170+ while (1 ) {
171+ delay (10 );
172+ }
158173 }
159174
160- mlx90632_meas_select_t currentMeasSelect = _mlx90632->getMeasurementSelect ();
175+ mlx90632_meas_select_t currentMeasSelect =
176+ _mlx90632->getMeasurementSelect ();
161177 WS_PRINTER.print (F (" Current measurement select: " ));
162178 switch (currentMeasSelect) {
163179 case MLX90632_MEAS_MEDICAL:
@@ -175,9 +191,11 @@ class WipperSnapper_I2C_Driver_MLX90632D : public WipperSnapper_I2C_Driver {
175191 WS_PRINTER.println (F (" \n --- Refresh Rate Settings ---" ));
176192 if (!_mlx90632->setRefreshRate (MLX90632_REFRESH_2HZ)) {
177193 WS_PRINTER.println (F (" Failed to set refresh rate to 2Hz" ));
178- while (1 ) { delay (10 ); }
194+ while (1 ) {
195+ delay (10 );
196+ }
179197 }
180-
198+
181199 mlx90632_refresh_rate_t currentRefreshRate = _mlx90632->getRefreshRate ();
182200 WS_PRINTER.print (F (" Current refresh rate: " ));
183201 switch (currentRefreshRate) {
@@ -208,12 +226,14 @@ class WipperSnapper_I2C_Driver_MLX90632D : public WipperSnapper_I2C_Driver {
208226 default :
209227 WS_PRINTER.println (F (" Unknown" ));
210228 }
211-
229+
212230 // Clear new data flag before starting continuous measurements
213231 WS_PRINTER.println (F (" \\ n--- Starting Continuous Measurements ---" ));
214232 if (!_mlx90632->resetNewData ()) {
215233 WS_PRINTER.println (F (" Failed to reset new data flag" ));
216- while (1 ) { delay (10 ); }
234+ while (1 ) {
235+ delay (10 );
236+ }
217237 }
218238 return true ;
219239 }
@@ -235,19 +255,19 @@ class WipperSnapper_I2C_Driver_MLX90632D : public WipperSnapper_I2C_Driver {
235255 */
236256 /* ******************************************************************************/
237257 bool ReadSensorData () {
238- bool result= false ;
258+ bool result = false ;
239259
240260 // Only check new data flag - much more efficient for continuous mode
241261 if (_mlx90632->isNewData ()) {
242262 WS_PRINTER.print (F (" New Data Available - Cycle Position: " ));
243263 WS_PRINTER.println (_mlx90632->readCyclePosition ());
244-
264+
245265 // Read ambient temperature
246266 _deviceTemp = _mlx90632->getAmbientTemperature ();
247267 WS_PRINTER.print (F (" Ambient Temperature: " ));
248268 WS_PRINTER.print (_deviceTemp, 4 );
249269 WS_PRINTER.println (F (" °C" ));
250-
270+
251271 // Read object temperature
252272 _objectTemp = _mlx90632->getObjectTemperature ();
253273 WS_PRINTER.print (F (" Object Temperature: " ));
@@ -257,27 +277,27 @@ class WipperSnapper_I2C_Driver_MLX90632D : public WipperSnapper_I2C_Driver {
257277 WS_PRINTER.print (_objectTemp, 4 );
258278 WS_PRINTER.println (F (" °C" ));
259279 }
260- result= true ;
280+ result = true ;
261281 // Reset new data flag after reading
262282 if (!_mlx90632->resetNewData ()) {
263283 WS_PRINTER.println (F (" Failed to reset new data flag" ));
264284 }
265-
266- WS_PRINTER.println (); // Add blank line between readings
285+
286+ WS_PRINTER.println (); // Add blank line between readings
267287 } else {
268288 WS_PRINTER.println (F (" No new data available, skipping read" ));
269-
270289 }
271-
290+
272291 // Check if we need to trigger a new measurement for step modes
273292 mlx90632_mode_t currentMode = _mlx90632->getMode ();
274- if (currentMode == MLX90632_MODE_STEP || currentMode == MLX90632_MODE_SLEEPING_STEP) {
293+ if (currentMode == MLX90632_MODE_STEP ||
294+ currentMode == MLX90632_MODE_SLEEPING_STEP) {
275295 // Trigger single measurement (SOC bit) for step modes
276296 if (!_mlx90632->startSingleMeasurement ()) {
277297 WS_PRINTER.println (F (" Failed to start single measurement" ));
278298 }
279299 }
280-
300+
281301 _lastRead = millis ();
282302 return result;
283303 }
@@ -293,16 +313,16 @@ class WipperSnapper_I2C_Driver_MLX90632D : public WipperSnapper_I2C_Driver {
293313 /* ******************************************************************************/
294314 bool getEventAmbientTemp (sensors_event_t *tempEvent) {
295315 if (ReadSensorData () && _deviceTemp != NAN) {
296- // TODO: check max/min or error values in datasheet
297- // if (_deviceTemp < -40 || _deviceTemp > 125) {
298- // WS_PRINTER.println(F("Invalid ambient temperature"));
299- // return false;
300- // }
301- // if the sensor was read recently, return the cached temperature
316+ // TODO: check max/min or error values in datasheet
317+ // if (_deviceTemp < -40 || _deviceTemp > 125) {
318+ // WS_PRINTER.println(F("Invalid ambient temperature"));
319+ // return false;
320+ // }
321+ // if the sensor was read recently, return the cached temperature
302322 tempEvent->temperature = _deviceTemp;
303323 return true ;
304324 }
305- return false ; // sensor not read recently, return false
325+ return false ; // sensor not read recently, return false
306326 }
307327
308328 /* ******************************************************************************/
@@ -320,14 +340,14 @@ class WipperSnapper_I2C_Driver_MLX90632D : public WipperSnapper_I2C_Driver {
320340 tempEvent->temperature = _objectTemp;
321341 return true ;
322342 }
323- return false ; // sensor not read recently, return false
343+ return false ; // sensor not read recently, return false
324344 }
325345
326- protected:
327- double _deviceTemp; // /< Device temperature in Celsius
328- double _objectTemp; // /< Object temperature in Celsius
329- uint32_t _lastRead; // /< Last time the sensor was read in milliseconds
330- Adafruit_MLX90632 *_mlx90632 = nullptr ; // /< MLX90632 object
346+ protected:
347+ double _deviceTemp; // /< Device temperature in Celsius
348+ double _objectTemp; // /< Object temperature in Celsius
349+ uint32_t _lastRead; // /< Last time the sensor was read in milliseconds
350+ Adafruit_MLX90632 *_mlx90632 = nullptr ; // /< MLX90632 object
331351};
332352
333- #endif // WipperSnapper_I2C_Driver_MLX90632
353+ #endif // WipperSnapper_I2C_Driver_MLX90632
0 commit comments