Buffer working with LCD, Serial and SD Card
Dependencies: BMP280
Fork of Thread_Communication by
Diff: main.cpp
- Revision:
- 2:28d12a3db239
- Parent:
- 1:bca9993a0df3
- Child:
- 3:73497379c0cb
diff -r bca9993a0df3 -r 28d12a3db239 main.cpp --- a/main.cpp Wed Dec 13 17:20:18 2017 +0000 +++ b/main.cpp Thu Dec 14 15:44:49 2017 +0000 @@ -8,6 +8,12 @@ BMP280 Sensor(D14, D15); void PrintLCD (); +void Rx_interrupt(); +void Serial_CMD(); + +volatile int rx_in=0; +char rx_line[80]; +int s_cmd = 0; /* Mail */ typedef struct { @@ -16,28 +22,12 @@ float press_Value; } mail_t; -//Class type -/*class mail_t { -public: - float LDR_Value; - float temp_Value; - float press_Value; - - //Constructor - mail_t( float LDR_Value, float temp_Value, int s2) { - adcValue = f; - sw1State = s1; - sw2State = s2; - } -};*/ - Mail<mail_t, 16> mail_box; Thread t1; Thread t2; - -//Mutex door; +Thread S_CMD; void PrintLCD () { @@ -52,57 +42,65 @@ lcd.RowSelect(0); switch (i){ - case 0: - osEvent evt = mail_box.get(); + case 0: + osEvent evt = mail_box.get(); - if (evt.status == osEventMail) { - mail_t *mail = (mail_t*)evt.value.p; + if (evt.status == osEventMail) { + mail_t *mail = (mail_t*)evt.value.p; - sprintf(lightString,"%.4f", mail->LDR_Value); - sprintf(tempString,"%2.2f", mail->temp_Value); - sprintf(pressString,"%4.2f", mail->press_Value); + sprintf(lightString,"%.4f", mail->LDR_Value); + sprintf(tempString,"%2.2f", mail->temp_Value); + sprintf(pressString,"%4.2f", mail->press_Value); - mail_box.free(mail); - } + mail_box.free(mail); + } - lcd.Write("Light Level:"); - lcd.RowSelect(1); - lcd.Write(lightString); - i++; - + lcd.Write("Light Level:"); + lcd.RowSelect(1); + lcd.Write(lightString); + i++; + break; - case 1: + + case 1: - lcd.Write("Temperature:"); - lcd.RowSelect(1); - lcd.Write(tempString); - i++; + lcd.Write("Temperature:"); + lcd.RowSelect(1); + lcd.Write(tempString); + i++; break; - case 2: + case 2: - lcd.Write("Pressure:"); - lcd.RowSelect(1); - lcd.Write(pressString); - i =0; + lcd.Write("Pressure:"); + lcd.RowSelect(1); + lcd.Write(pressString); + i =0; + break; - default: - i = 0; + + default: + + i = 0; + break; } - Red_int = !Red_int; - + Red_int = !Red_int; Thread::wait (5000); - } + } } int main() { t1.start(PrintLCD); + + pc.baud(9600); + pc.attach(&Rx_interrupt, Serial::RxIrq); + S_CMD.start(Serial_CMD); while(1) { Green_int = !Green_int; @@ -111,33 +109,68 @@ mail->LDR_Value = LDR_In.read(); mail->temp_Value = Sensor.getTemperature(); mail->press_Value = Sensor.getPressure(); - mail_box.put(mail); - - /*door.lock(); - - LDR_Value = LDR_In.read(); - temp_Value = Sensor.getTemperature(); - press_Value = Sensor.getPressure(); - door.unlock();*/ - + mail_box.put(mail); Thread::wait (15000); } } -/*int main(void){ +void Rx_interrupt() { + + while (pc.readable()) { + rx_line[rx_in] = pc.getc(); + pc.putc(rx_line[rx_in]); + + if(rx_line[rx_in] == 0xD){ + s_cmd = 1; + } + else{ + rx_in = (rx_in + 1); + } + } +} - float temp = 0; - //float pressure = 0; - char tempString[16]; - Sensor->initialize(); - temp = Sensor->getTemperature(); - lcd->Clear(); - lcd->RowSelect(0); - lcd->Write("Temperature:"); - sprintf(tempString,"%f",temp); - lcd->RowSelect(1); - lcd->Write(tempString); +void Serial_CMD(){ + + while(1){ + if(s_cmd == 1){ + pc.attach(NULL, Serial::RxIrq); - }*/ \ No newline at end of file + if(strstr(rx_line, "READ ALL")){ + pc.printf("READ ALL\n\r"); + } + else if(strstr(rx_line, "DELETE ALL")){ + pc.printf("DELETE ALL\n\r"); + } + else if(strstr(rx_line, "READ")){ + pc.printf("READ\n\r"); + } + else if(strstr(rx_line, "DELETE")){ + pc.printf("SETDATE\n\r"); + } + else if(strstr(rx_line, "SETTIME")){ + pc.printf("SETTIME\n\r"); + } + else if(strstr(rx_line, "SETT")){ + pc.printf("SETT\n\r"); + } + else if(strstr(rx_line, "STATE")){ + pc.printf("STATE\n\r"); + } + else if(strstr(rx_line, "LOGGING")){ + pc.printf("LOGGING\n\r"); + } + else{ + pc.printf("ERROR\n\r"); + } + + memset(rx_line, NULL, 80); + rx_in = 0; + + pc.attach(&Rx_interrupt, Serial::RxIrq); + s_cmd = 0; + } + Thread::wait(5); + } +}