Firmware
Dependencies: BMI160 ADT7410 Thermistor DS1621 max32630fthr Adafruit_FeatherOLED
main.cpp@0:556294574340, 2020-07-09 (annotated)
- Committer:
- condato_mbed
- Date:
- Thu Jul 09 15:56:48 2020 +0000
- Revision:
- 0:556294574340
coldchainlogger
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
condato_mbed | 0:556294574340 | 1 | #include "mbed.h" |
condato_mbed | 0:556294574340 | 2 | #include "functions.h" |
condato_mbed | 0:556294574340 | 3 | #include "ble_functions.h" |
condato_mbed | 0:556294574340 | 4 | |
condato_mbed | 0:556294574340 | 5 | #include "RawSerial.h" |
condato_mbed | 0:556294574340 | 6 | #include "bmi160.h" |
condato_mbed | 0:556294574340 | 7 | #include "max32630fthr.h" |
condato_mbed | 0:556294574340 | 8 | #include "max3263x.h" |
condato_mbed | 0:556294574340 | 9 | #include "MAX14690.h" |
condato_mbed | 0:556294574340 | 10 | #include "ADT7410.h" |
condato_mbed | 0:556294574340 | 11 | #include "Adafruit_SSD1306.h" |
condato_mbed | 0:556294574340 | 12 | //#include "Thermistor.h" |
condato_mbed | 0:556294574340 | 13 | //#include "ds1621.h" |
condato_mbed | 0:556294574340 | 14 | |
condato_mbed | 0:556294574340 | 15 | #include <BLE.h> |
condato_mbed | 0:556294574340 | 16 | #include "ble/BLE.h" |
condato_mbed | 0:556294574340 | 17 | #include "ble/Gap.h" |
condato_mbed | 0:556294574340 | 18 | |
condato_mbed | 0:556294574340 | 19 | #include "SDBlockDevice.h" |
condato_mbed | 0:556294574340 | 20 | #include "FATFileSystem.h" |
condato_mbed | 0:556294574340 | 21 | |
condato_mbed | 0:556294574340 | 22 | #include <errno.h> |
condato_mbed | 0:556294574340 | 23 | #include <stdio.h> |
condato_mbed | 0:556294574340 | 24 | #include <time.h> |
condato_mbed | 0:556294574340 | 25 | #include <stdint.h> |
condato_mbed | 0:556294574340 | 26 | #include <InterruptIn.h> |
condato_mbed | 0:556294574340 | 27 | #include <InterruptManager.h> |
condato_mbed | 0:556294574340 | 28 | |
condato_mbed | 0:556294574340 | 29 | //MAX32630FTHR |
condato_mbed | 0:556294574340 | 30 | MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); |
condato_mbed | 0:556294574340 | 31 | |
condato_mbed | 0:556294574340 | 32 | //MAX14690 Wearable Power-Management Solution Driver |
condato_mbed | 0:556294574340 | 33 | I2C i2cm2(I2C2_SDA, I2C2_SCL); |
condato_mbed | 0:556294574340 | 34 | MAX14690 max14690(&i2cm2); |
condato_mbed | 0:556294574340 | 35 | |
condato_mbed | 0:556294574340 | 36 | char device_id[10]; |
condato_mbed | 0:556294574340 | 37 | |
condato_mbed | 0:556294574340 | 38 | int sensor_temp = 1; |
condato_mbed | 0:556294574340 | 39 | unsigned short int measure_id = 0; |
condato_mbed | 0:556294574340 | 40 | unsigned short int log_id = 0; |
condato_mbed | 0:556294574340 | 41 | |
condato_mbed | 0:556294574340 | 42 | //SD-Karte |
condato_mbed | 0:556294574340 | 43 | FATFileSystem fileSystem("fs"); |
condato_mbed | 0:556294574340 | 44 | SDBlockDevice blockDevice(P0_5, P0_6, P0_4, P0_7); // mosi, miso, sck, cs |
condato_mbed | 0:556294574340 | 45 | |
condato_mbed | 0:556294574340 | 46 | //Bluetooth-Modul PAN1326B |
condato_mbed | 0:556294574340 | 47 | RawSerial pan1326b(P0_1, P0_0); //TX, RX |
condato_mbed | 0:556294574340 | 48 | DigitalOut bt_rst (P1_6); //Bluetooth reset |
condato_mbed | 0:556294574340 | 49 | |
condato_mbed | 0:556294574340 | 50 | //I2C |
condato_mbed | 0:556294574340 | 51 | I2C i2c(P3_4, P3_5); //SDA, SCL |
condato_mbed | 0:556294574340 | 52 | |
condato_mbed | 0:556294574340 | 53 | //Temperatursensor |
condato_mbed | 0:556294574340 | 54 | ADT7410 myADT7410(P3_4, P3_5, 0x90, 100000); //SDA, SCL, Address, Hz |
condato_mbed | 0:556294574340 | 55 | |
condato_mbed | 0:556294574340 | 56 | //Termistor |
condato_mbed | 0:556294574340 | 57 | //Thermistor extruder(AIN_1); |
condato_mbed | 0:556294574340 | 58 | |
condato_mbed | 0:556294574340 | 59 | //DS1621 |
condato_mbed | 0:556294574340 | 60 | //#define DS1621_ADDR 0 // I2c DS1621 address is 0x00 |
condato_mbed | 0:556294574340 | 61 | //DS1621 ds(&i2c, DS1621_ADDR); // Declare ds1621 throught i2c interface |
condato_mbed | 0:556294574340 | 62 | |
condato_mbed | 0:556294574340 | 63 | //Akku-monitoring |
condato_mbed | 0:556294574340 | 64 | AnalogIn battery(AIN_0); |
condato_mbed | 0:556294574340 | 65 | |
condato_mbed | 0:556294574340 | 66 | //USB-monitroing |
condato_mbed | 0:556294574340 | 67 | AnalogIn usb(AIN_5); |
condato_mbed | 0:556294574340 | 68 | |
condato_mbed | 0:556294574340 | 69 | //LEDs |
condato_mbed | 0:556294574340 | 70 | DigitalOut r (P2_4); //Rote LED |
condato_mbed | 0:556294574340 | 71 | DigitalOut g (P2_5); //Grüne LED |
condato_mbed | 0:556294574340 | 72 | DigitalOut b (P2_6); //Blaue LED |
condato_mbed | 0:556294574340 | 73 | DigitalOut RGBs[] = {r, g, b}; //LEDs Liste |
condato_mbed | 0:556294574340 | 74 | /* |
condato_mbed | 0:556294574340 | 75 | DigitalOut r (P5_6); //Rote LED |
condato_mbed | 0:556294574340 | 76 | DigitalOut g (P5_5); //Grüne LED |
condato_mbed | 0:556294574340 | 77 | DigitalOut b (P5_4); //Blaue LED |
condato_mbed | 0:556294574340 | 78 | DigitalOut RGBs[] = {r, g, b}; //LEDs Liste |
condato_mbed | 0:556294574340 | 79 | */ |
condato_mbed | 0:556294574340 | 80 | //Button interrupt |
condato_mbed | 0:556294574340 | 81 | InterruptIn button(P2_3, PullUp); //Auf Pull Up eingestellt |
condato_mbed | 0:556294574340 | 82 | //InterruptIn button(P5_3, PullUp); //BT |
condato_mbed | 0:556294574340 | 83 | //InterruptIn button2(P3_3, PullUp); //BT |
condato_mbed | 0:556294574340 | 84 | |
condato_mbed | 0:556294574340 | 85 | //I2C OLED |
condato_mbed | 0:556294574340 | 86 | Adafruit_SSD1306_I2c featherOLED(i2c); |
condato_mbed | 0:556294574340 | 87 | /* |
condato_mbed | 0:556294574340 | 88 | //OLED Buttons |
condato_mbed | 0:556294574340 | 89 | InterruptIn aButton(P5_3, PullUp); |
condato_mbed | 0:556294574340 | 90 | InterruptIn bButton(P3_3, PullUp); |
condato_mbed | 0:556294574340 | 91 | InterruptIn cButton(P3_2, PullUp); |
condato_mbed | 0:556294574340 | 92 | */ |
condato_mbed | 0:556294574340 | 93 | Timeout after_BLE; |
condato_mbed | 0:556294574340 | 94 | Timeout led_check; //Zum Überprüfen, ob Datenlogger an ist |
condato_mbed | 0:556294574340 | 95 | Timeout turnoff; //Zum Auschalten (nicht implementiert) |
condato_mbed | 0:556294574340 | 96 | Timeout flipper; //Zum Bluetooth an / aus |
condato_mbed | 0:556294574340 | 97 | Timeout advertise_cancel; //Zum abbrechen von BT bei keinem Verbindungsaufbau |
condato_mbed | 0:556294574340 | 98 | Timeout connected_cancel; //Zum abbrechen von BT bei kein Befehlempfang |
condato_mbed | 0:556294574340 | 99 | Ticker mess_timer; //ticker eventuell nur bis 30 Minuten geeignet |
condato_mbed | 0:556294574340 | 100 | Ticker ticker; |
condato_mbed | 0:556294574340 | 101 | Ticker charger; |
condato_mbed | 0:556294574340 | 102 | |
condato_mbed | 0:556294574340 | 103 | time_t now; //Zeit Funktionen |
condato_mbed | 0:556294574340 | 104 | time_t raw; |
condato_mbed | 0:556294574340 | 105 | |
condato_mbed | 0:556294574340 | 106 | float buffer_temp; |
condato_mbed | 0:556294574340 | 107 | struct tm current = {0}; //tm - Zeit im Kalenderformat |
condato_mbed | 0:556294574340 | 108 | struct tm actual = {0}; |
condato_mbed | 0:556294574340 | 109 | |
condato_mbed | 0:556294574340 | 110 | volatile int quit = 0; //BLE Advertise Flag |
condato_mbed | 0:556294574340 | 111 | volatile int conn_state = 0; //Verbindungsstatus für BLE |
condato_mbed | 0:556294574340 | 112 | |
condato_mbed | 0:556294574340 | 113 | bool after_BT = false; |
condato_mbed | 0:556294574340 | 114 | bool in_BT = false; //Flag für BLE ist an |
condato_mbed | 0:556294574340 | 115 | bool error_status = false; //Wenn es ein Fehler beim Initialisierung gab |
condato_mbed | 0:556294574340 | 116 | bool BT_error = false; //Wenn es BLE oder SD Fehler ist, dann werden die Button Interrupts nicht deklariert |
condato_mbed | 0:556294574340 | 117 | bool shipping = false; //Sendevorgang Status |
condato_mbed | 0:556294574340 | 118 | bool pause = true; //Pause während Sendevorgang |
condato_mbed | 0:556294574340 | 119 | bool init_status = false; //Erfolgreiche Initialisierung Status |
condato_mbed | 0:556294574340 | 120 | bool charge = false; //Wenn DL an Stromnetz angeschlossen ist |
condato_mbed | 0:556294574340 | 121 | |
condato_mbed | 0:556294574340 | 122 | struct tm user_config_time; |
condato_mbed | 0:556294574340 | 123 | struct user_config_struct user_config_para = {0, 0, 0, 0, 0, 0, 0}; //Liste für Config Parameter |
condato_mbed | 0:556294574340 | 124 | |
condato_mbed | 0:556294574340 | 125 | int next_state = 0; //State-Machine |
condato_mbed | 0:556294574340 | 126 | |
condato_mbed | 0:556294574340 | 127 | int unsigned long unix_time = 0; //Zeit in Unix Zeitformat |
condato_mbed | 0:556294574340 | 128 | |
condato_mbed | 0:556294574340 | 129 | int default_advertise_time = 300; //Default Timer für BLE advertising |
condato_mbed | 0:556294574340 | 130 | int default_connected_time = 180; //Default Timer für BLE verbunden |
condato_mbed | 0:556294574340 | 131 | |
condato_mbed | 0:556294574340 | 132 | int alert_count = 0; //Alarme Zähler |
condato_mbed | 0:556294574340 | 133 | |
condato_mbed | 0:556294574340 | 134 | void turnOFF(){ |
condato_mbed | 0:556294574340 | 135 | if(BT_error == false){ |
condato_mbed | 0:556294574340 | 136 | in_BT = false; |
condato_mbed | 0:556294574340 | 137 | BT_false(); |
condato_mbed | 0:556294574340 | 138 | } |
condato_mbed | 0:556294574340 | 139 | next_state = 4; |
condato_mbed | 0:556294574340 | 140 | } |
condato_mbed | 0:556294574340 | 141 | |
condato_mbed | 0:556294574340 | 142 | void flip(){ |
condato_mbed | 0:556294574340 | 143 | if(BT_error == false){ |
condato_mbed | 0:556294574340 | 144 | in_BT = !in_BT; |
condato_mbed | 0:556294574340 | 145 | if(in_BT == true){ |
condato_mbed | 0:556294574340 | 146 | BT_true(); |
condato_mbed | 0:556294574340 | 147 | }else if(in_BT == false){ |
condato_mbed | 0:556294574340 | 148 | BT_false(); |
condato_mbed | 0:556294574340 | 149 | } |
condato_mbed | 0:556294574340 | 150 | } |
condato_mbed | 0:556294574340 | 151 | turnoff.attach(&turnOFF, 4); // Button für weitere 4 Sekunden halten um Datenlogger auszuschalten |
condato_mbed | 0:556294574340 | 152 | } |
condato_mbed | 0:556294574340 | 153 | |
condato_mbed | 0:556294574340 | 154 | void onCheck(){ |
condato_mbed | 0:556294574340 | 155 | r = 1; |
condato_mbed | 0:556294574340 | 156 | g = 1; |
condato_mbed | 0:556294574340 | 157 | } |
condato_mbed | 0:556294574340 | 158 | |
condato_mbed | 0:556294574340 | 159 | void pushed() |
condato_mbed | 0:556294574340 | 160 | { |
condato_mbed | 0:556294574340 | 161 | flipper.attach(&flip, 1); // Button für eine Sekunde gedrückt halten um BT zu aktivieren |
condato_mbed | 0:556294574340 | 162 | } |
condato_mbed | 0:556294574340 | 163 | |
condato_mbed | 0:556294574340 | 164 | void released() { |
condato_mbed | 0:556294574340 | 165 | if(quit == 0 && charge == false && after_BT == false){ |
condato_mbed | 0:556294574340 | 166 | if(error_status == true){ |
condato_mbed | 0:556294574340 | 167 | r = 0; |
condato_mbed | 0:556294574340 | 168 | }else if(shipping == true && pause == false){ |
condato_mbed | 0:556294574340 | 169 | r = 0; |
condato_mbed | 0:556294574340 | 170 | g = 0; |
condato_mbed | 0:556294574340 | 171 | }else{ |
condato_mbed | 0:556294574340 | 172 | g = 0; |
condato_mbed | 0:556294574340 | 173 | } |
condato_mbed | 0:556294574340 | 174 | led_check.attach(&onCheck, 3); |
condato_mbed | 0:556294574340 | 175 | } |
condato_mbed | 0:556294574340 | 176 | flipper.detach(); |
condato_mbed | 0:556294574340 | 177 | turnoff.detach(); |
condato_mbed | 0:556294574340 | 178 | } |
condato_mbed | 0:556294574340 | 179 | |
condato_mbed | 0:556294574340 | 180 | void pre_delay(){ |
condato_mbed | 0:556294574340 | 181 | for(int i = 0; user_config_para.pre_delay > i; i++){ |
condato_mbed | 0:556294574340 | 182 | r = 0; |
condato_mbed | 0:556294574340 | 183 | g = 0; |
condato_mbed | 0:556294574340 | 184 | b = 0; |
condato_mbed | 0:556294574340 | 185 | printf("\nPre-delay: %d of %d seconds\n", i + 1, user_config_para.pre_delay); |
condato_mbed | 0:556294574340 | 186 | wait_ms(500); |
condato_mbed | 0:556294574340 | 187 | r = 1; |
condato_mbed | 0:556294574340 | 188 | g = 1; |
condato_mbed | 0:556294574340 | 189 | b = 1; |
condato_mbed | 0:556294574340 | 190 | wait_ms(500); |
condato_mbed | 0:556294574340 | 191 | } |
condato_mbed | 0:556294574340 | 192 | } |
condato_mbed | 0:556294574340 | 193 | |
condato_mbed | 0:556294574340 | 194 | void mess_handler(){ |
condato_mbed | 0:556294574340 | 195 | next_state = 1; |
condato_mbed | 0:556294574340 | 196 | } |
condato_mbed | 0:556294574340 | 197 | |
condato_mbed | 0:556294574340 | 198 | void chargeCheck(){ |
condato_mbed | 0:556294574340 | 199 | |
condato_mbed | 0:556294574340 | 200 | } |
condato_mbed | 0:556294574340 | 201 | |
condato_mbed | 0:556294574340 | 202 | void states(){ |
condato_mbed | 0:556294574340 | 203 | switch(next_state){ |
condato_mbed | 0:556294574340 | 204 | case 0: |
condato_mbed | 0:556294574340 | 205 | {/* |
condato_mbed | 0:556294574340 | 206 | printf("\n\nSleep\n\n"); |
condato_mbed | 0:556294574340 | 207 | while ( next_state == 0 ){ |
condato_mbed | 0:556294574340 | 208 | float batteryProcent = (100 / 0.271) * (battery.read() - 0.704); |
condato_mbed | 0:556294574340 | 209 | if(usb.read() > 0.8){ |
condato_mbed | 0:556294574340 | 210 | r = 0; |
condato_mbed | 0:556294574340 | 211 | charge = true; |
condato_mbed | 0:556294574340 | 212 | }else if(usb.read() < 0.2){ |
condato_mbed | 0:556294574340 | 213 | r = 1; |
condato_mbed | 0:556294574340 | 214 | charge = false; |
condato_mbed | 0:556294574340 | 215 | } |
condato_mbed | 0:556294574340 | 216 | |
condato_mbed | 0:556294574340 | 217 | |
condato_mbed | 0:556294574340 | 218 | }*/ |
condato_mbed | 0:556294574340 | 219 | while ( next_state == 0 ){ |
condato_mbed | 0:556294574340 | 220 | sleep(); |
condato_mbed | 0:556294574340 | 221 | wait(0.1); |
condato_mbed | 0:556294574340 | 222 | } |
condato_mbed | 0:556294574340 | 223 | //wait(0.5); |
condato_mbed | 0:556294574340 | 224 | break; |
condato_mbed | 0:556294574340 | 225 | } |
condato_mbed | 0:556294574340 | 226 | case 1: |
condato_mbed | 0:556294574340 | 227 | { |
condato_mbed | 0:556294574340 | 228 | get_Messwert(); |
condato_mbed | 0:556294574340 | 229 | next_state = 0; |
condato_mbed | 0:556294574340 | 230 | break; |
condato_mbed | 0:556294574340 | 231 | } |
condato_mbed | 0:556294574340 | 232 | case 2: |
condato_mbed | 0:556294574340 | 233 | { |
condato_mbed | 0:556294574340 | 234 | r = 1; |
condato_mbed | 0:556294574340 | 235 | conn_state = 0; |
condato_mbed | 0:556294574340 | 236 | quit = 1; |
condato_mbed | 0:556294574340 | 237 | BLE_handler(); |
condato_mbed | 0:556294574340 | 238 | break; |
condato_mbed | 0:556294574340 | 239 | } |
condato_mbed | 0:556294574340 | 240 | case 3: |
condato_mbed | 0:556294574340 | 241 | { |
condato_mbed | 0:556294574340 | 242 | pre_delay(); |
condato_mbed | 0:556294574340 | 243 | next_state = 1; |
condato_mbed | 0:556294574340 | 244 | mess_timer.attach(&mess_handler, (float)user_config_para.interval); // Mess-Timer attachen |
condato_mbed | 0:556294574340 | 245 | break; |
condato_mbed | 0:556294574340 | 246 | } |
condato_mbed | 0:556294574340 | 247 | case 4: |
condato_mbed | 0:556294574340 | 248 | { |
condato_mbed | 0:556294574340 | 249 | b = 0; |
condato_mbed | 0:556294574340 | 250 | r = 0; |
condato_mbed | 0:556294574340 | 251 | if(BT_error == false){ |
condato_mbed | 0:556294574340 | 252 | char string[] = "Shutting down Coldchainlogger..."; |
condato_mbed | 0:556294574340 | 253 | write_to_sd_log_single(string); |
condato_mbed | 0:556294574340 | 254 | } |
condato_mbed | 0:556294574340 | 255 | printf("\n_______________________________\n\nShutting down Coldchainlogger\n_______________________________\n\n"); |
condato_mbed | 0:556294574340 | 256 | wait(0.5); |
condato_mbed | 0:556294574340 | 257 | max14690.shutdown(); |
condato_mbed | 0:556294574340 | 258 | } |
condato_mbed | 0:556294574340 | 259 | } |
condato_mbed | 0:556294574340 | 260 | } |
condato_mbed | 0:556294574340 | 261 | |
condato_mbed | 0:556294574340 | 262 | int main() { |
condato_mbed | 0:556294574340 | 263 | init(); |
condato_mbed | 0:556294574340 | 264 | BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE); |
condato_mbed | 0:556294574340 | 265 | |
condato_mbed | 0:556294574340 | 266 | if(BT_error == true){ |
condato_mbed | 0:556294574340 | 267 | printf("\nBluetooth or SD initialize error: bluetooth can not be used\n"); |
condato_mbed | 0:556294574340 | 268 | } |
condato_mbed | 0:556294574340 | 269 | |
condato_mbed | 0:556294574340 | 270 | __enable_irq(); |
condato_mbed | 0:556294574340 | 271 | button.fall(&pushed); |
condato_mbed | 0:556294574340 | 272 | button.rise(&released); |
condato_mbed | 0:556294574340 | 273 | |
condato_mbed | 0:556294574340 | 274 | while(true) { |
condato_mbed | 0:556294574340 | 275 | /* |
condato_mbed | 0:556294574340 | 276 | printf("ANALOG: %f\n", battery.read()); |
condato_mbed | 0:556294574340 | 277 | float batteryProcent = (100 / 0.271) * (battery.read() - 0.704); |
condato_mbed | 0:556294574340 | 278 | printf("PROCENT: %f\n", batteryProcent); |
condato_mbed | 0:556294574340 | 279 | |
condato_mbed | 0:556294574340 | 280 | printf("Extruder Temperature %f *C\r\n",extruder.get_temperature()); |
condato_mbed | 0:556294574340 | 281 | printf("Sensor Temperature %f *C\r\n",myADT7410.getTemp()); |
condato_mbed | 0:556294574340 | 282 | wait(.5); |
condato_mbed | 0:556294574340 | 283 | */ |
condato_mbed | 0:556294574340 | 284 | states(); |
condato_mbed | 0:556294574340 | 285 | } |
condato_mbed | 0:556294574340 | 286 | } |