Semaphore attempt ben

Dependencies:   mbed mbed-rtos 4DGL-uLCD-SE SDFileSystem ATParser

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();
     }