Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Thread_Communication_V4_fortest by
main.cpp@6:64d346936f0e, 2017-12-26 (annotated)
- Committer:
- GeorgeJourneaux
- Date:
- Tue Dec 26 21:54:41 2017 +0000
- Revision:
- 6:64d346936f0e
- Parent:
- 5:ea3ec65cbf5f
- Child:
- 7:f017a37bcf1b
READ<n>, DELETE ALL
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
benparkes | 0:cb3a5c15b01e | 1 | #include "mbed.h" |
benparkes | 0:cb3a5c15b01e | 2 | #include "main.h" |
benparkes | 0:cb3a5c15b01e | 3 | |
GeorgeJourneaux | 4:93d6d13d4de3 | 4 | #define ENTER_KEY 1 |
GeorgeJourneaux | 6:64d346936f0e | 5 | #define MAX_SAMPLES 4 |
GeorgeJourneaux | 4:93d6d13d4de3 | 6 | |
GeorgeJourneaux | 3:73497379c0cb | 7 | LCD lcd(PD_15, PF_12, PF_13, PE_9, PF_14, PF_15); |
GeorgeJourneaux | 3:73497379c0cb | 8 | BMP280 Sensor(D14, D15); |
benparkes | 0:cb3a5c15b01e | 9 | |
GeorgeJourneaux | 5:ea3ec65cbf5f | 10 | //Define Functions |
benparkes | 0:cb3a5c15b01e | 11 | void PrintLCD (); |
GeorgeJourneaux | 2:28d12a3db239 | 12 | void Rx_interrupt(); |
GeorgeJourneaux | 2:28d12a3db239 | 13 | void Serial_CMD(); |
GeorgeJourneaux | 2:28d12a3db239 | 14 | |
GeorgeJourneaux | 5:ea3ec65cbf5f | 15 | //data FIFO buffer |
GeorgeJourneaux | 6:64d346936f0e | 16 | char data_buffer[MAX_SAMPLES][64]; |
GeorgeJourneaux | 6:64d346936f0e | 17 | int sample_h = 0; |
GeorgeJourneaux | 6:64d346936f0e | 18 | int sample_t = 0; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 19 | int data_h = 0; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 20 | int data_t = 0; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 21 | struct tm * sample_epoch; |
GeorgeJourneaux | 6:64d346936f0e | 22 | Mutex DataBuffer; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 23 | |
GeorgeJourneaux | 3:73497379c0cb | 24 | //Serial_CMD |
GeorgeJourneaux | 2:28d12a3db239 | 25 | volatile int rx_in=0; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 26 | char rx_buffer[32]; |
GeorgeJourneaux | 3:73497379c0cb | 27 | time_t raw_time = time(NULL); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 28 | char serial_buffer[80]; |
GeorgeJourneaux | 3:73497379c0cb | 29 | |
benparkes | 1:bca9993a0df3 | 30 | /* Mail */ |
benparkes | 1:bca9993a0df3 | 31 | typedef struct { |
benparkes | 1:bca9993a0df3 | 32 | float LDR_Value; |
benparkes | 1:bca9993a0df3 | 33 | float temp_Value; |
benparkes | 1:bca9993a0df3 | 34 | float press_Value; |
benparkes | 1:bca9993a0df3 | 35 | } mail_t; |
benparkes | 1:bca9993a0df3 | 36 | |
benparkes | 1:bca9993a0df3 | 37 | Mail<mail_t, 16> mail_box; |
benparkes | 0:cb3a5c15b01e | 38 | |
GeorgeJourneaux | 3:73497379c0cb | 39 | //Threads |
benparkes | 0:cb3a5c15b01e | 40 | Thread t1; |
benparkes | 0:cb3a5c15b01e | 41 | Thread t2; |
GeorgeJourneaux | 2:28d12a3db239 | 42 | Thread S_CMD; |
GeorgeJourneaux | 3:73497379c0cb | 43 | |
GeorgeJourneaux | 3:73497379c0cb | 44 | /*--------------------------------MAIN--------------------------------*/ |
GeorgeJourneaux | 3:73497379c0cb | 45 | int main() { |
benparkes | 0:cb3a5c15b01e | 46 | |
GeorgeJourneaux | 3:73497379c0cb | 47 | t1.start(PrintLCD); |
GeorgeJourneaux | 3:73497379c0cb | 48 | |
GeorgeJourneaux | 3:73497379c0cb | 49 | pc.baud(9600); |
GeorgeJourneaux | 3:73497379c0cb | 50 | pc.attach(&Rx_interrupt, Serial::RxIrq); |
GeorgeJourneaux | 3:73497379c0cb | 51 | S_CMD.start(Serial_CMD); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 52 | |
GeorgeJourneaux | 3:73497379c0cb | 53 | while(1) { |
GeorgeJourneaux | 3:73497379c0cb | 54 | Green_int = !Green_int; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 55 | |
GeorgeJourneaux | 6:64d346936f0e | 56 | //Read sensors, send to mail-queue |
GeorgeJourneaux | 3:73497379c0cb | 57 | mail_t *mail = mail_box.alloc(); |
GeorgeJourneaux | 3:73497379c0cb | 58 | mail->LDR_Value = LDR_In.read(); |
GeorgeJourneaux | 3:73497379c0cb | 59 | mail->temp_Value = Sensor.getTemperature(); |
GeorgeJourneaux | 3:73497379c0cb | 60 | mail->press_Value = Sensor.getPressure(); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 61 | mail_box.put(mail); |
GeorgeJourneaux | 6:64d346936f0e | 62 | |
GeorgeJourneaux | 6:64d346936f0e | 63 | //Lock data buffer |
GeorgeJourneaux | 6:64d346936f0e | 64 | DataBuffer.lock(); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 65 | |
GeorgeJourneaux | 6:64d346936f0e | 66 | //Format samples, send to FIFO buffer head |
GeorgeJourneaux | 6:64d346936f0e | 67 | memset(data_buffer[sample_h],NULL,64); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 68 | time( &raw_time ); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 69 | sample_epoch = localtime( &raw_time ); |
GeorgeJourneaux | 6:64d346936f0e | 70 | char sample_time[20]; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 71 | strftime(sample_time,20,"%d/%m/%Y %X",sample_epoch); |
GeorgeJourneaux | 6:64d346936f0e | 72 | sprintf(data_buffer[sample_h],"%s, %2.2f, %4.2f, %.4f\n\r", sample_time, mail->temp_Value, mail->press_Value, mail->LDR_Value); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 73 | memset(sample_time,NULL,20); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 74 | |
GeorgeJourneaux | 6:64d346936f0e | 75 | //Set seperate FIFO head and tail for printing data |
GeorgeJourneaux | 6:64d346936f0e | 76 | data_h = sample_h; |
GeorgeJourneaux | 6:64d346936f0e | 77 | data_t = sample_t; |
GeorgeJourneaux | 6:64d346936f0e | 78 | |
GeorgeJourneaux | 6:64d346936f0e | 79 | //Move sample FIFO buffer head to next row in buffer |
GeorgeJourneaux | 6:64d346936f0e | 80 | sample_h++; |
GeorgeJourneaux | 6:64d346936f0e | 81 | //Check sample FIFO buffer head |
GeorgeJourneaux | 6:64d346936f0e | 82 | if(sample_h >= MAX_SAMPLES){ |
GeorgeJourneaux | 6:64d346936f0e | 83 | sample_h = 0; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 84 | } |
GeorgeJourneaux | 6:64d346936f0e | 85 | //Check sample FIFO buffer tail |
GeorgeJourneaux | 6:64d346936f0e | 86 | if(sample_t == sample_h){ |
GeorgeJourneaux | 6:64d346936f0e | 87 | sample_t++; |
GeorgeJourneaux | 6:64d346936f0e | 88 | if(sample_t >= (MAX_SAMPLES)){ |
GeorgeJourneaux | 6:64d346936f0e | 89 | sample_t = 0; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 90 | } |
GeorgeJourneaux | 5:ea3ec65cbf5f | 91 | } |
GeorgeJourneaux | 6:64d346936f0e | 92 | //Unlock data buffer |
GeorgeJourneaux | 6:64d346936f0e | 93 | DataBuffer.unlock(); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 94 | |
GeorgeJourneaux | 3:73497379c0cb | 95 | Thread::wait (15000); |
GeorgeJourneaux | 3:73497379c0cb | 96 | } |
GeorgeJourneaux | 3:73497379c0cb | 97 | } |
GeorgeJourneaux | 3:73497379c0cb | 98 | /*--------------------------------------------------------------------*/ |
GeorgeJourneaux | 3:73497379c0cb | 99 | |
GeorgeJourneaux | 3:73497379c0cb | 100 | /*--------------------------------LCD---------------------------------*/ |
benparkes | 0:cb3a5c15b01e | 101 | void PrintLCD () { |
benparkes | 0:cb3a5c15b01e | 102 | |
benparkes | 0:cb3a5c15b01e | 103 | int i = 0; |
benparkes | 0:cb3a5c15b01e | 104 | while(1){ |
benparkes | 1:bca9993a0df3 | 105 | char lightString[16]; |
benparkes | 1:bca9993a0df3 | 106 | char tempString[16]; |
benparkes | 1:bca9993a0df3 | 107 | char pressString[16]; |
benparkes | 1:bca9993a0df3 | 108 | |
benparkes | 0:cb3a5c15b01e | 109 | lcd.Clear(); |
benparkes | 0:cb3a5c15b01e | 110 | lcd.RowSelect(0); |
benparkes | 1:bca9993a0df3 | 111 | |
benparkes | 0:cb3a5c15b01e | 112 | switch (i){ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 113 | case 0:{ |
GeorgeJourneaux | 2:28d12a3db239 | 114 | osEvent evt = mail_box.get(); |
benparkes | 1:bca9993a0df3 | 115 | |
GeorgeJourneaux | 2:28d12a3db239 | 116 | if (evt.status == osEventMail) { |
GeorgeJourneaux | 2:28d12a3db239 | 117 | mail_t *mail = (mail_t*)evt.value.p; |
benparkes | 0:cb3a5c15b01e | 118 | |
GeorgeJourneaux | 2:28d12a3db239 | 119 | sprintf(lightString,"%.4f", mail->LDR_Value); |
GeorgeJourneaux | 2:28d12a3db239 | 120 | sprintf(tempString,"%2.2f", mail->temp_Value); |
GeorgeJourneaux | 2:28d12a3db239 | 121 | sprintf(pressString,"%4.2f", mail->press_Value); |
benparkes | 1:bca9993a0df3 | 122 | |
GeorgeJourneaux | 2:28d12a3db239 | 123 | mail_box.free(mail); |
GeorgeJourneaux | 2:28d12a3db239 | 124 | } |
benparkes | 1:bca9993a0df3 | 125 | |
GeorgeJourneaux | 2:28d12a3db239 | 126 | lcd.Write("Light Level:"); |
GeorgeJourneaux | 2:28d12a3db239 | 127 | lcd.RowSelect(1); |
GeorgeJourneaux | 2:28d12a3db239 | 128 | lcd.Write(lightString); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 129 | i++; |
benparkes | 0:cb3a5c15b01e | 130 | break; |
GeorgeJourneaux | 5:ea3ec65cbf5f | 131 | } |
GeorgeJourneaux | 2:28d12a3db239 | 132 | case 1: |
GeorgeJourneaux | 2:28d12a3db239 | 133 | lcd.Write("Temperature:"); |
GeorgeJourneaux | 2:28d12a3db239 | 134 | lcd.RowSelect(1); |
GeorgeJourneaux | 2:28d12a3db239 | 135 | lcd.Write(tempString); |
GeorgeJourneaux | 2:28d12a3db239 | 136 | i++; |
benparkes | 0:cb3a5c15b01e | 137 | break; |
benparkes | 0:cb3a5c15b01e | 138 | |
GeorgeJourneaux | 2:28d12a3db239 | 139 | case 2: |
GeorgeJourneaux | 2:28d12a3db239 | 140 | lcd.Write("Pressure:"); |
GeorgeJourneaux | 2:28d12a3db239 | 141 | lcd.RowSelect(1); |
GeorgeJourneaux | 2:28d12a3db239 | 142 | lcd.Write(pressString); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 143 | i =0; |
benparkes | 0:cb3a5c15b01e | 144 | break; |
GeorgeJourneaux | 2:28d12a3db239 | 145 | |
GeorgeJourneaux | 5:ea3ec65cbf5f | 146 | default: |
GeorgeJourneaux | 5:ea3ec65cbf5f | 147 | i = 0; |
benparkes | 0:cb3a5c15b01e | 148 | break; |
benparkes | 0:cb3a5c15b01e | 149 | } |
benparkes | 0:cb3a5c15b01e | 150 | |
GeorgeJourneaux | 2:28d12a3db239 | 151 | Red_int = !Red_int; |
benparkes | 1:bca9993a0df3 | 152 | |
benparkes | 0:cb3a5c15b01e | 153 | Thread::wait (5000); |
GeorgeJourneaux | 2:28d12a3db239 | 154 | } |
benparkes | 0:cb3a5c15b01e | 155 | } |
GeorgeJourneaux | 3:73497379c0cb | 156 | /*--------------------------------------------------------------------*/ |
benparkes | 1:bca9993a0df3 | 157 | |
GeorgeJourneaux | 3:73497379c0cb | 158 | /*------------------------------SERIAL_CMD----------------------------*/ |
GeorgeJourneaux | 4:93d6d13d4de3 | 159 | //Interrupt when recieving from serial port |
GeorgeJourneaux | 2:28d12a3db239 | 160 | void Rx_interrupt() { |
GeorgeJourneaux | 2:28d12a3db239 | 161 | |
GeorgeJourneaux | 6:64d346936f0e | 162 | //Wait for serial input |
GeorgeJourneaux | 2:28d12a3db239 | 163 | while (pc.readable()) { |
GeorgeJourneaux | 6:64d346936f0e | 164 | |
GeorgeJourneaux | 6:64d346936f0e | 165 | //Return input to serial |
GeorgeJourneaux | 5:ea3ec65cbf5f | 166 | rx_buffer[rx_in] = pc.getc(); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 167 | pc.putc(rx_buffer[rx_in]); |
GeorgeJourneaux | 6:64d346936f0e | 168 | |
GeorgeJourneaux | 6:64d346936f0e | 169 | //If enter key is pressed, set serial thread signal |
GeorgeJourneaux | 5:ea3ec65cbf5f | 170 | if(rx_buffer[rx_in] == 0xD){ |
GeorgeJourneaux | 4:93d6d13d4de3 | 171 | S_CMD.signal_set(ENTER_KEY); |
GeorgeJourneaux | 2:28d12a3db239 | 172 | } |
GeorgeJourneaux | 6:64d346936f0e | 173 | |
GeorgeJourneaux | 6:64d346936f0e | 174 | //Increment buffer head |
GeorgeJourneaux | 2:28d12a3db239 | 175 | else{ |
GeorgeJourneaux | 2:28d12a3db239 | 176 | rx_in = (rx_in + 1); |
GeorgeJourneaux | 2:28d12a3db239 | 177 | } |
GeorgeJourneaux | 2:28d12a3db239 | 178 | } |
GeorgeJourneaux | 2:28d12a3db239 | 179 | } |
benparkes | 0:cb3a5c15b01e | 180 | |
GeorgeJourneaux | 4:93d6d13d4de3 | 181 | //Check what command what recieved and execute |
GeorgeJourneaux | 2:28d12a3db239 | 182 | void Serial_CMD(){ |
GeorgeJourneaux | 2:28d12a3db239 | 183 | |
GeorgeJourneaux | 2:28d12a3db239 | 184 | while(1){ |
GeorgeJourneaux | 6:64d346936f0e | 185 | //Wait for thread signal |
GeorgeJourneaux | 4:93d6d13d4de3 | 186 | Thread::signal_wait(ENTER_KEY); |
GeorgeJourneaux | 6:64d346936f0e | 187 | |
GeorgeJourneaux | 6:64d346936f0e | 188 | //Detach serial interrupt |
GeorgeJourneaux | 2:28d12a3db239 | 189 | pc.attach(NULL, Serial::RxIrq); |
GeorgeJourneaux | 6:64d346936f0e | 190 | |
GeorgeJourneaux | 3:73497379c0cb | 191 | struct tm * s_time; |
GeorgeJourneaux | 3:73497379c0cb | 192 | char tm_n[4]; |
GeorgeJourneaux | 3:73497379c0cb | 193 | |
GeorgeJourneaux | 6:64d346936f0e | 194 | /*----CARRAGE RETURN-------------*/ |
GeorgeJourneaux | 6:64d346936f0e | 195 | if(rx_buffer[0] == 0xD){ |
GeorgeJourneaux | 6:64d346936f0e | 196 | pc.puts("\n\r"); |
GeorgeJourneaux | 6:64d346936f0e | 197 | } |
GeorgeJourneaux | 6:64d346936f0e | 198 | /*----READ ALL----------------------------------*/ |
GeorgeJourneaux | 6:64d346936f0e | 199 | else if(strstr(rx_buffer, "READ ALL")){ |
GeorgeJourneaux | 6:64d346936f0e | 200 | pc.puts(" READ ALL\n\r"); |
GeorgeJourneaux | 6:64d346936f0e | 201 | |
GeorgeJourneaux | 6:64d346936f0e | 202 | //Lock data buffer |
GeorgeJourneaux | 6:64d346936f0e | 203 | DataBuffer.lock(); |
GeorgeJourneaux | 6:64d346936f0e | 204 | |
GeorgeJourneaux | 6:64d346936f0e | 205 | //Print all samples to serial |
GeorgeJourneaux | 6:64d346936f0e | 206 | for(int n=data_t; n<=MAX_SAMPLES; n++){ |
GeorgeJourneaux | 6:64d346936f0e | 207 | pc.puts(data_buffer[n]); |
GeorgeJourneaux | 6:64d346936f0e | 208 | } |
GeorgeJourneaux | 6:64d346936f0e | 209 | if(data_t>data_h){ |
GeorgeJourneaux | 6:64d346936f0e | 210 | for(int n=0; n<=(data_t-1); n++){ |
GeorgeJourneaux | 6:64d346936f0e | 211 | pc.puts(data_buffer[n]); |
GeorgeJourneaux | 6:64d346936f0e | 212 | } |
GeorgeJourneaux | 6:64d346936f0e | 213 | } |
GeorgeJourneaux | 5:ea3ec65cbf5f | 214 | |
GeorgeJourneaux | 6:64d346936f0e | 215 | //Lock data buffer |
GeorgeJourneaux | 6:64d346936f0e | 216 | DataBuffer.unlock(); |
GeorgeJourneaux | 2:28d12a3db239 | 217 | } |
GeorgeJourneaux | 6:64d346936f0e | 218 | /*----DELETE ALL----------------------------------*/ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 219 | else if(strstr(rx_buffer, "DELETE ALL")){ |
GeorgeJourneaux | 6:64d346936f0e | 220 | pc.puts(" DELETE ALL\n\r"); |
GeorgeJourneaux | 6:64d346936f0e | 221 | |
GeorgeJourneaux | 6:64d346936f0e | 222 | //Lock data buffer |
GeorgeJourneaux | 6:64d346936f0e | 223 | DataBuffer.lock(); |
GeorgeJourneaux | 6:64d346936f0e | 224 | |
GeorgeJourneaux | 6:64d346936f0e | 225 | //Delete all sampled data |
GeorgeJourneaux | 6:64d346936f0e | 226 | for(int n=0; n<=MAX_SAMPLES; n++){ |
GeorgeJourneaux | 6:64d346936f0e | 227 | memset(data_buffer[n], NULL, 64); |
GeorgeJourneaux | 6:64d346936f0e | 228 | } |
GeorgeJourneaux | 6:64d346936f0e | 229 | data_h = data_t; |
GeorgeJourneaux | 6:64d346936f0e | 230 | sample_h = sample_t; |
GeorgeJourneaux | 6:64d346936f0e | 231 | |
GeorgeJourneaux | 6:64d346936f0e | 232 | //Unlock data buffer |
GeorgeJourneaux | 6:64d346936f0e | 233 | DataBuffer.unlock(); |
GeorgeJourneaux | 2:28d12a3db239 | 234 | } |
GeorgeJourneaux | 6:64d346936f0e | 235 | /*----READ----------------------------------*/ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 236 | else if(strstr(rx_buffer, "READ")){ |
GeorgeJourneaux | 6:64d346936f0e | 237 | pc.puts(" READ \n\r"); |
GeorgeJourneaux | 6:64d346936f0e | 238 | int N = atoi(strncpy(tm_n,&rx_buffer[5],4)); |
GeorgeJourneaux | 6:64d346936f0e | 239 | int S = 0; |
GeorgeJourneaux | 6:64d346936f0e | 240 | pc.printf("N = %d\n\r",N); |
GeorgeJourneaux | 6:64d346936f0e | 241 | |
GeorgeJourneaux | 6:64d346936f0e | 242 | //Lock data buffer |
GeorgeJourneaux | 6:64d346936f0e | 243 | DataBuffer.lock(); |
GeorgeJourneaux | 6:64d346936f0e | 244 | |
GeorgeJourneaux | 6:64d346936f0e | 245 | //Check if N is greater than buffer size |
GeorgeJourneaux | 6:64d346936f0e | 246 | if(N >= MAX_SAMPLES){ |
GeorgeJourneaux | 6:64d346936f0e | 247 | N = MAX_SAMPLES; |
GeorgeJourneaux | 6:64d346936f0e | 248 | } |
GeorgeJourneaux | 6:64d346936f0e | 249 | |
GeorgeJourneaux | 6:64d346936f0e | 250 | //Read N samples from FIFO buffer |
GeorgeJourneaux | 6:64d346936f0e | 251 | if(N <= 0){ |
GeorgeJourneaux | 6:64d346936f0e | 252 | pc.puts("####ERROR####\n\r"); |
GeorgeJourneaux | 6:64d346936f0e | 253 | } |
GeorgeJourneaux | 6:64d346936f0e | 254 | else{ |
GeorgeJourneaux | 6:64d346936f0e | 255 | for(int n=data_t; n<=MAX_SAMPLES-1; n++){ |
GeorgeJourneaux | 6:64d346936f0e | 256 | if(S>=N){} |
GeorgeJourneaux | 6:64d346936f0e | 257 | else{ |
GeorgeJourneaux | 6:64d346936f0e | 258 | pc.puts(data_buffer[n]); |
GeorgeJourneaux | 6:64d346936f0e | 259 | S++; |
GeorgeJourneaux | 6:64d346936f0e | 260 | } |
GeorgeJourneaux | 6:64d346936f0e | 261 | } |
GeorgeJourneaux | 6:64d346936f0e | 262 | for(int n=0; n<=data_t; n++){ |
GeorgeJourneaux | 6:64d346936f0e | 263 | if(S>=N){} |
GeorgeJourneaux | 6:64d346936f0e | 264 | else{ |
GeorgeJourneaux | 6:64d346936f0e | 265 | pc.puts(data_buffer[n]); |
GeorgeJourneaux | 6:64d346936f0e | 266 | S++; |
GeorgeJourneaux | 6:64d346936f0e | 267 | } |
GeorgeJourneaux | 6:64d346936f0e | 268 | } |
GeorgeJourneaux | 6:64d346936f0e | 269 | } |
GeorgeJourneaux | 6:64d346936f0e | 270 | |
GeorgeJourneaux | 6:64d346936f0e | 271 | //Unlock data buffer |
GeorgeJourneaux | 6:64d346936f0e | 272 | DataBuffer.unlock(); |
GeorgeJourneaux | 2:28d12a3db239 | 273 | } |
GeorgeJourneaux | 6:64d346936f0e | 274 | /*----DELETE----------------------------------*/ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 275 | else if(strstr(rx_buffer, "DELETE")){ |
GeorgeJourneaux | 6:64d346936f0e | 276 | pc.puts(" DELETE \n\r"); |
GeorgeJourneaux | 3:73497379c0cb | 277 | } |
GeorgeJourneaux | 6:64d346936f0e | 278 | /*----SETDATE----------------------------------*/ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 279 | else if(strstr(rx_buffer, "SETDATE")){ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 280 | time(&raw_time); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 281 | s_time = localtime(&raw_time); |
GeorgeJourneaux | 3:73497379c0cb | 282 | |
GeorgeJourneaux | 6:64d346936f0e | 283 | //Update day in time structure |
GeorgeJourneaux | 5:ea3ec65cbf5f | 284 | int dd = atoi(strncpy(tm_n,&rx_buffer[8],2)); |
GeorgeJourneaux | 3:73497379c0cb | 285 | s_time->tm_mday = dd; |
GeorgeJourneaux | 3:73497379c0cb | 286 | memset(tm_n, NULL, 4); |
GeorgeJourneaux | 3:73497379c0cb | 287 | |
GeorgeJourneaux | 6:64d346936f0e | 288 | //Update month in time structure |
GeorgeJourneaux | 5:ea3ec65cbf5f | 289 | int mm = atoi(strncpy(tm_n,&rx_buffer[11],2)); |
GeorgeJourneaux | 3:73497379c0cb | 290 | s_time->tm_mon = mm-1; |
GeorgeJourneaux | 3:73497379c0cb | 291 | memset(tm_n, NULL, 4); |
GeorgeJourneaux | 3:73497379c0cb | 292 | |
GeorgeJourneaux | 6:64d346936f0e | 293 | //Update year in time structure |
GeorgeJourneaux | 5:ea3ec65cbf5f | 294 | int yyyy = atoi(strncpy(tm_n,&rx_buffer[14],4)); |
GeorgeJourneaux | 3:73497379c0cb | 295 | s_time->tm_year = yyyy-1900; |
GeorgeJourneaux | 3:73497379c0cb | 296 | memset(tm_n, NULL, 4); |
GeorgeJourneaux | 3:73497379c0cb | 297 | |
GeorgeJourneaux | 6:64d346936f0e | 298 | //Set date from updated time structure |
GeorgeJourneaux | 3:73497379c0cb | 299 | set_time(mktime(s_time)); |
GeorgeJourneaux | 6:64d346936f0e | 300 | strftime(serial_buffer, 80, "\n\r Set Date: %d/%m/%Y\n\r", s_time); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 301 | pc.puts(serial_buffer); |
GeorgeJourneaux | 2:28d12a3db239 | 302 | } |
GeorgeJourneaux | 6:64d346936f0e | 303 | /*----SETTIME---------------------------------*/ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 304 | else if(strstr(rx_buffer, "SETTIME")){ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 305 | time(&raw_time); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 306 | s_time = localtime(&raw_time); |
GeorgeJourneaux | 3:73497379c0cb | 307 | |
GeorgeJourneaux | 6:64d346936f0e | 308 | //Update seconds in time structure |
GeorgeJourneaux | 5:ea3ec65cbf5f | 309 | int ss = atoi(strncpy(tm_n,&rx_buffer[14],2)); |
GeorgeJourneaux | 3:73497379c0cb | 310 | s_time->tm_sec = ss; |
GeorgeJourneaux | 3:73497379c0cb | 311 | memset(tm_n, NULL, 4); |
GeorgeJourneaux | 6:64d346936f0e | 312 | |
GeorgeJourneaux | 6:64d346936f0e | 313 | //Update minutes in time structure |
GeorgeJourneaux | 5:ea3ec65cbf5f | 314 | int mm = atoi(strncpy(tm_n,&rx_buffer[11],2)); |
GeorgeJourneaux | 3:73497379c0cb | 315 | s_time->tm_min = mm; |
GeorgeJourneaux | 3:73497379c0cb | 316 | memset(tm_n, NULL, 4); |
GeorgeJourneaux | 3:73497379c0cb | 317 | |
GeorgeJourneaux | 6:64d346936f0e | 318 | //Update hour in time structure |
GeorgeJourneaux | 5:ea3ec65cbf5f | 319 | int hh = atoi(strncpy(tm_n,&rx_buffer[8],2)); |
GeorgeJourneaux | 3:73497379c0cb | 320 | s_time->tm_hour = hh; |
GeorgeJourneaux | 3:73497379c0cb | 321 | memset(tm_n, NULL, 4); |
GeorgeJourneaux | 6:64d346936f0e | 322 | |
GeorgeJourneaux | 6:64d346936f0e | 323 | //Set time from updated time structure |
GeorgeJourneaux | 3:73497379c0cb | 324 | set_time(mktime(s_time)); |
GeorgeJourneaux | 6:64d346936f0e | 325 | strftime(serial_buffer, 80, "\n\r Set Time: %X\n\r", s_time); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 326 | pc.puts(serial_buffer); |
GeorgeJourneaux | 2:28d12a3db239 | 327 | } |
GeorgeJourneaux | 6:64d346936f0e | 328 | /*----SETT----------------------------------*/ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 329 | else if(strstr(rx_buffer, "SETT")){ |
GeorgeJourneaux | 6:64d346936f0e | 330 | pc.puts(" SETT\n\r"); |
GeorgeJourneaux | 2:28d12a3db239 | 331 | } |
GeorgeJourneaux | 6:64d346936f0e | 332 | /*----STATE----------------------------------*/ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 333 | else if(strstr(rx_buffer, "STATE")){ |
GeorgeJourneaux | 6:64d346936f0e | 334 | pc.puts(" STATE\n\r"); |
GeorgeJourneaux | 2:28d12a3db239 | 335 | } |
GeorgeJourneaux | 6:64d346936f0e | 336 | /*----LOGGING----------------------------------*/ |
GeorgeJourneaux | 5:ea3ec65cbf5f | 337 | else if(strstr(rx_buffer, "LOGGING")){ |
GeorgeJourneaux | 6:64d346936f0e | 338 | pc.puts(" LOGGING\n\r"); |
GeorgeJourneaux | 2:28d12a3db239 | 339 | } |
GeorgeJourneaux | 6:64d346936f0e | 340 | /*----ERROR---*/ |
GeorgeJourneaux | 2:28d12a3db239 | 341 | else{ |
GeorgeJourneaux | 6:64d346936f0e | 342 | pc.puts("####ERROR####\n\r"); |
GeorgeJourneaux | 2:28d12a3db239 | 343 | } |
GeorgeJourneaux | 6:64d346936f0e | 344 | /*----------------------------------------------*/ |
GeorgeJourneaux | 6:64d346936f0e | 345 | |
GeorgeJourneaux | 6:64d346936f0e | 346 | //Clear serial buffers |
GeorgeJourneaux | 5:ea3ec65cbf5f | 347 | memset(serial_buffer, NULL, 80); |
GeorgeJourneaux | 5:ea3ec65cbf5f | 348 | memset(rx_buffer, NULL, 32); |
GeorgeJourneaux | 2:28d12a3db239 | 349 | rx_in = 0; |
GeorgeJourneaux | 2:28d12a3db239 | 350 | |
GeorgeJourneaux | 6:64d346936f0e | 351 | //Attach serial interrupt |
GeorgeJourneaux | 2:28d12a3db239 | 352 | pc.attach(&Rx_interrupt, Serial::RxIrq); |
GeorgeJourneaux | 2:28d12a3db239 | 353 | } |
GeorgeJourneaux | 2:28d12a3db239 | 354 | } |
GeorgeJourneaux | 3:73497379c0cb | 355 | /*--------------------------------------------------------------------*/ |