HAND
Dependencies: mbed BMI160 MLX90614 max32630fthr Adafruit_FeatherOLED MAX30100
main.cpp
- Committer:
- condato_mbed
- Date:
- 2021-11-03
- Revision:
- 1:774d50d6f9d6
- Parent:
- 0:d36fd4cabb70
File content as of revision 1:774d50d6f9d6:
#include "mbed.h" #include "functions.h" #include "ble_functions.h" #include "RawSerial.h" #include "bmi160.h" #include "max32630fthr.h" #include "max3263x.h" #include "MAX14690.h" #include "Adafruit_SSD1306.h" #include "MAX30100_PulseOximeter.h" #include "mlx90614.h" #include <BLE.h> #include "ble/BLE.h" #include "ble/Gap.h" #include "SDBlockDevice.h" #include "FATFileSystem.h" #include <errno.h> #include <stdio.h> #include <time.h> #include <stdint.h> #include <InterruptIn.h> #include <InterruptManager.h> //MAX32630FTHR MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); //MAX14690 Wearable Power-Management Solution Driver I2C i2cm2(I2C2_SDA, I2C2_SCL); MAX14690 max14690(&i2cm2); char device_id[10]; Mutex stdio_mutex; int sensor_temp = 1; unsigned short int measure_id = 0; unsigned short int log_id = 0; //SD-Karte FATFileSystem fileSystem("fs"); SDBlockDevice blockDevice(P0_5, P0_6, P0_4, P0_7); // mosi, miso, sck, cs //Bluetooth-Modul PAN1326B RawSerial pan1326b(P0_1, P0_0); //TX, RX DigitalOut bt_rst (P1_6); //Bluetooth reset //I2C I2C i2c(P3_4, P3_5); //SDA, SCL //Akku AnalogIn battery(AIN_0); //LED DigitalOut r (P2_4); DigitalOut g (P2_5); DigitalOut b (P2_6); DigitalOut RGBs[] = {r, g, b}; // r, g, b //Button interrupt InterruptIn button(P2_3, PullUp); //I2C OLED Adafruit_SSD1306_I2c featherOLED(i2c); //OLED InterruptIn aButton(P5_3, PullUp); InterruptIn bButton(P3_3, PullUp); InterruptIn cButton(P3_2, PullUp); AnalogIn ain0(AIN_4); AnalogIn ain1(AIN_5); AnalogIn ain2(AIN_2); AnalogIn ain3(AIN_3); //MAX30100 Timer t; PulseOximeter pox; uint32_t tsLastReport = 0; //PulseSensor /* PulseSensor* sensor; static volatile uint8_t hrmCounter; static volatile bool triggerSensorPolling; */ AnalogIn ain = AIN_4; double anSignal; int bpm; int signal; int ibi; //MLX90614 MLX90614 IR_thermometer(&i2c); float ir_temp; //temperature in degrees C float buffer_temp; struct tm current = {0}; struct tm actual = {0}; //char ble_buff[255]; int counter_ble = 0; Timeout after_BLE; Timeout led_check; //Zum Überprüfen, ob Datenlogger an ist Timeout turnoff; //Zum Auschalten (nicht implementiert) Timeout flipper; //Zum Bluetooth an / aus Timeout advertise_cancel; //Zum abbrechen von BT bei keinem Verbindungsaufbau Timeout connected_cancel; //Zum abbrechen von BT bei kein Befehlempfang Ticker mess_timer; //ticker eventuell nur bis 30 Minuten geeignet Ticker ticker; Ticker hearth; time_t now; time_t raw; volatile int quit = 0; volatile int ble_return = 0; volatile int conn_state = 0; //Verbindungsstatus für BLE bool after_BT = false; bool in_BT = false; //Flag für BLE ist an bool error_status = false; //Wenn es ein Fehler beim Initialisierung gab bool BT_error = false; //Wenn es BLE oder SD Fehler ist, dann werden die Button Interrupts nicht deklariert bool shipping = false; //Sendevorgang Status bool pause = true; //Pause während Sendevorgang bool init_status = false; //Erfolgreiche Initialisierung Status bool charge = false; //Wenn DL an Stromnetz angeschlossen ist struct tm user_config_time; struct user_config_struct user_config_para = {0, 0, 0, 0, 0, 0, 0}; int next_state = 0; // State-Machine int unsigned long t_diff = 0; int unsigned long unix_time = 0; int default_advertise_time = 300; int default_connected_time = 180; int alert_count = 0; float heartRate; uint8_t sp02; void turnOFF(){ flipper.detach(); turnoff.detach(); printf("\nTEST 2\n"); char string[] = "Shutting down Coldchainlogger..."; write_to_sd_log_single(string); printf("\nTEST 3\n"); printf("\n__________________________\n\nColdcahinlogger - OFF\n__________________________\n\n"); wait(0.2); max14690.shutdown(); } void flip(){ in_BT = !in_BT; if(in_BT == true){ BT_true(); }else if(in_BT == false){ BT_false(); } } void onCheck(){ g = 1; r = 1; } void pushed() { flipper.attach(&flip, 1); // Button für eine Sekunde gedrückt halten um BT zu aktivieren turnoff.attach(&turnOFF, 5); // Button für eine Sekunde gedrückt halten um BT zu aktivieren } void released() { if(quit == 0 && charge == false && after_BT == false){ g = 0; led_check.attach(&onCheck, 3); } flipper.detach(); turnoff.detach(); } void mess_handler(){ next_state = 3; } void states(){ switch(next_state){ case 0: { mess_timer.detach(); printf("No Finger\n"); while ( next_state == 0 ){ loop(); if(battery.read() > 0.95){ r = 0; g = 0; charge = true; }else{ r = 1; charge = false; } loop(); featherOLED.display(); featherOLED.clearDisplay(); featherOLED.setTextCursor(0,0); featherOLED.printf("No Finger"); featherOLED.display(); } break; } case 1: { mess_timer.attach(&mess_handler, (float)user_config_para.interval); while ( next_state == 1 ){ loop(); featherOLED.display(); featherOLED.clearDisplay(); featherOLED.setTextCursor(0,0); featherOLED.printf("Heart rate: %f\n",heartRate); featherOLED.printf("SpO2: %d%\r\n",sp02); featherOLED.display(); } break; } case 2: { conn_state = 0; quit = 1; BLE_handler(); break; } case 3: { get_Messwert(); next_state = 1; break; } } } int main() { init(); BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE); if(BT_error == true){ printf("\nBluetooth or SD initialize error: bluetooth can not be used\n"); }else{ __enable_irq(); button.fall(&pushed); button.rise(&released); } while(true) { states(); } }