6
6
#include < Adafruit_Sensor.h>
7
7
#include < Adafruit_BME280.h>
8
8
#include < MPU6050_tockn.h>
9
+ #if !defined(ARDUINO_ARCH_MBED_RP2040) // && defined(ARDUINO_ARCH_RP2040)
10
+ #include < EEPROM.h>
11
+ #endif
9
12
10
13
#if defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Arduino Mbed OS RP2040 Boards is used in Arduino IDE
11
14
#include < TinyGPS++.h>
@@ -35,6 +38,9 @@ int greenLED = 9;
35
38
int blueLED = 8 ;
36
39
int Sensor1 = 0 ;
37
40
float Sensor2 = 0 ;
41
+ float temp;
42
+ int calibration = 0 ;
43
+
38
44
void ee_prom_word_write (int addr, int val);
39
45
short ee_prom_word_read (int addr);
40
46
int first_time = true ;
@@ -84,7 +90,11 @@ void setup() {
84
90
#endif
85
91
86
92
Serial1.begin (115200 ); // for communication with Pi Zero
87
-
93
+
94
+ #if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards in Arduino IDE
95
+ EEPROM.begin (512 );
96
+ #endif
97
+
88
98
delay (2000 );
89
99
90
100
#if defined (ARDUINO_ARCH_MBED_RP2040) && (ARDUINO_ARCH_RP2040)
@@ -151,23 +161,66 @@ void setup() {
151
161
Serial.println (zOffset, DEC);
152
162
153
163
mpu6050.setGyroOffsets (xOffset, yOffset, zOffset);
164
+
165
+ Serial.println (" \n Temperature calibration data from EEPROM\n " );
166
+
167
+ T1 = ((float )eeprom_word_read (4 )) / 10.0 ;
168
+ R1 = ((float )eeprom_word_read (5 ));
169
+ T2 = ((float )eeprom_word_read (6 )) / 10.0 ;
170
+ R2 = ((float )eeprom_word_read (7 ));
171
+
172
+ Serial.println (T1, DEC);
173
+ Serial.println (R1, DEC);
174
+ Serial.println (" " );
175
+ Serial.println (T2, DEC);
176
+ Serial.println (R2, DEC);
177
+ Serial.println (" " );
178
+
154
179
}
155
180
else
156
181
{
157
182
Serial.println (" Calculating gyro offsets\n " );
158
- mpu6050.calcGyroOffsets (true );
159
- #if !defined (ARDUINO_ARCH_RP2040)
183
+ mpu6050.calcGyroOffsets (true );
184
+
185
+ #if !defined(ARDUINO_ARCH_MBED_RP2040) // && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
160
186
Serial.println (" Storing gyro offsets in EEPROM\n " );
161
187
162
188
eeprom_word_write (0 , 0xA07 );
163
189
eeprom_word_write (1 , (int )(mpu6050.getGyroXoffset () * 100.0 ) + 0.5 );
164
190
eeprom_word_write (2 , (int )(mpu6050.getGyroYoffset () * 100.0 ) + 0.5 );
165
- eeprom_word_write (3 , (int )(mpu6050.getGyroZoffset () * 100.0 ) + 0.5 );
191
+ eeprom_word_write (3 , (int )(mpu6050.getGyroZoffset () * 100.0 ) + 0.5 );
166
192
167
193
Serial.println (eeprom_word_read (0 ), HEX);
168
194
Serial.println (((float )eeprom_word_read (1 )) / 100.0 , DEC);
169
195
Serial.println (((float )eeprom_word_read (2 )) / 100.0 , DEC);
170
196
Serial.println (((float )eeprom_word_read (3 )) / 100.0 , DEC);
197
+
198
+ Serial.println (" \n Storing temperature calibration data in EEPROM\n " );
199
+
200
+ eeprom_word_write (4 , (int )(T1 * 10.0 ) + 0.5 );
201
+ eeprom_word_write (5 , (int ) R1);
202
+ eeprom_word_write (6 , (int )(T2 * 10.0 ) + 0.5 );
203
+ eeprom_word_write (7 , (int ) R2);
204
+
205
+ T1 = ((float )eeprom_word_read (4 )) / 10.0 ;
206
+ R1 = ((float )eeprom_word_read (5 ));
207
+ T2 = ((float )eeprom_word_read (6 )) / 10.0 ;
208
+ R2 = ((float )eeprom_word_read (7 ));
209
+
210
+ Serial.println (T1, DEC);
211
+ Serial.println (R1, DEC);
212
+ Serial.println (" " );
213
+ Serial.println (T2, DEC);
214
+ Serial.println (R2, DEC);
215
+ Serial.println (" " );
216
+
217
+ #if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
218
+ if (EEPROM.commit ()) {
219
+ Serial.println (" EEPROM successfully committed\n " );
220
+ } else {
221
+ Serial.println (" ERROR! EEPROM commit failed\n " );
222
+ }
223
+ #endif
171
224
#endif
172
225
}
173
226
payload_setup (); // sensor extension setup function defined in payload_extension.cpp
@@ -201,7 +254,8 @@ void loop() {
201
254
Serial1.print (bme.readHumidity ());
202
255
203
256
Serial.print (" OK BME280 " );
204
- Serial.print (bme.readTemperature ());
257
+ temp = bme.readTemperature ();
258
+ Serial.print (temp);
205
259
Serial.print (" " );
206
260
Serial.print (bme.readPressure () / 100 .0F );
207
261
Serial.print (" " );
@@ -314,20 +368,76 @@ void loop() {
314
368
// Serial.println(result);
315
369
// Serial.println("OK");
316
370
// Serial.println(counter++);
317
- #if !defined (ARDUINO_ARCH_RP2040)
318
- if (result == ' R' ) {
319
- Serial1.println (" OK" );
320
- delay (100 );
371
+ // #if !defined (ARDUINO_ARCH_RP2040)
372
+ if (result == ' R' || result == ' r' ) {
373
+ // Serial1.println("OK");
374
+ // delay(100);
375
+ Serial.println (" Resetting\n " );
321
376
first_read = true ;
322
377
setup ();
323
378
}
324
- else if (result == ' C' ) {
325
- Serial.println (" Clearing stored gyro offsets in EEPROM\n " );
379
+ else if (result == ' D' || result == ' d' ) {
380
+ Serial.println (" \n Current temperature calibration data\n " );
381
+ Serial.println (T1, DEC);
382
+ Serial.println (R1, DEC);
383
+ Serial.println (" " );
384
+ Serial.println (T2, DEC);
385
+ Serial.println (R2, DEC);
386
+
387
+ Serial.println (" \n Current raw temperature reading\n " );
388
+ Serial.println (sensorValue, DEC);
389
+ Serial.println (" " );
390
+ }
391
+ else if (result == ' C' || result == ' c' ) {
392
+ Serial.println (" \n Clearing stored gyro offsets in EEPROM\n " );
326
393
eeprom_word_write (0 , 0x00 );
394
+ #if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
395
+
396
+ if (EEPROM.commit ()) {
397
+ Serial.println (" EEPROM successfully committed\n " );
398
+ } else {
399
+ Serial.println (" ERROR! EEPROM commit failed\n " );
400
+ }
401
+ #endif
327
402
first_time = true ;
328
403
setup ();
329
- }
330
- #endif
404
+ }
405
+ else if (result == ' S' || result == ' s' ) {
406
+ Serial.print (" \n Storing temperature calibration data point " ); // in EEPROM\n");
407
+ Serial.print (calibration + 1 );
408
+ Serial.print (" in EEPROM\n " );
409
+
410
+ Serial.println (temp);
411
+ Serial.println (sensorValue);
412
+ Serial.println (" " );
413
+
414
+ eeprom_word_write (calibration * 2 + 4 , (int )(temp * 10.0 ) + 0.5 );
415
+ eeprom_word_write (calibration * 2 + 5 , sensorValue);
416
+
417
+ if (calibration == 0 ) {
418
+ T1 = temp;
419
+ R1 = sensorValue;
420
+ calibration = 1 ;
421
+ } else {
422
+ T2 = temp;
423
+ R2 = sensorValue;
424
+ calibration = 0 ;
425
+ }
426
+
427
+ // calibration = (calibration + 1) % 2;
428
+ // Serial.println(calibration + 1);
429
+
430
+ #if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
431
+
432
+ if (EEPROM.commit ()) {
433
+ Serial.println (" EEPROM successfully committed\n " );
434
+ } else {
435
+ Serial.println (" ERROR! EEPROM commit failed\n " );
436
+ }
437
+ #endif
438
+
439
+ }
440
+ // #endif
331
441
}
332
442
333
443
#if defined (ARDUINO_ARCH_MBED_RP2040) || (ARDUINO_ARCH_RP2040)
@@ -343,7 +453,7 @@ void loop() {
343
453
344
454
void eeprom_word_write (int addr, int val)
345
455
{
346
- #if !defined(ARDUINO_ARCH_MBED_RP2040) && ! defined(ARDUINO_ARCH_RP2040)
456
+ #if !defined(ARDUINO_ARCH_MBED_RP2040) // && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
347
457
EEPROM.write (addr * 2 , lowByte (val));
348
458
EEPROM.write (addr * 2 + 1 , highByte (val));
349
459
#endif
@@ -352,7 +462,7 @@ void eeprom_word_write(int addr, int val)
352
462
short eeprom_word_read (int addr)
353
463
{
354
464
int result = 0 ;
355
- #if !defined(ARDUINO_ARCH_MBED_RP2040) && ! defined(ARDUINO_ARCH_RP2040)
465
+ #if !defined(ARDUINO_ARCH_MBED_RP2040) // && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
356
466
result = ((EEPROM.read (addr * 2 + 1 ) << 8 ) | EEPROM.read (addr * 2 ));
357
467
#endif
358
468
return result;
@@ -391,9 +501,8 @@ void blink_setup()
391
501
// pinMode(25, OUTPUT);
392
502
pinMode (led_builtin_pin, OUTPUT);
393
503
}
394
- pinMode (18 , OUTPUT);
395
- pinMode (19 , OUTPUT);
396
-
504
+ pinMode (18 , OUTPUT);
505
+ pinMode (19 , OUTPUT);
397
506
#endif
398
507
}
399
508
0 commit comments