Semaphore attempt ben

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

main.cpp

Committer:
chenchen2020
Date:
2020-04-20
Revision:
1:8eb0ee57df9f
Parent:
0:bedc25613430
Child:
2:f65d4206b47b

File content as of revision 1:8eb0ee57df9f:

#include "mbed.h"
#include "rtos.h"
#include "ATParser.h"
#include "uLCD_4DGL.h"
#include "SDFileSystem.h"
//#include "wave_player.h"
#include <string>
#include <iostream> 
using namespace std;

//General setups
DigitalOut cmdMode(p18);
Serial pc(USBTX, USBRX);
BufferedSerial ble(p13,p14);
DigitalOut cmdstuff(p18);
uLCD_4DGL uLCD(p28,p27,p30);
SDFileSystem sd(p5, p6, p7, p8, "sd");

//AT command data handlers
char delimiter[] = "\r\n";
int buffer_size = 256;
int timeout = 100;
bool debug = false;
ATParser at(ble, delimiter, buffer_size, timeout, debug);
char buffer[10];
volatile int risk_level = 0;

//RTOS
Mutex mutex_lock;

//Global Data points and arrays
int averageCount = 0;
volatile int RSSI_array[15];


int calculate_average(volatile int *input, int size){
    int average;
    for(int i = 0; i< size; i++){
        average = average + input[i];
    }
    average = average/size;
    return average;
}

void parse_RSSI(){
    at.send("AT+BLEGETRSSI") && at.read(buffer, 10);
    if(buffer[0] == '-'){
        pc.printf("RSSI: ");
        pc.putc(buffer[1]);
        pc.putc(buffer[2]);
        pc.printf("\n");
        int digit1 = buffer[1] - 48;
        int digit2 = buffer[2] - 48;
        int total = 10*digit1 + digit2;
        if (averageCount <= 15){
            RSSI_array[averageCount] = total;
        }
        averageCount++;        
        if(averageCount > 15 && buffer[0] == '-'){
            averageCount = 0;
            int average = calculate_average(RSSI_array, 15);
            if(average < 55){
                risk_level = 3;
            }else if(average > 55 && average < 70) {
                risk_level = 2;
            }else if(average > 70 && average < 90) {
                risk_level = 1;
            }
            else{
               risk_level = 0; 
            }
        }
        pc.printf("Risk level: ");
        pc.printf("%i\n", risk_level);
    }else{
        pc.printf("Disconnected\n");
    }
}

void speaker_alarm(){
 
}

void logging_SD_card(){
 
}

void blink_leds(){
 
}

void display_ulcd(){

}
 
int main()
{
    cmdstuff = 1;
    at.send("AT") && at.recv("OK");
    at.send("AT+AB ChangeDefaultBaud [9600]", 3) && at.recv("OK");
    pc.baud(9600);
    ble.baud(9600);
    
    Thread SD_Thread();
    Thread ULCD_Thread();
    Thread LED_Thread();
    Thread Speaker_Thread();
    while(1) {
        parse_RSSI();
    }
}