Buffer working with LCD, Serial and SD Card
Dependencies: BMP280
Fork of Thread_Communication by
Diff: main.cpp
- Revision:
- 3:73497379c0cb
- Parent:
- 2:28d12a3db239
- Child:
- 4:93d6d13d4de3
--- a/main.cpp Thu Dec 14 15:44:49 2017 +0000 +++ b/main.cpp Thu Dec 14 19:23:45 2017 +0000 @@ -1,20 +1,23 @@ #include "mbed.h" #include "main.h" - +LCD lcd(PD_15, PF_12, PF_13, PE_9, PF_14, PF_15); +BMP280 Sensor(D14, D15); -LCD lcd(PD_15, PF_12, PF_13, PE_9, PF_14, PF_15); - -BMP280 Sensor(D14, D15); void PrintLCD (); void Rx_interrupt(); void Serial_CMD(); +//Serial_CMD volatile int rx_in=0; char rx_line[80]; int s_cmd = 0; +//Time date +time_t raw_time = time(NULL); +char time_buffer[80]; + /* Mail */ typedef struct { float LDR_Value; @@ -24,11 +27,35 @@ Mail<mail_t, 16> mail_box; - +//Threads Thread t1; Thread t2; Thread S_CMD; + +/*--------------------------------MAIN--------------------------------*/ +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; + + mail_t *mail = mail_box.alloc(); + mail->LDR_Value = LDR_In.read(); + mail->temp_Value = Sensor.getTemperature(); + mail->press_Value = Sensor.getPressure(); + mail_box.put(mail); + + Thread::wait (15000); + } +} +/*--------------------------------------------------------------------*/ + +/*--------------------------------LCD---------------------------------*/ void PrintLCD () { int i = 0; @@ -92,30 +119,9 @@ 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; - - mail_t *mail = mail_box.alloc(); - mail->LDR_Value = LDR_In.read(); - mail->temp_Value = Sensor.getTemperature(); - mail->press_Value = Sensor.getPressure(); - mail_box.put(mail); - - Thread::wait (15000); - } - -} - +/*------------------------------SERIAL_CMD----------------------------*/ void Rx_interrupt() { while (pc.readable()) { @@ -136,9 +142,15 @@ while(1){ if(s_cmd == 1){ pc.attach(NULL, Serial::RxIrq); - + + struct tm * s_time; + char tm_n[4]; + if(strstr(rx_line, "READ ALL")){ - pc.printf("READ ALL\n\r"); + time ( &raw_time ); + s_time = localtime ( &raw_time ); + strftime(time_buffer, 80, "%d/%m/%Y, %X\n\r", s_time); + pc.puts(time_buffer); } else if(strstr(rx_line, "DELETE ALL")){ pc.printf("DELETE ALL\n\r"); @@ -147,10 +159,47 @@ pc.printf("READ\n\r"); } else if(strstr(rx_line, "DELETE")){ - pc.printf("SETDATE\n\r"); + pc.printf("DELETE\n\r"); + } + else if(strstr(rx_line, "SETDATE")){ + time ( &raw_time ); + s_time = localtime ( &raw_time ); + + int dd = atoi(strncpy(tm_n,&rx_line[8],2)); + s_time->tm_mday = dd; + memset(tm_n, NULL, 4); + + int mm = atoi(strncpy(tm_n,&rx_line[11],2)); + s_time->tm_mon = mm-1; + memset(tm_n, NULL, 4); + + int yyyy = atoi(strncpy(tm_n,&rx_line[14],4)); + s_time->tm_year = yyyy-1900; + memset(tm_n, NULL, 4); + + set_time(mktime(s_time)); + strftime(time_buffer, 80, "%d/%m/%Y\n\r", s_time); + pc.puts(time_buffer); } else if(strstr(rx_line, "SETTIME")){ - pc.printf("SETTIME\n\r"); + time ( &raw_time ); + s_time = localtime ( &raw_time ); + + int ss = atoi(strncpy(tm_n,&rx_line[14],2)); + s_time->tm_sec = ss; + memset(tm_n, NULL, 4); + + int mm = atoi(strncpy(tm_n,&rx_line[11],2)); + s_time->tm_min = mm; + memset(tm_n, NULL, 4); + + int hh = atoi(strncpy(tm_n,&rx_line[8],2)); + s_time->tm_hour = hh; + memset(tm_n, NULL, 4); + + set_time(mktime(s_time)); + strftime(time_buffer, 80, "%X\n\r", s_time); + pc.puts(time_buffer); } else if(strstr(rx_line, "SETT")){ pc.printf("SETT\n\r"); @@ -164,7 +213,8 @@ else{ pc.printf("ERROR\n\r"); } - + + memset(time_buffer, NULL, 80); memset(rx_line, NULL, 80); rx_in = 0; @@ -174,3 +224,4 @@ Thread::wait(5); } } +/*--------------------------------------------------------------------*/ \ No newline at end of file