![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Semaphore attempt ben
Dependencies: mbed mbed-rtos 4DGL-uLCD-SE SDFileSystem ATParser
Diff: main.cpp
- Revision:
- 2:f65d4206b47b
- Parent:
- 1:8eb0ee57df9f
- Child:
- 3:2a4bee05d0c1
--- a/main.cpp Mon Apr 20 04:30:14 2020 +0000 +++ b/main.cpp Fri Apr 24 18:55:46 2020 +0000 @@ -3,9 +3,10 @@ #include "ATParser.h" #include "uLCD_4DGL.h" #include "SDFileSystem.h" +#include "Speaker.h" //#include "wave_player.h" #include <string> -#include <iostream> +#include <iostream> using namespace std; //General setups @@ -13,10 +14,15 @@ Serial pc(USBTX, USBRX); BufferedSerial ble(p13,p14); DigitalOut cmdstuff(p18); +DigitalOut greenLED(p24); +DigitalOut yellowLED(p25); +DigitalOut redLED(p26); uLCD_4DGL uLCD(p28,p27,p30); SDFileSystem sd(p5, p6, p7, p8, "sd"); +//Speaker mySpeaker(p21); //AT command data handlers +bool datalogged = 0; char delimiter[] = "\r\n"; int buffer_size = 256; int timeout = 100; @@ -25,26 +31,31 @@ char buffer[10]; volatile int risk_level = 0; -//RTOS +//RTOS Mutex Lock Mutex mutex_lock; //Global Data points and arrays int averageCount = 0; volatile int RSSI_array[15]; +//This portion of the code handles RSSI readings -int calculate_average(volatile int *input, int size){ +int calculate_average(volatile int *input, int size) +{ int average; - for(int i = 0; i< size; i++){ + for(int i = 0; i< size; i++) { average = average + input[i]; } average = average/size; return average; } -void parse_RSSI(){ +void parse_RSSI() +{ + mutex_lock.lock(); at.send("AT+BLEGETRSSI") && at.read(buffer, 10); - if(buffer[0] == '-'){ + if(buffer[0] == '-') { + datalogged = 1; pc.printf("RSSI: "); pc.putc(buffer[1]); pc.putc(buffer[2]); @@ -52,47 +63,97 @@ int digit1 = buffer[1] - 48; int digit2 = buffer[2] - 48; int total = 10*digit1 + digit2; - if (averageCount <= 15){ + if (averageCount <= 15) { RSSI_array[averageCount] = total; } - averageCount++; - if(averageCount > 15 && buffer[0] == '-'){ + averageCount++; + if(averageCount > 15 && buffer[0] == '-') { averageCount = 0; int average = calculate_average(RSSI_array, 15); - if(average < 55){ + if(average < 55) { risk_level = 3; - }else if(average > 55 && average < 70) { + } else if(average > 55 && average < 70) { risk_level = 2; - }else if(average > 70 && average < 90) { + } else if(average > 70 && average < 90) { risk_level = 1; - } - else{ - risk_level = 0; + } else { + risk_level = 0; } } pc.printf("Risk level: "); pc.printf("%i\n", risk_level); - }else{ + } else { pc.printf("Disconnected\n"); + datalogged = 0; + } + mutex_lock.unlock(); +} + +//This portion of the code handles peripherals +/* +void speaker_alarm() +{ + while(1){ + if(risk_level >= 2 && datalogged){ + mySpeaker.PlayNote(969.0, 0.5, 1.0); + mySpeaker.PlayNote(800.0, 0.5, 1.0); + }else{ + mySpeaker.PlayNote(0.0, 0.0, 0.0); + } + } +} +*/ + +void logging_SD_card() +{ + +} + +void blink_leds() +{ + while(1){ + if(risk_level <= 1 && datalogged){ + greenLED = 1; + redLED = 0; + yellowLED = 0; + }else if(risk_level == 2 && datalogged){ + yellowLED = 1; + greenLED = 0; + redLED = 0; + }else if(risk_level == 3 && datalogged){ + redLED = 1; + yellowLED = 0; + greenLED = 0; + }else{ + redLED = 0; + yellowLED = 0; + greenLED = 0; + } } } -void speaker_alarm(){ - -} +void display_ulcd() +{ + while(1){ + mutex_lock.lock(); + if(risk_level <= 1 && datalogged){ + uLCD.background_color(BLACK); + uLCD.text_string("Safe", 1, 4, FONT_7X8, WHITE); + }else if(risk_level == 2 && datalogged){ + uLCD.background_color(BLACK); + uLCD.text_string("Cautious 2", 1, 4, FONT_7X8, WHITE); + }else if(risk_level == 3 && datalogged){ + uLCD.background_color(BLACK); + uLCD.text_string("Hazardous", 1, 4, FONT_7X8, WHITE); + }else{ + uLCD.background_color(BLACK); + uLCD.text_string("ok", 1, 4, FONT_7X8, WHITE); + } + mutex_lock.unlock(); + } -void logging_SD_card(){ - } -void blink_leds(){ - -} - -void display_ulcd(){ - -} - int main() { cmdstuff = 1; @@ -100,11 +161,12 @@ at.send("AT+AB ChangeDefaultBaud [9600]", 3) && at.recv("OK"); pc.baud(9600); ble.baud(9600); + + //Thread SD_Thread(); + Thread ULCD_Thread(display_ulcd); + Thread LED_Thread(blink_leds); + //Thread Speaker_Thread(speaker_alarm); - Thread SD_Thread(); - Thread ULCD_Thread(); - Thread LED_Thread(); - Thread Speaker_Thread(); while(1) { parse_RSSI(); }