Ben with semaphore test 1

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

Committer:
bleverett3
Date:
Fri Apr 24 21:38:36 2020 +0000
Revision:
5:53a86492622d
Parent:
4:0a11aa484a67
Child:
6:be33395fe424
Ben lcd_lock test 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chenchen2020 0:bedc25613430 1 #include "mbed.h"
chenchen2020 0:bedc25613430 2 #include "rtos.h"
chenchen2020 0:bedc25613430 3 #include "ATParser.h"
chenchen2020 0:bedc25613430 4 #include "uLCD_4DGL.h"
chenchen2020 0:bedc25613430 5 #include "SDFileSystem.h"
chenchen2020 2:f65d4206b47b 6 #include "Speaker.h"
chenchen2020 0:bedc25613430 7 //#include "wave_player.h"
chenchen2020 0:bedc25613430 8 #include <string>
chenchen2020 2:f65d4206b47b 9 #include <iostream>
chenchen2020 0:bedc25613430 10 using namespace std;
chenchen2020 0:bedc25613430 11
chenchen2020 0:bedc25613430 12 //General setups
chenchen2020 0:bedc25613430 13 DigitalOut cmdMode(p18);
chenchen2020 0:bedc25613430 14 Serial pc(USBTX, USBRX);
chenchen2020 0:bedc25613430 15 BufferedSerial ble(p13,p14);
chenchen2020 0:bedc25613430 16 DigitalOut cmdstuff(p18);
chenchen2020 2:f65d4206b47b 17 DigitalOut greenLED(p24);
chenchen2020 2:f65d4206b47b 18 DigitalOut yellowLED(p25);
chenchen2020 2:f65d4206b47b 19 DigitalOut redLED(p26);
chenchen2020 0:bedc25613430 20 uLCD_4DGL uLCD(p28,p27,p30);
chenchen2020 0:bedc25613430 21 SDFileSystem sd(p5, p6, p7, p8, "sd");
bleverett3 4:0a11aa484a67 22
bleverett3 4:0a11aa484a67 23 Semaphore sem(0);
chenchen2020 2:f65d4206b47b 24 //Speaker mySpeaker(p21);
chenchen2020 0:bedc25613430 25
chenchen2020 0:bedc25613430 26 //AT command data handlers
chenchen2020 2:f65d4206b47b 27 bool datalogged = 0;
chenchen2020 0:bedc25613430 28 char delimiter[] = "\r\n";
chenchen2020 0:bedc25613430 29 int buffer_size = 256;
chenchen2020 0:bedc25613430 30 int timeout = 100;
chenchen2020 0:bedc25613430 31 bool debug = false;
chenchen2020 0:bedc25613430 32 ATParser at(ble, delimiter, buffer_size, timeout, debug);
chenchen2020 0:bedc25613430 33 char buffer[10];
chenchen2020 0:bedc25613430 34 volatile int risk_level = 0;
bleverett3 4:0a11aa484a67 35 int temp_risk = -1;
chenchen2020 0:bedc25613430 36
chenchen2020 2:f65d4206b47b 37 //RTOS Mutex Lock
chenchen2020 0:bedc25613430 38 Mutex mutex_lock;
bleverett3 5:53a86492622d 39 Mutex lcd_lock;
chenchen2020 0:bedc25613430 40
chenchen2020 0:bedc25613430 41 //Global Data points and arrays
chenchen2020 0:bedc25613430 42 int averageCount = 0;
chenchen2020 0:bedc25613430 43 volatile int RSSI_array[15];
chenchen2020 0:bedc25613430 44
chenchen2020 2:f65d4206b47b 45 //This portion of the code handles RSSI readings
chenchen2020 0:bedc25613430 46
chenchen2020 2:f65d4206b47b 47 int calculate_average(volatile int *input, int size)
chenchen2020 2:f65d4206b47b 48 {
chenchen2020 0:bedc25613430 49 int average;
chenchen2020 2:f65d4206b47b 50 for(int i = 0; i< size; i++) {
chenchen2020 0:bedc25613430 51 average = average + input[i];
chenchen2020 0:bedc25613430 52 }
chenchen2020 0:bedc25613430 53 average = average/size;
chenchen2020 0:bedc25613430 54 return average;
chenchen2020 0:bedc25613430 55 }
chenchen2020 0:bedc25613430 56
chenchen2020 2:f65d4206b47b 57 void parse_RSSI()
chenchen2020 2:f65d4206b47b 58 {
chenchen2020 2:f65d4206b47b 59 mutex_lock.lock();
bleverett3 5:53a86492622d 60 lcd_lock.lock();
chenchen2020 1:8eb0ee57df9f 61 at.send("AT+BLEGETRSSI") && at.read(buffer, 10);
chenchen2020 2:f65d4206b47b 62 if(buffer[0] == '-') {
bleverett3 4:0a11aa484a67 63 //datalogged = 1;
chenchen2020 0:bedc25613430 64 pc.printf("RSSI: ");
chenchen2020 0:bedc25613430 65 pc.putc(buffer[1]);
chenchen2020 0:bedc25613430 66 pc.putc(buffer[2]);
chenchen2020 0:bedc25613430 67 pc.printf("\n");
chenchen2020 0:bedc25613430 68 int digit1 = buffer[1] - 48;
chenchen2020 0:bedc25613430 69 int digit2 = buffer[2] - 48;
chenchen2020 0:bedc25613430 70 int total = 10*digit1 + digit2;
chenchen2020 2:f65d4206b47b 71 if (averageCount <= 15) {
chenchen2020 0:bedc25613430 72 RSSI_array[averageCount] = total;
chenchen2020 0:bedc25613430 73 }
chenchen2020 2:f65d4206b47b 74 averageCount++;
chenchen2020 2:f65d4206b47b 75 if(averageCount > 15 && buffer[0] == '-') {
bleverett3 5:53a86492622d 76
chenchen2020 0:bedc25613430 77 averageCount = 0;
chenchen2020 0:bedc25613430 78 int average = calculate_average(RSSI_array, 15);
chenchen2020 2:f65d4206b47b 79 if(average < 55) {
bleverett3 4:0a11aa484a67 80 temp_risk = 3;
chenchen2020 2:f65d4206b47b 81 } else if(average > 55 && average < 70) {
bleverett3 4:0a11aa484a67 82 temp_risk = 2;
chenchen2020 2:f65d4206b47b 83 } else if(average > 70 && average < 90) {
bleverett3 4:0a11aa484a67 84 temp_risk = 1;
chenchen2020 2:f65d4206b47b 85 } else {
bleverett3 4:0a11aa484a67 86 temp_risk = 0;
bleverett3 4:0a11aa484a67 87 }
bleverett3 4:0a11aa484a67 88 if(risk_level != temp_risk) {
bleverett3 4:0a11aa484a67 89 risk_level = temp_risk;
bleverett3 5:53a86492622d 90 lcd_lock.release();
chenchen2020 0:bedc25613430 91 }
chenchen2020 0:bedc25613430 92 }
chenchen2020 0:bedc25613430 93 pc.printf("Risk level: ");
chenchen2020 0:bedc25613430 94 pc.printf("%i\n", risk_level);
chenchen2020 2:f65d4206b47b 95 } else {
chenchen2020 0:bedc25613430 96 pc.printf("Disconnected\n");
chenchen2020 2:f65d4206b47b 97 datalogged = 0;
chenchen2020 2:f65d4206b47b 98 }
chenchen2020 2:f65d4206b47b 99 mutex_lock.unlock();
chenchen2020 2:f65d4206b47b 100 }
chenchen2020 2:f65d4206b47b 101
chenchen2020 2:f65d4206b47b 102 //This portion of the code handles peripherals
chenchen2020 2:f65d4206b47b 103 /*
chenchen2020 2:f65d4206b47b 104 void speaker_alarm()
chenchen2020 2:f65d4206b47b 105 {
chenchen2020 2:f65d4206b47b 106 while(1){
chenchen2020 2:f65d4206b47b 107 if(risk_level >= 2 && datalogged){
chenchen2020 2:f65d4206b47b 108 mySpeaker.PlayNote(969.0, 0.5, 1.0);
chenchen2020 2:f65d4206b47b 109 mySpeaker.PlayNote(800.0, 0.5, 1.0);
chenchen2020 2:f65d4206b47b 110 }else{
chenchen2020 2:f65d4206b47b 111 mySpeaker.PlayNote(0.0, 0.0, 0.0);
chenchen2020 2:f65d4206b47b 112 }
chenchen2020 2:f65d4206b47b 113 }
chenchen2020 2:f65d4206b47b 114 }
chenchen2020 2:f65d4206b47b 115 */
chenchen2020 2:f65d4206b47b 116
chenchen2020 2:f65d4206b47b 117 void logging_SD_card()
chenchen2020 2:f65d4206b47b 118 {
chenchen2020 2:f65d4206b47b 119
chenchen2020 2:f65d4206b47b 120 }
chenchen2020 2:f65d4206b47b 121
chenchen2020 2:f65d4206b47b 122 void blink_leds()
chenchen2020 2:f65d4206b47b 123 {
chenchen2020 2:f65d4206b47b 124 while(1){
bleverett3 5:53a86492622d 125 if(risk_level <= 1){
chenchen2020 2:f65d4206b47b 126 greenLED = 1;
chenchen2020 2:f65d4206b47b 127 redLED = 0;
chenchen2020 2:f65d4206b47b 128 yellowLED = 0;
bleverett3 5:53a86492622d 129 }else if(risk_level == 2){
chenchen2020 2:f65d4206b47b 130 yellowLED = 1;
chenchen2020 2:f65d4206b47b 131 greenLED = 0;
chenchen2020 2:f65d4206b47b 132 redLED = 0;
bleverett3 5:53a86492622d 133 }else if(risk_level == 3){
chenchen2020 2:f65d4206b47b 134 redLED = 1;
chenchen2020 2:f65d4206b47b 135 yellowLED = 0;
chenchen2020 2:f65d4206b47b 136 greenLED = 0;
chenchen2020 2:f65d4206b47b 137 }else{
chenchen2020 2:f65d4206b47b 138 redLED = 0;
chenchen2020 2:f65d4206b47b 139 yellowLED = 0;
chenchen2020 2:f65d4206b47b 140 greenLED = 0;
chenchen2020 2:f65d4206b47b 141 }
chenchen2020 0:bedc25613430 142 }
chenchen2020 0:bedc25613430 143 }
chenchen2020 0:bedc25613430 144
chenchen2020 2:f65d4206b47b 145 void display_ulcd()
chenchen2020 2:f65d4206b47b 146 {
chenchen2020 3:2a4bee05d0c1 147 mutex_lock.lock();
chenchen2020 3:2a4bee05d0c1 148 uLCD.color(WHITE);
chenchen2020 3:2a4bee05d0c1 149 mutex_lock.unlock();
chenchen2020 2:f65d4206b47b 150 while(1){
chenchen2020 2:f65d4206b47b 151 mutex_lock.lock();
bleverett3 5:53a86492622d 152 lcd_lock.lock();
bleverett3 5:53a86492622d 153 if(risk_level <= 1){
chenchen2020 3:2a4bee05d0c1 154 uLCD.cls();
chenchen2020 3:2a4bee05d0c1 155 uLCD.locate(5, 7);
chenchen2020 3:2a4bee05d0c1 156 uLCD.text_width(2);
chenchen2020 3:2a4bee05d0c1 157 uLCD.text_height(2);
chenchen2020 3:2a4bee05d0c1 158 uLCD.background_color(GREEN);
chenchen2020 3:2a4bee05d0c1 159 uLCD.textbackground_color(GREEN);
chenchen2020 3:2a4bee05d0c1 160 uLCD.printf("Safe");
bleverett3 5:53a86492622d 161 }else if(risk_level == 2){
chenchen2020 3:2a4bee05d0c1 162 uLCD.cls();
chenchen2020 3:2a4bee05d0c1 163 uLCD.locate(1, 7);
chenchen2020 3:2a4bee05d0c1 164 uLCD.text_width(2);
chenchen2020 3:2a4bee05d0c1 165 uLCD.text_height(2);
chenchen2020 3:2a4bee05d0c1 166 uLCD.background_color(0xFFFF00);
chenchen2020 3:2a4bee05d0c1 167 uLCD.textbackground_color(0xFFFF00);
chenchen2020 3:2a4bee05d0c1 168 uLCD.printf("Cautious");
bleverett3 5:53a86492622d 169 }else if(risk_level == 3){
chenchen2020 3:2a4bee05d0c1 170 uLCD.cls();
chenchen2020 3:2a4bee05d0c1 171 uLCD.locate(3, 7);
chenchen2020 3:2a4bee05d0c1 172 uLCD.text_width(2);
chenchen2020 3:2a4bee05d0c1 173 uLCD.text_height(2);
chenchen2020 3:2a4bee05d0c1 174 uLCD.background_color(RED);
chenchen2020 3:2a4bee05d0c1 175 uLCD.textbackground_color(RED);
chenchen2020 3:2a4bee05d0c1 176 uLCD.printf("Hazard");
chenchen2020 2:f65d4206b47b 177 }else{
chenchen2020 2:f65d4206b47b 178 uLCD.background_color(BLACK);
chenchen2020 3:2a4bee05d0c1 179 uLCD.printf("waiting");
chenchen2020 2:f65d4206b47b 180 }
chenchen2020 2:f65d4206b47b 181 mutex_lock.unlock();
bleverett3 5:53a86492622d 182 lcd_lock.unlock();
chenchen2020 2:f65d4206b47b 183 }
chenchen2020 0:bedc25613430 184 }
chenchen2020 0:bedc25613430 185
chenchen2020 0:bedc25613430 186 int main()
chenchen2020 0:bedc25613430 187 {
chenchen2020 0:bedc25613430 188 cmdstuff = 1;
chenchen2020 0:bedc25613430 189 at.send("AT") && at.recv("OK");
chenchen2020 0:bedc25613430 190 at.send("AT+AB ChangeDefaultBaud [9600]", 3) && at.recv("OK");
chenchen2020 0:bedc25613430 191 pc.baud(9600);
chenchen2020 0:bedc25613430 192 ble.baud(9600);
chenchen2020 2:f65d4206b47b 193
chenchen2020 2:f65d4206b47b 194 //Thread SD_Thread();
chenchen2020 2:f65d4206b47b 195 Thread ULCD_Thread(display_ulcd);
chenchen2020 2:f65d4206b47b 196 Thread LED_Thread(blink_leds);
chenchen2020 2:f65d4206b47b 197 //Thread Speaker_Thread(speaker_alarm);
chenchen2020 0:bedc25613430 198
chenchen2020 0:bedc25613430 199 while(1) {
chenchen2020 0:bedc25613430 200 parse_RSSI();
chenchen2020 0:bedc25613430 201 }
chenchen2020 0:bedc25613430 202 }