Dependencies: C12832 ESP-call FXOS8700Q
main.cpp@0:78de368300ec, 2022-06-13 (annotated)
- Committer:
- 201710861
- Date:
- Mon Jun 13 13:56:52 2022 +0000
- Revision:
- 0:78de368300ec
This is the program used on the board with Esp attached when demo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
201710861 | 0:78de368300ec | 1 | #include "mbed.h" |
201710861 | 0:78de368300ec | 2 | #include "C12832.h" |
201710861 | 0:78de368300ec | 3 | #include "ESP-call.h" |
201710861 | 0:78de368300ec | 4 | #include "communication.h" |
201710861 | 0:78de368300ec | 5 | |
201710861 | 0:78de368300ec | 6 | //================================================================ |
201710861 | 0:78de368300ec | 7 | Serial pc(USBTX, USBRX, 115200); |
201710861 | 0:78de368300ec | 8 | |
201710861 | 0:78de368300ec | 9 | using namespace std; |
201710861 | 0:78de368300ec | 10 | char esp_data; |
201710861 | 0:78de368300ec | 11 | char esp_arr[20]; |
201710861 | 0:78de368300ec | 12 | char arr_time[20] = "0:0:0"; |
201710861 | 0:78de368300ec | 13 | int index = 0; |
201710861 | 0:78de368300ec | 14 | int mbedMode = 0; |
201710861 | 0:78de368300ec | 15 | int tempMode = 2; |
201710861 | 0:78de368300ec | 16 | bool trans_status = 0; |
201710861 | 0:78de368300ec | 17 | PwmOut led_r(D5); |
201710861 | 0:78de368300ec | 18 | PwmOut led_g(D9); |
201710861 | 0:78de368300ec | 19 | |
201710861 | 0:78de368300ec | 20 | AnalogIn sensor(A0); |
201710861 | 0:78de368300ec | 21 | DigitalOut led(D3); |
201710861 | 0:78de368300ec | 22 | |
201710861 | 0:78de368300ec | 23 | Thread thread_led; |
201710861 | 0:78de368300ec | 24 | Thread thread_lcd; |
201710861 | 0:78de368300ec | 25 | Ticker ticker; |
201710861 | 0:78de368300ec | 26 | |
201710861 | 0:78de368300ec | 27 | void ledSet(); |
201710861 | 0:78de368300ec | 28 | |
201710861 | 0:78de368300ec | 29 | #define MAIN 0 |
201710861 | 0:78de368300ec | 30 | #define COM 1 |
201710861 | 0:78de368300ec | 31 | #define ALARM 2 |
201710861 | 0:78de368300ec | 32 | #define ALARM_SET 29 |
201710861 | 0:78de368300ec | 33 | #define PERM 3 |
201710861 | 0:78de368300ec | 34 | |
201710861 | 0:78de368300ec | 35 | #define ALARM_SOUND 21 |
201710861 | 0:78de368300ec | 36 | #define ALARM_LED 22 |
201710861 | 0:78de368300ec | 37 | #define ALARM_SOUND_LED 23 |
201710861 | 0:78de368300ec | 38 | #define ALARM_ERROR 24 |
201710861 | 0:78de368300ec | 39 | |
201710861 | 0:78de368300ec | 40 | #define PERM_SOUND 31 |
201710861 | 0:78de368300ec | 41 | #define PERM_LED 32 |
201710861 | 0:78de368300ec | 42 | #define PERM_SOUND_LED 33 |
201710861 | 0:78de368300ec | 43 | #define PERM_ERROR 34 |
201710861 | 0:78de368300ec | 44 | |
201710861 | 0:78de368300ec | 45 | int send_count = 0; |
201710861 | 0:78de368300ec | 46 | |
201710861 | 0:78de368300ec | 47 | //================================ LCD ================================ |
201710861 | 0:78de368300ec | 48 | C12832 lcd(D11, D13, D12, D7, D10); // lcd = (MOSI, SCK, RESET, A0, nCS) |
201710861 | 0:78de368300ec | 49 | |
201710861 | 0:78de368300ec | 50 | bool alarm_stop_lcd = 0; |
201710861 | 0:78de368300ec | 51 | |
201710861 | 0:78de368300ec | 52 | // LCD 초기화 |
201710861 | 0:78de368300ec | 53 | void lcdInit(); |
201710861 | 0:78de368300ec | 54 | // LCD의 x, y 좌표에 str을 출력 |
201710861 | 0:78de368300ec | 55 | void writeLcdCLS(const char*, int, int); |
201710861 | 0:78de368300ec | 56 | // LCD의 x, y 좌표에 str을 출력 cls (x) |
201710861 | 0:78de368300ec | 57 | void writeLcd(const char*, int, int); |
201710861 | 0:78de368300ec | 58 | // LCD에 digital clock 출력 |
201710861 | 0:78de368300ec | 59 | void writeTime(); |
201710861 | 0:78de368300ec | 60 | // LCD에 alarm 출력 |
201710861 | 0:78de368300ec | 61 | void writeAlarm(); |
201710861 | 0:78de368300ec | 62 | |
201710861 | 0:78de368300ec | 63 | //================================ Alarm ================================ |
201710861 | 0:78de368300ec | 64 | Thread thread_Alarm; |
201710861 | 0:78de368300ec | 65 | Timer timer; |
201710861 | 0:78de368300ec | 66 | Timer trans_timer; |
201710861 | 0:78de368300ec | 67 | |
201710861 | 0:78de368300ec | 68 | int a_time = 0; // alarm 시간 |
201710861 | 0:78de368300ec | 69 | int a_time_temp = 0; |
201710861 | 0:78de368300ec | 70 | |
201710861 | 0:78de368300ec | 71 | int a_tm = 0; |
201710861 | 0:78de368300ec | 72 | int a_hour = 0; |
201710861 | 0:78de368300ec | 73 | int a_mins = 0; |
201710861 | 0:78de368300ec | 74 | int a_sec = 0; |
201710861 | 0:78de368300ec | 75 | |
201710861 | 0:78de368300ec | 76 | int start_alarm = 0; |
201710861 | 0:78de368300ec | 77 | int end_alarm = 0; |
201710861 | 0:78de368300ec | 78 | |
201710861 | 0:78de368300ec | 79 | |
201710861 | 0:78de368300ec | 80 | int a_temp = 0; |
201710861 | 0:78de368300ec | 81 | int a_temp_h = 0; |
201710861 | 0:78de368300ec | 82 | int a_temp_m = 0; |
201710861 | 0:78de368300ec | 83 | int a_temp_s = 0; |
201710861 | 0:78de368300ec | 84 | |
201710861 | 0:78de368300ec | 85 | // Timer 동작(thread) |
201710861 | 0:78de368300ec | 86 | void timerSet(); |
201710861 | 0:78de368300ec | 87 | // Timer 초기화 |
201710861 | 0:78de368300ec | 88 | void timerReset(); |
201710861 | 0:78de368300ec | 89 | // alarm 설정 |
201710861 | 0:78de368300ec | 90 | void alarmSet(); |
201710861 | 0:78de368300ec | 91 | void alarmStart(); |
201710861 | 0:78de368300ec | 92 | void alarmCount(); |
201710861 | 0:78de368300ec | 93 | |
201710861 | 0:78de368300ec | 94 | //================================ Clock ================================ |
201710861 | 0:78de368300ec | 95 | Thread thread_Clock; |
201710861 | 0:78de368300ec | 96 | |
201710861 | 0:78de368300ec | 97 | int c_hour = 0; |
201710861 | 0:78de368300ec | 98 | int c_mins = 0; |
201710861 | 0:78de368300ec | 99 | int c_sec = 0; |
201710861 | 0:78de368300ec | 100 | |
201710861 | 0:78de368300ec | 101 | //digital clock 초기화 |
201710861 | 0:78de368300ec | 102 | void clockInit(); |
201710861 | 0:78de368300ec | 103 | //현재 시각 가져옴 |
201710861 | 0:78de368300ec | 104 | void getTime(); |
201710861 | 0:78de368300ec | 105 | //digital clock 출력 |
201710861 | 0:78de368300ec | 106 | void writeTime(); |
201710861 | 0:78de368300ec | 107 | |
201710861 | 0:78de368300ec | 108 | //================================ Joystick ================================ |
201710861 | 0:78de368300ec | 109 | InterruptIn up(A2); |
201710861 | 0:78de368300ec | 110 | InterruptIn down(A3); |
201710861 | 0:78de368300ec | 111 | InterruptIn left(A4); |
201710861 | 0:78de368300ec | 112 | InterruptIn rite(A5); |
201710861 | 0:78de368300ec | 113 | InterruptIn center(D4); |
201710861 | 0:78de368300ec | 114 | InterruptIn sw2(SW2); |
201710861 | 0:78de368300ec | 115 | InterruptIn sw3(SW3); // permanent 중지 |
201710861 | 0:78de368300ec | 116 | |
201710861 | 0:78de368300ec | 117 | void ISR_center(); |
201710861 | 0:78de368300ec | 118 | void ISR_up(); |
201710861 | 0:78de368300ec | 119 | void ISR_down(); |
201710861 | 0:78de368300ec | 120 | void ISR_left(); |
201710861 | 0:78de368300ec | 121 | void ISR_rite(); |
201710861 | 0:78de368300ec | 122 | void ISR_sw2(); |
201710861 | 0:78de368300ec | 123 | |
201710861 | 0:78de368300ec | 124 | void perm_Stop(); |
201710861 | 0:78de368300ec | 125 | |
201710861 | 0:78de368300ec | 126 | //main |
201710861 | 0:78de368300ec | 127 | bool main_center = 0; |
201710861 | 0:78de368300ec | 128 | |
201710861 | 0:78de368300ec | 129 | //communication |
201710861 | 0:78de368300ec | 130 | bool com_left = 0; |
201710861 | 0:78de368300ec | 131 | bool com_right = 0; |
201710861 | 0:78de368300ec | 132 | bool com_center = 0; |
201710861 | 0:78de368300ec | 133 | |
201710861 | 0:78de368300ec | 134 | //alarm set (알람 설정) |
201710861 | 0:78de368300ec | 135 | bool alarm_set_up = 0; |
201710861 | 0:78de368300ec | 136 | bool alarm_set_down = 0; |
201710861 | 0:78de368300ec | 137 | bool alarm_set_left = 0; |
201710861 | 0:78de368300ec | 138 | bool alarm_set_right = 0; |
201710861 | 0:78de368300ec | 139 | bool alarm_set_center = 0; |
201710861 | 0:78de368300ec | 140 | |
201710861 | 0:78de368300ec | 141 | //alarm(다음 선택) |
201710861 | 0:78de368300ec | 142 | bool alarm_left = 0; |
201710861 | 0:78de368300ec | 143 | bool alarm_right = 0; |
201710861 | 0:78de368300ec | 144 | bool alarm_center = 0; |
201710861 | 0:78de368300ec | 145 | |
201710861 | 0:78de368300ec | 146 | //permanent |
201710861 | 0:78de368300ec | 147 | bool perm_left = 0; |
201710861 | 0:78de368300ec | 148 | bool perm_right = 0; |
201710861 | 0:78de368300ec | 149 | bool perm_center = 0; |
201710861 | 0:78de368300ec | 150 | |
201710861 | 0:78de368300ec | 151 | //common (마지막 layer들 뒤로가기 기능 통일) |
201710861 | 0:78de368300ec | 152 | bool button_back = 0; //sw2 |
201710861 | 0:78de368300ec | 153 | |
201710861 | 0:78de368300ec | 154 | //permanent 송신 중단 |
201710861 | 0:78de368300ec | 155 | bool perm_stop = 0; |
201710861 | 0:78de368300ec | 156 | |
201710861 | 0:78de368300ec | 157 | |
201710861 | 0:78de368300ec | 158 | //================================ Communication ================================ |
201710861 | 0:78de368300ec | 159 | |
201710861 | 0:78de368300ec | 160 | |
201710861 | 0:78de368300ec | 161 | bool alarm_trans_status = 0; |
201710861 | 0:78de368300ec | 162 | int alarm_trans_mode = 0; |
201710861 | 0:78de368300ec | 163 | |
201710861 | 0:78de368300ec | 164 | bool perm_trans_status = 0; |
201710861 | 0:78de368300ec | 165 | int perm_trans_mode = 0; |
201710861 | 0:78de368300ec | 166 | |
201710861 | 0:78de368300ec | 167 | //===================================== |
201710861 | 0:78de368300ec | 168 | //LCD |
201710861 | 0:78de368300ec | 169 | |
201710861 | 0:78de368300ec | 170 | void lcdPrint(){ |
201710861 | 0:78de368300ec | 171 | switch(mbedMode){ |
201710861 | 0:78de368300ec | 172 | case MAIN: |
201710861 | 0:78de368300ec | 173 | writeLcd("COMMUNICATION DEVICE", 0, 6); |
201710861 | 0:78de368300ec | 174 | writeTime(); |
201710861 | 0:78de368300ec | 175 | if(main_center){ |
201710861 | 0:78de368300ec | 176 | mbedMode = COM; |
201710861 | 0:78de368300ec | 177 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 178 | main_center = 0; |
201710861 | 0:78de368300ec | 179 | lcd.cls(); |
201710861 | 0:78de368300ec | 180 | } |
201710861 | 0:78de368300ec | 181 | break; |
201710861 | 0:78de368300ec | 182 | |
201710861 | 0:78de368300ec | 183 | case COM: |
201710861 | 0:78de368300ec | 184 | if(alarm_stop_lcd){ |
201710861 | 0:78de368300ec | 185 | writeLcdCLS("Alarm Mode is finished...", 0, 6); |
201710861 | 0:78de368300ec | 186 | thread_sleep_for(1500); |
201710861 | 0:78de368300ec | 187 | alarm_stop_lcd = 0; |
201710861 | 0:78de368300ec | 188 | lcd.cls(); |
201710861 | 0:78de368300ec | 189 | } |
201710861 | 0:78de368300ec | 190 | |
201710861 | 0:78de368300ec | 191 | writeLcd("COMMUNICATION DEVICE", 0, 6); |
201710861 | 0:78de368300ec | 192 | writeLcd("Select", 0, 16); |
201710861 | 0:78de368300ec | 193 | |
201710861 | 0:78de368300ec | 194 | if(com_left || com_right){ |
201710861 | 0:78de368300ec | 195 | if(tempMode == ALARM_SET){ |
201710861 | 0:78de368300ec | 196 | writeLcd("Select Permanent ", 0, 16); |
201710861 | 0:78de368300ec | 197 | tempMode = PERM; |
201710861 | 0:78de368300ec | 198 | }else{ |
201710861 | 0:78de368300ec | 199 | writeLcd("Select Alarm ", 0, 16); |
201710861 | 0:78de368300ec | 200 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 201 | } |
201710861 | 0:78de368300ec | 202 | com_left = 0; |
201710861 | 0:78de368300ec | 203 | com_right = 0; |
201710861 | 0:78de368300ec | 204 | }else if(com_center){ |
201710861 | 0:78de368300ec | 205 | mbedMode = tempMode; |
201710861 | 0:78de368300ec | 206 | |
201710861 | 0:78de368300ec | 207 | if(tempMode == ALARM_SET){ |
201710861 | 0:78de368300ec | 208 | if(perm_trans_status){ |
201710861 | 0:78de368300ec | 209 | mbedMode = COM; |
201710861 | 0:78de368300ec | 210 | writeLcdCLS("Permanent mode is running...", 0, 6); |
201710861 | 0:78de368300ec | 211 | thread_sleep_for(500); |
201710861 | 0:78de368300ec | 212 | lcd.cls(); |
201710861 | 0:78de368300ec | 213 | }else if(alarm_trans_status){ |
201710861 | 0:78de368300ec | 214 | mbedMode = alarm_trans_mode; |
201710861 | 0:78de368300ec | 215 | }else{ |
201710861 | 0:78de368300ec | 216 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 217 | } |
201710861 | 0:78de368300ec | 218 | }else if(tempMode == PERM){ |
201710861 | 0:78de368300ec | 219 | if(alarm_trans_status){ |
201710861 | 0:78de368300ec | 220 | mbedMode = COM; |
201710861 | 0:78de368300ec | 221 | writeLcdCLS("Alarm mode is running...", 0, 6); |
201710861 | 0:78de368300ec | 222 | thread_sleep_for(500); |
201710861 | 0:78de368300ec | 223 | lcd.cls(); |
201710861 | 0:78de368300ec | 224 | }else if(perm_trans_status){ |
201710861 | 0:78de368300ec | 225 | mbedMode = perm_trans_mode; |
201710861 | 0:78de368300ec | 226 | }else{ |
201710861 | 0:78de368300ec | 227 | tempMode = PERM_SOUND; |
201710861 | 0:78de368300ec | 228 | } |
201710861 | 0:78de368300ec | 229 | } |
201710861 | 0:78de368300ec | 230 | |
201710861 | 0:78de368300ec | 231 | lcd.cls(); |
201710861 | 0:78de368300ec | 232 | com_center = 0; |
201710861 | 0:78de368300ec | 233 | }else if(button_back){ |
201710861 | 0:78de368300ec | 234 | lcd.cls(); |
201710861 | 0:78de368300ec | 235 | mbedMode = MAIN; |
201710861 | 0:78de368300ec | 236 | button_back = 0; |
201710861 | 0:78de368300ec | 237 | } |
201710861 | 0:78de368300ec | 238 | break; |
201710861 | 0:78de368300ec | 239 | |
201710861 | 0:78de368300ec | 240 | case ALARM_SET: // alarm_set_~ |
201710861 | 0:78de368300ec | 241 | writeLcd("Alarm Set Mode", 0, 6); |
201710861 | 0:78de368300ec | 242 | alarmSet(); |
201710861 | 0:78de368300ec | 243 | a_temp_h = a_temp / 3600; |
201710861 | 0:78de368300ec | 244 | a_temp %= 3600; |
201710861 | 0:78de368300ec | 245 | a_temp_m = a_temp / 60; |
201710861 | 0:78de368300ec | 246 | a_temp %= 60; |
201710861 | 0:78de368300ec | 247 | a_temp_s = a_temp; |
201710861 | 0:78de368300ec | 248 | lcd.locate(0, 16); |
201710861 | 0:78de368300ec | 249 | lcd.printf("Time = %d : %d : %d ", a_temp_h, a_temp_m, a_temp_s); |
201710861 | 0:78de368300ec | 250 | if(alarm_set_center){ |
201710861 | 0:78de368300ec | 251 | mbedMode = ALARM; |
201710861 | 0:78de368300ec | 252 | tempMode = ALARM_SOUND; |
201710861 | 0:78de368300ec | 253 | alarm_set_center = 0; |
201710861 | 0:78de368300ec | 254 | lcd.cls(); |
201710861 | 0:78de368300ec | 255 | }else if(button_back){ |
201710861 | 0:78de368300ec | 256 | mbedMode = COM; |
201710861 | 0:78de368300ec | 257 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 258 | button_back = 0; |
201710861 | 0:78de368300ec | 259 | lcd.cls(); |
201710861 | 0:78de368300ec | 260 | } |
201710861 | 0:78de368300ec | 261 | |
201710861 | 0:78de368300ec | 262 | break; |
201710861 | 0:78de368300ec | 263 | case ALARM: // alarm_~ |
201710861 | 0:78de368300ec | 264 | writeLcd("Alarm Mode", 0, 6); |
201710861 | 0:78de368300ec | 265 | writeLcd("Select", 0, 16); |
201710861 | 0:78de368300ec | 266 | |
201710861 | 0:78de368300ec | 267 | if(alarm_left){ |
201710861 | 0:78de368300ec | 268 | if(tempMode == ALARM_SOUND){ |
201710861 | 0:78de368300ec | 269 | writeLcd("Select Sound+Led ", 0, 16); |
201710861 | 0:78de368300ec | 270 | tempMode = ALARM_SOUND_LED; |
201710861 | 0:78de368300ec | 271 | }else if(tempMode == ALARM_LED){ |
201710861 | 0:78de368300ec | 272 | writeLcd("Select Sound ", 0, 16); |
201710861 | 0:78de368300ec | 273 | tempMode = ALARM_SOUND; |
201710861 | 0:78de368300ec | 274 | }else if(tempMode == ALARM_SOUND_LED){ |
201710861 | 0:78de368300ec | 275 | writeLcd("Select Led ", 0, 16); |
201710861 | 0:78de368300ec | 276 | tempMode = ALARM_LED; |
201710861 | 0:78de368300ec | 277 | } |
201710861 | 0:78de368300ec | 278 | alarm_left = 0; |
201710861 | 0:78de368300ec | 279 | }else if(alarm_right){ |
201710861 | 0:78de368300ec | 280 | if(tempMode == ALARM_SOUND){ |
201710861 | 0:78de368300ec | 281 | writeLcd("Select Led ", 0, 16); |
201710861 | 0:78de368300ec | 282 | tempMode = ALARM_LED ; |
201710861 | 0:78de368300ec | 283 | }else if(tempMode == ALARM_LED){ |
201710861 | 0:78de368300ec | 284 | writeLcd("Select Sound+Led ", 0, 16); |
201710861 | 0:78de368300ec | 285 | tempMode = ALARM_SOUND_LED; |
201710861 | 0:78de368300ec | 286 | }else if(tempMode == ALARM_SOUND_LED){ |
201710861 | 0:78de368300ec | 287 | writeLcd("Select Sound ", 0, 16); |
201710861 | 0:78de368300ec | 288 | tempMode = ALARM_SOUND; |
201710861 | 0:78de368300ec | 289 | } |
201710861 | 0:78de368300ec | 290 | alarm_right = 0; |
201710861 | 0:78de368300ec | 291 | }else if(alarm_center){ |
201710861 | 0:78de368300ec | 292 | alarmStart(); |
201710861 | 0:78de368300ec | 293 | mbedMode = tempMode; |
201710861 | 0:78de368300ec | 294 | alarm_center = 0; |
201710861 | 0:78de368300ec | 295 | lcd.cls(); |
201710861 | 0:78de368300ec | 296 | }else if(button_back){ |
201710861 | 0:78de368300ec | 297 | mbedMode = ALARM_SET; |
201710861 | 0:78de368300ec | 298 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 299 | button_back = 0; |
201710861 | 0:78de368300ec | 300 | lcd.cls(); |
201710861 | 0:78de368300ec | 301 | } |
201710861 | 0:78de368300ec | 302 | break; |
201710861 | 0:78de368300ec | 303 | |
201710861 | 0:78de368300ec | 304 | case PERM: |
201710861 | 0:78de368300ec | 305 | writeLcd("Permanent Mode ", 0, 6); |
201710861 | 0:78de368300ec | 306 | writeLcd("Select", 0, 16); |
201710861 | 0:78de368300ec | 307 | |
201710861 | 0:78de368300ec | 308 | if(button_back){ |
201710861 | 0:78de368300ec | 309 | mbedMode = COM; |
201710861 | 0:78de368300ec | 310 | tempMode = PERM; |
201710861 | 0:78de368300ec | 311 | trans_status = 0; |
201710861 | 0:78de368300ec | 312 | button_back = 0; |
201710861 | 0:78de368300ec | 313 | lcd.cls(); |
201710861 | 0:78de368300ec | 314 | }else if(perm_left){ |
201710861 | 0:78de368300ec | 315 | if(tempMode == PERM_SOUND){ |
201710861 | 0:78de368300ec | 316 | writeLcd("Select Sound+Led ", 0, 16); |
201710861 | 0:78de368300ec | 317 | tempMode = PERM_SOUND_LED; |
201710861 | 0:78de368300ec | 318 | }else if(tempMode == PERM_LED){ |
201710861 | 0:78de368300ec | 319 | writeLcd("Select Sound ", 0, 16); |
201710861 | 0:78de368300ec | 320 | tempMode = PERM_SOUND; |
201710861 | 0:78de368300ec | 321 | }else if(tempMode == PERM_SOUND_LED){ |
201710861 | 0:78de368300ec | 322 | writeLcd("Select Led ", 0, 16); |
201710861 | 0:78de368300ec | 323 | tempMode = PERM_LED; |
201710861 | 0:78de368300ec | 324 | } |
201710861 | 0:78de368300ec | 325 | perm_left = 0; |
201710861 | 0:78de368300ec | 326 | }else if(perm_right){ |
201710861 | 0:78de368300ec | 327 | if(tempMode == PERM_SOUND){ |
201710861 | 0:78de368300ec | 328 | writeLcd("Select Led ", 0, 16); |
201710861 | 0:78de368300ec | 329 | tempMode = PERM_LED; |
201710861 | 0:78de368300ec | 330 | }else if(tempMode == PERM_LED){ |
201710861 | 0:78de368300ec | 331 | writeLcd("Select Sound+Led ", 0, 16); |
201710861 | 0:78de368300ec | 332 | tempMode = PERM_SOUND_LED; |
201710861 | 0:78de368300ec | 333 | }else if(tempMode == PERM_SOUND_LED){ |
201710861 | 0:78de368300ec | 334 | writeLcd("Select Sound ", 0, 16); |
201710861 | 0:78de368300ec | 335 | tempMode = PERM_SOUND; |
201710861 | 0:78de368300ec | 336 | } |
201710861 | 0:78de368300ec | 337 | perm_right = 0; |
201710861 | 0:78de368300ec | 338 | }else if(perm_center){ |
201710861 | 0:78de368300ec | 339 | mbedMode = tempMode; |
201710861 | 0:78de368300ec | 340 | lcd.cls(); |
201710861 | 0:78de368300ec | 341 | perm_center = 0; |
201710861 | 0:78de368300ec | 342 | } |
201710861 | 0:78de368300ec | 343 | break; |
201710861 | 0:78de368300ec | 344 | |
201710861 | 0:78de368300ec | 345 | case ALARM_SOUND: |
201710861 | 0:78de368300ec | 346 | writeLcd("Alarm Sound Mode ", 0, 6); |
201710861 | 0:78de368300ec | 347 | writeAlarm(); |
201710861 | 0:78de368300ec | 348 | |
201710861 | 0:78de368300ec | 349 | if(!alarm_trans_status){ |
201710861 | 0:78de368300ec | 350 | alarm_trans_status = 1; |
201710861 | 0:78de368300ec | 351 | alarm_trans_mode = ALARM_SOUND; |
201710861 | 0:78de368300ec | 352 | thread_sleep_for(1000); |
201710861 | 0:78de368300ec | 353 | writeLcdCLS("Not Supported", 0, 6); |
201710861 | 0:78de368300ec | 354 | alarmStart(); |
201710861 | 0:78de368300ec | 355 | } |
201710861 | 0:78de368300ec | 356 | |
201710861 | 0:78de368300ec | 357 | |
201710861 | 0:78de368300ec | 358 | if(button_back){ |
201710861 | 0:78de368300ec | 359 | mbedMode = COM; |
201710861 | 0:78de368300ec | 360 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 361 | lcd.cls(); |
201710861 | 0:78de368300ec | 362 | button_back = 0; |
201710861 | 0:78de368300ec | 363 | } |
201710861 | 0:78de368300ec | 364 | break; |
201710861 | 0:78de368300ec | 365 | |
201710861 | 0:78de368300ec | 366 | case ALARM_LED: |
201710861 | 0:78de368300ec | 367 | writeLcd("Alarm Led Mode ", 0, 6); |
201710861 | 0:78de368300ec | 368 | writeAlarm(); |
201710861 | 0:78de368300ec | 369 | |
201710861 | 0:78de368300ec | 370 | if(!alarm_trans_status){ |
201710861 | 0:78de368300ec | 371 | alarm_trans_status = 1; |
201710861 | 0:78de368300ec | 372 | alarm_trans_mode = ALARM_LED; |
201710861 | 0:78de368300ec | 373 | alarmStart(); |
201710861 | 0:78de368300ec | 374 | //send_count = 1; |
201710861 | 0:78de368300ec | 375 | //if(!send_count){ |
201710861 | 0:78de368300ec | 376 | //mutex.lock(); |
201710861 | 0:78de368300ec | 377 | //send_count=1; |
201710861 | 0:78de368300ec | 378 | send(led, sensor); |
201710861 | 0:78de368300ec | 379 | //mutex.unlock(); |
201710861 | 0:78de368300ec | 380 | //} |
201710861 | 0:78de368300ec | 381 | |
201710861 | 0:78de368300ec | 382 | } |
201710861 | 0:78de368300ec | 383 | |
201710861 | 0:78de368300ec | 384 | if(button_back){ |
201710861 | 0:78de368300ec | 385 | mbedMode = COM; |
201710861 | 0:78de368300ec | 386 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 387 | lcd.cls(); |
201710861 | 0:78de368300ec | 388 | button_back = 0; |
201710861 | 0:78de368300ec | 389 | } |
201710861 | 0:78de368300ec | 390 | |
201710861 | 0:78de368300ec | 391 | break; |
201710861 | 0:78de368300ec | 392 | |
201710861 | 0:78de368300ec | 393 | case ALARM_SOUND_LED: |
201710861 | 0:78de368300ec | 394 | writeLcd("Alarm Sound+Led Mode ", 0, 6); |
201710861 | 0:78de368300ec | 395 | writeAlarm(); |
201710861 | 0:78de368300ec | 396 | |
201710861 | 0:78de368300ec | 397 | if(!alarm_trans_status){ |
201710861 | 0:78de368300ec | 398 | alarm_trans_status = 1; |
201710861 | 0:78de368300ec | 399 | alarm_trans_mode = ALARM_SOUND_LED; |
201710861 | 0:78de368300ec | 400 | alarmStart(); |
201710861 | 0:78de368300ec | 401 | thread_sleep_for(1000); |
201710861 | 0:78de368300ec | 402 | writeLcdCLS("Not Supported ", 0, 6); |
201710861 | 0:78de368300ec | 403 | } |
201710861 | 0:78de368300ec | 404 | |
201710861 | 0:78de368300ec | 405 | if(button_back){ |
201710861 | 0:78de368300ec | 406 | mbedMode = COM; |
201710861 | 0:78de368300ec | 407 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 408 | lcd.cls(); |
201710861 | 0:78de368300ec | 409 | button_back = 0; |
201710861 | 0:78de368300ec | 410 | } |
201710861 | 0:78de368300ec | 411 | break; |
201710861 | 0:78de368300ec | 412 | |
201710861 | 0:78de368300ec | 413 | case ALARM_ERROR: |
201710861 | 0:78de368300ec | 414 | writeLcd("Error ", 0, 6); |
201710861 | 0:78de368300ec | 415 | writeLcd("Please Push Back Button", 0, 16); |
201710861 | 0:78de368300ec | 416 | if(button_back){ |
201710861 | 0:78de368300ec | 417 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 418 | mbedMode = COM; |
201710861 | 0:78de368300ec | 419 | button_back = 0; |
201710861 | 0:78de368300ec | 420 | } |
201710861 | 0:78de368300ec | 421 | break; |
201710861 | 0:78de368300ec | 422 | |
201710861 | 0:78de368300ec | 423 | case PERM_SOUND: |
201710861 | 0:78de368300ec | 424 | writeLcd("Permanent Sound Mode ", 0, 6); |
201710861 | 0:78de368300ec | 425 | |
201710861 | 0:78de368300ec | 426 | if(!perm_trans_status){ |
201710861 | 0:78de368300ec | 427 | perm_trans_status = 1; |
201710861 | 0:78de368300ec | 428 | perm_trans_mode = PERM_SOUND; |
201710861 | 0:78de368300ec | 429 | writeLcd("Not Supported ", 0, 16); |
201710861 | 0:78de368300ec | 430 | } |
201710861 | 0:78de368300ec | 431 | |
201710861 | 0:78de368300ec | 432 | if(button_back){ |
201710861 | 0:78de368300ec | 433 | mbedMode = COM; |
201710861 | 0:78de368300ec | 434 | tempMode = PERM; |
201710861 | 0:78de368300ec | 435 | button_back = 0; |
201710861 | 0:78de368300ec | 436 | lcd.cls(); |
201710861 | 0:78de368300ec | 437 | } |
201710861 | 0:78de368300ec | 438 | |
201710861 | 0:78de368300ec | 439 | if(perm_stop){ |
201710861 | 0:78de368300ec | 440 | perm_Stop(); |
201710861 | 0:78de368300ec | 441 | perm_stop = 0; |
201710861 | 0:78de368300ec | 442 | } |
201710861 | 0:78de368300ec | 443 | |
201710861 | 0:78de368300ec | 444 | break; |
201710861 | 0:78de368300ec | 445 | |
201710861 | 0:78de368300ec | 446 | case PERM_LED: |
201710861 | 0:78de368300ec | 447 | writeLcd("Permanent Led Mode ", 0, 6); |
201710861 | 0:78de368300ec | 448 | |
201710861 | 0:78de368300ec | 449 | if(!perm_trans_status){ |
201710861 | 0:78de368300ec | 450 | perm_trans_status = 1; |
201710861 | 0:78de368300ec | 451 | perm_trans_mode = PERM_LED; |
201710861 | 0:78de368300ec | 452 | mutex.lock(); |
201710861 | 0:78de368300ec | 453 | writeLcd("Receiving... ", 0, 16); |
201710861 | 0:78de368300ec | 454 | recv(led, sensor); |
201710861 | 0:78de368300ec | 455 | mutex.unlock(); |
201710861 | 0:78de368300ec | 456 | } |
201710861 | 0:78de368300ec | 457 | |
201710861 | 0:78de368300ec | 458 | if(button_back){ |
201710861 | 0:78de368300ec | 459 | mbedMode = COM; |
201710861 | 0:78de368300ec | 460 | tempMode = PERM; |
201710861 | 0:78de368300ec | 461 | button_back = 0; |
201710861 | 0:78de368300ec | 462 | lcd.cls(); |
201710861 | 0:78de368300ec | 463 | } |
201710861 | 0:78de368300ec | 464 | |
201710861 | 0:78de368300ec | 465 | if(perm_stop){ |
201710861 | 0:78de368300ec | 466 | perm_Stop(); |
201710861 | 0:78de368300ec | 467 | perm_stop = 0; |
201710861 | 0:78de368300ec | 468 | } |
201710861 | 0:78de368300ec | 469 | |
201710861 | 0:78de368300ec | 470 | break; |
201710861 | 0:78de368300ec | 471 | |
201710861 | 0:78de368300ec | 472 | case PERM_SOUND_LED: |
201710861 | 0:78de368300ec | 473 | writeLcd("Permanent Sound+Led Mode ", 0, 6); |
201710861 | 0:78de368300ec | 474 | |
201710861 | 0:78de368300ec | 475 | if(!perm_trans_status){ |
201710861 | 0:78de368300ec | 476 | perm_trans_status = 1; |
201710861 | 0:78de368300ec | 477 | perm_trans_mode = PERM_SOUND_LED; |
201710861 | 0:78de368300ec | 478 | writeLcd("Not Supported ", 0, 16); |
201710861 | 0:78de368300ec | 479 | } |
201710861 | 0:78de368300ec | 480 | |
201710861 | 0:78de368300ec | 481 | if(button_back){ |
201710861 | 0:78de368300ec | 482 | mbedMode = COM; |
201710861 | 0:78de368300ec | 483 | tempMode = PERM; |
201710861 | 0:78de368300ec | 484 | button_back = 0; |
201710861 | 0:78de368300ec | 485 | lcd.cls(); |
201710861 | 0:78de368300ec | 486 | } |
201710861 | 0:78de368300ec | 487 | |
201710861 | 0:78de368300ec | 488 | if(perm_stop){ |
201710861 | 0:78de368300ec | 489 | perm_Stop(); |
201710861 | 0:78de368300ec | 490 | perm_stop = 0; |
201710861 | 0:78de368300ec | 491 | } |
201710861 | 0:78de368300ec | 492 | |
201710861 | 0:78de368300ec | 493 | break; |
201710861 | 0:78de368300ec | 494 | |
201710861 | 0:78de368300ec | 495 | case PERM_ERROR: |
201710861 | 0:78de368300ec | 496 | writeLcd("Error ", 0, 6); |
201710861 | 0:78de368300ec | 497 | writeLcd("Please Push Back Button", 0, 16); |
201710861 | 0:78de368300ec | 498 | if(button_back){ |
201710861 | 0:78de368300ec | 499 | tempMode = PERM; |
201710861 | 0:78de368300ec | 500 | mbedMode = COM; |
201710861 | 0:78de368300ec | 501 | button_back = 0; |
201710861 | 0:78de368300ec | 502 | } |
201710861 | 0:78de368300ec | 503 | break; |
201710861 | 0:78de368300ec | 504 | |
201710861 | 0:78de368300ec | 505 | default: |
201710861 | 0:78de368300ec | 506 | break; |
201710861 | 0:78de368300ec | 507 | } |
201710861 | 0:78de368300ec | 508 | } |
201710861 | 0:78de368300ec | 509 | |
201710861 | 0:78de368300ec | 510 | void writeLcdCLS(const char* str, int x, int y){ |
201710861 | 0:78de368300ec | 511 | lcd.locate(x, y); |
201710861 | 0:78de368300ec | 512 | lcd.cls(); |
201710861 | 0:78de368300ec | 513 | lcd.printf("%s", str); |
201710861 | 0:78de368300ec | 514 | } |
201710861 | 0:78de368300ec | 515 | |
201710861 | 0:78de368300ec | 516 | void writeLcd(const char* str, int x, int y){ |
201710861 | 0:78de368300ec | 517 | lcd.locate(x, y); |
201710861 | 0:78de368300ec | 518 | lcd.printf("%s", str); |
201710861 | 0:78de368300ec | 519 | } |
201710861 | 0:78de368300ec | 520 | |
201710861 | 0:78de368300ec | 521 | |
201710861 | 0:78de368300ec | 522 | void lcdStart(){ |
201710861 | 0:78de368300ec | 523 | while(true){ |
201710861 | 0:78de368300ec | 524 | lcdPrint(); |
201710861 | 0:78de368300ec | 525 | } |
201710861 | 0:78de368300ec | 526 | } |
201710861 | 0:78de368300ec | 527 | |
201710861 | 0:78de368300ec | 528 | //===================================== |
201710861 | 0:78de368300ec | 529 | //ALARM |
201710861 | 0:78de368300ec | 530 | |
201710861 | 0:78de368300ec | 531 | void alarmSet(){ |
201710861 | 0:78de368300ec | 532 | a_temp = a_time; |
201710861 | 0:78de368300ec | 533 | if(alarm_set_up){// +1시간 |
201710861 | 0:78de368300ec | 534 | if(a_time < 82800){ |
201710861 | 0:78de368300ec | 535 | a_time += 3600; |
201710861 | 0:78de368300ec | 536 | }else{ |
201710861 | 0:78de368300ec | 537 | a_time -= 86400; |
201710861 | 0:78de368300ec | 538 | a_time += 3600; |
201710861 | 0:78de368300ec | 539 | } |
201710861 | 0:78de368300ec | 540 | alarm_set_up = 0; |
201710861 | 0:78de368300ec | 541 | }else if(alarm_set_down){// -1시간 |
201710861 | 0:78de368300ec | 542 | if(a_time >= 3600){ |
201710861 | 0:78de368300ec | 543 | a_time -= 3600; |
201710861 | 0:78de368300ec | 544 | }else{ |
201710861 | 0:78de368300ec | 545 | a_time += 86400; |
201710861 | 0:78de368300ec | 546 | a_time -= 3600; |
201710861 | 0:78de368300ec | 547 | } |
201710861 | 0:78de368300ec | 548 | alarm_set_down = 0; |
201710861 | 0:78de368300ec | 549 | }else if(alarm_set_left){// +1분 |
201710861 | 0:78de368300ec | 550 | if(a_time < 86340){ |
201710861 | 0:78de368300ec | 551 | a_time += 60; |
201710861 | 0:78de368300ec | 552 | }else{ |
201710861 | 0:78de368300ec | 553 | a_time -= 86400; |
201710861 | 0:78de368300ec | 554 | a_time += 60; |
201710861 | 0:78de368300ec | 555 | } |
201710861 | 0:78de368300ec | 556 | alarm_set_left = 0; |
201710861 | 0:78de368300ec | 557 | }else if(alarm_set_right){// -1분 |
201710861 | 0:78de368300ec | 558 | if(a_time >= 60){ |
201710861 | 0:78de368300ec | 559 | a_time -= 60; |
201710861 | 0:78de368300ec | 560 | }else{ |
201710861 | 0:78de368300ec | 561 | a_time += 86400; |
201710861 | 0:78de368300ec | 562 | a_time -= 60; |
201710861 | 0:78de368300ec | 563 | } |
201710861 | 0:78de368300ec | 564 | alarm_set_right = 0; |
201710861 | 0:78de368300ec | 565 | } |
201710861 | 0:78de368300ec | 566 | } |
201710861 | 0:78de368300ec | 567 | |
201710861 | 0:78de368300ec | 568 | void alarmReset(){ |
201710861 | 0:78de368300ec | 569 | a_time = 0; |
201710861 | 0:78de368300ec | 570 | a_hour = 0; |
201710861 | 0:78de368300ec | 571 | a_mins = 0; |
201710861 | 0:78de368300ec | 572 | a_sec = 0; |
201710861 | 0:78de368300ec | 573 | a_tm = 0; |
201710861 | 0:78de368300ec | 574 | a_temp = 0; |
201710861 | 0:78de368300ec | 575 | a_time_temp = 0; |
201710861 | 0:78de368300ec | 576 | end_alarm = 0; |
201710861 | 0:78de368300ec | 577 | start_alarm = 0; |
201710861 | 0:78de368300ec | 578 | send_count = 0; |
201710861 | 0:78de368300ec | 579 | alarm_trans_status = 0; |
201710861 | 0:78de368300ec | 580 | alarm_trans_mode = 0; |
201710861 | 0:78de368300ec | 581 | mbedMode = COM; |
201710861 | 0:78de368300ec | 582 | tempMode = ALARM_SET; |
201710861 | 0:78de368300ec | 583 | alarm_stop_lcd = 1; |
201710861 | 0:78de368300ec | 584 | timer.stop(); |
201710861 | 0:78de368300ec | 585 | timer.reset(); |
201710861 | 0:78de368300ec | 586 | } |
201710861 | 0:78de368300ec | 587 | |
201710861 | 0:78de368300ec | 588 | |
201710861 | 0:78de368300ec | 589 | void alarmCount(){ |
201710861 | 0:78de368300ec | 590 | while(true){ |
201710861 | 0:78de368300ec | 591 | if(alarm_trans_status){ |
201710861 | 0:78de368300ec | 592 | a_tm = timer.read(); |
201710861 | 0:78de368300ec | 593 | a_time_temp = a_time - a_tm - (end_alarm - start_alarm); |
201710861 | 0:78de368300ec | 594 | |
201710861 | 0:78de368300ec | 595 | |
201710861 | 0:78de368300ec | 596 | if(a_time_temp > 0 && alarm_trans_status){ |
201710861 | 0:78de368300ec | 597 | a_hour = a_time_temp / 3600; |
201710861 | 0:78de368300ec | 598 | a_time_temp = a_time_temp % 3600; |
201710861 | 0:78de368300ec | 599 | a_mins = a_time_temp / 60; |
201710861 | 0:78de368300ec | 600 | a_time_temp = a_time_temp % 60; |
201710861 | 0:78de368300ec | 601 | a_sec = a_time_temp; |
201710861 | 0:78de368300ec | 602 | thread_sleep_for(1000); |
201710861 | 0:78de368300ec | 603 | }else if(a_time_temp == 0 && alarm_trans_status){ |
201710861 | 0:78de368300ec | 604 | alarmReset(); |
201710861 | 0:78de368300ec | 605 | } |
201710861 | 0:78de368300ec | 606 | |
201710861 | 0:78de368300ec | 607 | } |
201710861 | 0:78de368300ec | 608 | } |
201710861 | 0:78de368300ec | 609 | } |
201710861 | 0:78de368300ec | 610 | |
201710861 | 0:78de368300ec | 611 | void alarmStart(){ |
201710861 | 0:78de368300ec | 612 | timer.reset(); |
201710861 | 0:78de368300ec | 613 | timer.start(); |
201710861 | 0:78de368300ec | 614 | thread_sleep_for(100); |
201710861 | 0:78de368300ec | 615 | thread_Alarm.start(alarmCount); |
201710861 | 0:78de368300ec | 616 | } |
201710861 | 0:78de368300ec | 617 | |
201710861 | 0:78de368300ec | 618 | void writeAlarm(){ |
201710861 | 0:78de368300ec | 619 | lcd.locate(0, 16); |
201710861 | 0:78de368300ec | 620 | lcd.printf("Time Left: %d:%d:%d ", a_hour, a_mins, a_sec); |
201710861 | 0:78de368300ec | 621 | } |
201710861 | 0:78de368300ec | 622 | |
201710861 | 0:78de368300ec | 623 | //===================================== |
201710861 | 0:78de368300ec | 624 | //CLOCK |
201710861 | 0:78de368300ec | 625 | |
201710861 | 0:78de368300ec | 626 | void clockInit(){ |
201710861 | 0:78de368300ec | 627 | //thread_Clock.start(getTime); |
201710861 | 0:78de368300ec | 628 | } |
201710861 | 0:78de368300ec | 629 | |
201710861 | 0:78de368300ec | 630 | int i; |
201710861 | 0:78de368300ec | 631 | int j; |
201710861 | 0:78de368300ec | 632 | |
201710861 | 0:78de368300ec | 633 | void getTime(){ |
201710861 | 0:78de368300ec | 634 | |
201710861 | 0:78de368300ec | 635 | PC.printf("%s\r\n", esp_arr); |
201710861 | 0:78de368300ec | 636 | |
201710861 | 0:78de368300ec | 637 | for(i = 0; i < 10; i++){ |
201710861 | 0:78de368300ec | 638 | if(esp_arr[i] == 't' && esp_arr[i+1] == 'i' && esp_arr[i+2] == 'm' && esp_arr[i+3] == 'e'){ |
201710861 | 0:78de368300ec | 639 | j = 0; |
201710861 | 0:78de368300ec | 640 | while(esp_arr[i] != 'H' && esp_arr[i] !='\0' && i != 20){ |
201710861 | 0:78de368300ec | 641 | arr_time[j++] = esp_arr[i++]; |
201710861 | 0:78de368300ec | 642 | } |
201710861 | 0:78de368300ec | 643 | arr_time[j] = '\0'; |
201710861 | 0:78de368300ec | 644 | break; |
201710861 | 0:78de368300ec | 645 | } |
201710861 | 0:78de368300ec | 646 | } |
201710861 | 0:78de368300ec | 647 | |
201710861 | 0:78de368300ec | 648 | PC.printf("%s\r\n", arr_time); |
201710861 | 0:78de368300ec | 649 | |
201710861 | 0:78de368300ec | 650 | } |
201710861 | 0:78de368300ec | 651 | |
201710861 | 0:78de368300ec | 652 | void writeTime(){ |
201710861 | 0:78de368300ec | 653 | getTime(); |
201710861 | 0:78de368300ec | 654 | lcd.locate(0, 16); |
201710861 | 0:78de368300ec | 655 | lcd.printf("%s", arr_time); |
201710861 | 0:78de368300ec | 656 | thread_sleep_for(500); |
201710861 | 0:78de368300ec | 657 | } |
201710861 | 0:78de368300ec | 658 | |
201710861 | 0:78de368300ec | 659 | |
201710861 | 0:78de368300ec | 660 | //===================================== |
201710861 | 0:78de368300ec | 661 | //JOYSTICK |
201710861 | 0:78de368300ec | 662 | |
201710861 | 0:78de368300ec | 663 | void ISR_center(){ |
201710861 | 0:78de368300ec | 664 | switch(mbedMode){ |
201710861 | 0:78de368300ec | 665 | case MAIN: |
201710861 | 0:78de368300ec | 666 | main_center = 1; |
201710861 | 0:78de368300ec | 667 | break; |
201710861 | 0:78de368300ec | 668 | case COM: |
201710861 | 0:78de368300ec | 669 | com_center = 1; |
201710861 | 0:78de368300ec | 670 | break; |
201710861 | 0:78de368300ec | 671 | case ALARM: |
201710861 | 0:78de368300ec | 672 | alarm_center = 1; |
201710861 | 0:78de368300ec | 673 | break; |
201710861 | 0:78de368300ec | 674 | case ALARM_SET: |
201710861 | 0:78de368300ec | 675 | alarm_set_center = 1; |
201710861 | 0:78de368300ec | 676 | break; |
201710861 | 0:78de368300ec | 677 | case PERM: |
201710861 | 0:78de368300ec | 678 | perm_center = 1; |
201710861 | 0:78de368300ec | 679 | break; |
201710861 | 0:78de368300ec | 680 | default: |
201710861 | 0:78de368300ec | 681 | break; |
201710861 | 0:78de368300ec | 682 | } |
201710861 | 0:78de368300ec | 683 | } |
201710861 | 0:78de368300ec | 684 | |
201710861 | 0:78de368300ec | 685 | void ISR_up(){ |
201710861 | 0:78de368300ec | 686 | switch(mbedMode){ |
201710861 | 0:78de368300ec | 687 | case ALARM_SET: |
201710861 | 0:78de368300ec | 688 | alarm_set_up = 1; |
201710861 | 0:78de368300ec | 689 | break; |
201710861 | 0:78de368300ec | 690 | default: |
201710861 | 0:78de368300ec | 691 | break; |
201710861 | 0:78de368300ec | 692 | } |
201710861 | 0:78de368300ec | 693 | } |
201710861 | 0:78de368300ec | 694 | |
201710861 | 0:78de368300ec | 695 | void ISR_down(){ |
201710861 | 0:78de368300ec | 696 | switch(mbedMode){ |
201710861 | 0:78de368300ec | 697 | case ALARM_SET: |
201710861 | 0:78de368300ec | 698 | alarm_set_down = 1; |
201710861 | 0:78de368300ec | 699 | break; |
201710861 | 0:78de368300ec | 700 | default: |
201710861 | 0:78de368300ec | 701 | break; |
201710861 | 0:78de368300ec | 702 | } |
201710861 | 0:78de368300ec | 703 | } |
201710861 | 0:78de368300ec | 704 | |
201710861 | 0:78de368300ec | 705 | void ISR_left(){ |
201710861 | 0:78de368300ec | 706 | switch(mbedMode){ |
201710861 | 0:78de368300ec | 707 | case COM: |
201710861 | 0:78de368300ec | 708 | com_left = 1; |
201710861 | 0:78de368300ec | 709 | break; |
201710861 | 0:78de368300ec | 710 | case ALARM: |
201710861 | 0:78de368300ec | 711 | alarm_left = 1; |
201710861 | 0:78de368300ec | 712 | break; |
201710861 | 0:78de368300ec | 713 | case ALARM_SET: |
201710861 | 0:78de368300ec | 714 | alarm_set_left = 1; |
201710861 | 0:78de368300ec | 715 | break; |
201710861 | 0:78de368300ec | 716 | case PERM: |
201710861 | 0:78de368300ec | 717 | perm_left = 1; |
201710861 | 0:78de368300ec | 718 | break; |
201710861 | 0:78de368300ec | 719 | default: |
201710861 | 0:78de368300ec | 720 | break; |
201710861 | 0:78de368300ec | 721 | } |
201710861 | 0:78de368300ec | 722 | } |
201710861 | 0:78de368300ec | 723 | |
201710861 | 0:78de368300ec | 724 | void ISR_rite(){ |
201710861 | 0:78de368300ec | 725 | switch(mbedMode){ |
201710861 | 0:78de368300ec | 726 | case COM: |
201710861 | 0:78de368300ec | 727 | com_right = 1; |
201710861 | 0:78de368300ec | 728 | break; |
201710861 | 0:78de368300ec | 729 | case ALARM_SET: |
201710861 | 0:78de368300ec | 730 | alarm_set_right = 1; |
201710861 | 0:78de368300ec | 731 | break; |
201710861 | 0:78de368300ec | 732 | case ALARM: |
201710861 | 0:78de368300ec | 733 | alarm_right = 1; |
201710861 | 0:78de368300ec | 734 | break; |
201710861 | 0:78de368300ec | 735 | case PERM: |
201710861 | 0:78de368300ec | 736 | perm_right = 1; |
201710861 | 0:78de368300ec | 737 | break; |
201710861 | 0:78de368300ec | 738 | default: |
201710861 | 0:78de368300ec | 739 | break; |
201710861 | 0:78de368300ec | 740 | } |
201710861 | 0:78de368300ec | 741 | } |
201710861 | 0:78de368300ec | 742 | |
201710861 | 0:78de368300ec | 743 | void ISR_sw2(){ |
201710861 | 0:78de368300ec | 744 | switch(mbedMode){ |
201710861 | 0:78de368300ec | 745 | case COM: |
201710861 | 0:78de368300ec | 746 | case ALARM: |
201710861 | 0:78de368300ec | 747 | case ALARM_SET: |
201710861 | 0:78de368300ec | 748 | case ALARM_SOUND: |
201710861 | 0:78de368300ec | 749 | case ALARM_LED: |
201710861 | 0:78de368300ec | 750 | case ALARM_SOUND_LED: |
201710861 | 0:78de368300ec | 751 | case PERM: |
201710861 | 0:78de368300ec | 752 | case PERM_SOUND: |
201710861 | 0:78de368300ec | 753 | case PERM_LED: |
201710861 | 0:78de368300ec | 754 | case PERM_SOUND_LED: |
201710861 | 0:78de368300ec | 755 | button_back = 1; |
201710861 | 0:78de368300ec | 756 | break; |
201710861 | 0:78de368300ec | 757 | default: |
201710861 | 0:78de368300ec | 758 | break; |
201710861 | 0:78de368300ec | 759 | } |
201710861 | 0:78de368300ec | 760 | } |
201710861 | 0:78de368300ec | 761 | |
201710861 | 0:78de368300ec | 762 | void ISR_sw3(){ |
201710861 | 0:78de368300ec | 763 | switch(mbedMode){ |
201710861 | 0:78de368300ec | 764 | case PERM_SOUND: |
201710861 | 0:78de368300ec | 765 | case PERM_LED: |
201710861 | 0:78de368300ec | 766 | case PERM_SOUND_LED: |
201710861 | 0:78de368300ec | 767 | perm_stop = 1; |
201710861 | 0:78de368300ec | 768 | break; |
201710861 | 0:78de368300ec | 769 | default: |
201710861 | 0:78de368300ec | 770 | break; |
201710861 | 0:78de368300ec | 771 | } |
201710861 | 0:78de368300ec | 772 | } |
201710861 | 0:78de368300ec | 773 | |
201710861 | 0:78de368300ec | 774 | void joyInit(){ |
201710861 | 0:78de368300ec | 775 | up.rise(&ISR_up); |
201710861 | 0:78de368300ec | 776 | down.rise(&ISR_down); |
201710861 | 0:78de368300ec | 777 | left.rise(&ISR_left); |
201710861 | 0:78de368300ec | 778 | rite.rise(&ISR_rite); |
201710861 | 0:78de368300ec | 779 | center.rise(&ISR_center); |
201710861 | 0:78de368300ec | 780 | |
201710861 | 0:78de368300ec | 781 | sw2.fall(&ISR_sw2); |
201710861 | 0:78de368300ec | 782 | sw3.fall(&ISR_sw3); |
201710861 | 0:78de368300ec | 783 | } |
201710861 | 0:78de368300ec | 784 | |
201710861 | 0:78de368300ec | 785 | void perm_Stop(){ |
201710861 | 0:78de368300ec | 786 | mbedMode = COM; |
201710861 | 0:78de368300ec | 787 | tempMode = PERM; |
201710861 | 0:78de368300ec | 788 | perm_stop = 1; |
201710861 | 0:78de368300ec | 789 | writeLcdCLS("Permanent Stop...", 0, 16); |
201710861 | 0:78de368300ec | 790 | perm_trans_status = 0; |
201710861 | 0:78de368300ec | 791 | perm_trans_mode = 0; |
201710861 | 0:78de368300ec | 792 | thread_sleep_for(1500); |
201710861 | 0:78de368300ec | 793 | lcd.cls(); |
201710861 | 0:78de368300ec | 794 | } |
201710861 | 0:78de368300ec | 795 | |
201710861 | 0:78de368300ec | 796 | //================================ NodeMCU program ================================ |
201710861 | 0:78de368300ec | 797 | NodeMCU_PGM http_server[] = { |
201710861 | 0:78de368300ec | 798 | "", 1, |
201710861 | 0:78de368300ec | 799 | "wifi.setmode(wifi.STATION)", 1, |
201710861 | 0:78de368300ec | 800 | "", 1, |
201710861 | 0:78de368300ec | 801 | "station_cfg={}", 1, |
201710861 | 0:78de368300ec | 802 | "station_cfg.ssid=\"IP_S\"", 1, |
201710861 | 0:78de368300ec | 803 | "station_cfg.pwd=\"1kokrjg3un7i4\"", 1, |
201710861 | 0:78de368300ec | 804 | "station_cfg.save=false", 1, |
201710861 | 0:78de368300ec | 805 | "wifi.sta.config(station_cfg)", 1, |
201710861 | 0:78de368300ec | 806 | "", 1, |
201710861 | 0:78de368300ec | 807 | "wifi.sta.connect()", 80, |
201710861 | 0:78de368300ec | 808 | "", 1, |
201710861 | 0:78de368300ec | 809 | "print(wifi.sta.status())", 1, |
201710861 | 0:78de368300ec | 810 | "print(wifi.sta.getip())", 1, |
201710861 | 0:78de368300ec | 811 | "", 1, |
201710861 | 0:78de368300ec | 812 | "", 1, |
201710861 | 0:78de368300ec | 813 | "http_resp = \"HTTP/1.0 200 OK\\r\\nContent-Type: text/html\\r\\n\\r\\n\"", 1, |
201710861 | 0:78de368300ec | 814 | "html_1 = \"<!DOCTYPE html>\"", 1, |
201710861 | 0:78de368300ec | 815 | "html_2 = \"<html lang=\\\"ko\\\">\"", 1, |
201710861 | 0:78de368300ec | 816 | "html_3 = \"<head>\"", 1, |
201710861 | 0:78de368300ec | 817 | "html_4 = \" <meta charset=\\\"UTF-8\\\">\"", 1, |
201710861 | 0:78de368300ec | 818 | "html_5 = \" <title>clock1</title>\"", 1, |
201710861 | 0:78de368300ec | 819 | "html_6 = \"</head>\"", 1, |
201710861 | 0:78de368300ec | 820 | "html_7 = \"<body>\"", 1, |
201710861 | 0:78de368300ec | 821 | "html_8 = \" <h1 id=\\\"clock\\\" style=\\\"color:black;\\\">clock</h1>\"", 1, |
201710861 | 0:78de368300ec | 822 | "", 1, |
201710861 | 0:78de368300ec | 823 | "html_9 = \" <script>\"", 1, |
201710861 | 0:78de368300ec | 824 | "html_10 = \" function clock() {\"", 1, |
201710861 | 0:78de368300ec | 825 | "html_11 = \" var time = new Date();\"", 1, |
201710861 | 0:78de368300ec | 826 | "", 1, |
201710861 | 0:78de368300ec | 827 | "html_12 = \" var hours = time.getHours();\"", 1, |
201710861 | 0:78de368300ec | 828 | "html_13 = \" var minutes = time.getMinutes();\"", 1, |
201710861 | 0:78de368300ec | 829 | "html_14 = \" var seconds = time.getSeconds();\"", 1, |
201710861 | 0:78de368300ec | 830 | "", 1, |
201710861 | 0:78de368300ec | 831 | "html_text = \" Target.innerText = `${hours < 10 ? `0${hours}` : hours}:${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`;\"", 1, |
201710861 | 0:78de368300ec | 832 | "html_15 = \" location.replace(\\\"http://172.20.10.6\\\"+\\\"/?time=\\\"+hours.toString()+\\\":\\\"+minutes.toString()+\\\":\\\"+seconds.toString());\"", 1, |
201710861 | 0:78de368300ec | 833 | "", 1, |
201710861 | 0:78de368300ec | 834 | "html_16 = \" }\"", 1, |
201710861 | 0:78de368300ec | 835 | "html_17 = \" setInterval(clock, 1000);\"", 1, |
201710861 | 0:78de368300ec | 836 | "html_18 = \" </script>\"", 1, |
201710861 | 0:78de368300ec | 837 | "html_19 = \"</body>\"", 1, |
201710861 | 0:78de368300ec | 838 | "html_20 = \"</html>\"", 1, |
201710861 | 0:78de368300ec | 839 | "", 1, |
201710861 | 0:78de368300ec | 840 | "", 1, |
201710861 | 0:78de368300ec | 841 | "srv = net.createServer(net.TCP)", 1, |
201710861 | 0:78de368300ec | 842 | "srv:listen(80, function(conn)", 1, |
201710861 | 0:78de368300ec | 843 | " conn:on(\"receive\", function(sck, payload)", 1, |
201710861 | 0:78de368300ec | 844 | " print(payload)", 1, |
201710861 | 0:78de368300ec | 845 | " sck:send(http_resp)", 1, |
201710861 | 0:78de368300ec | 846 | " sck:send(html_1)", 1, |
201710861 | 0:78de368300ec | 847 | " sck:send(html_2)", 1, |
201710861 | 0:78de368300ec | 848 | " sck:send(html_3)", 1, |
201710861 | 0:78de368300ec | 849 | " sck:send(html_4)", 1, |
201710861 | 0:78de368300ec | 850 | " sck:send(html_5)", 1, |
201710861 | 0:78de368300ec | 851 | " sck:send(html_6)", 1, |
201710861 | 0:78de368300ec | 852 | " sck:send(html_7)", 1, |
201710861 | 0:78de368300ec | 853 | " sck:send(html_8)", 1, |
201710861 | 0:78de368300ec | 854 | " sck:send(html_9)", 1, |
201710861 | 0:78de368300ec | 855 | " sck:send(html_10)", 1, |
201710861 | 0:78de368300ec | 856 | " sck:send(html_11)", 1, |
201710861 | 0:78de368300ec | 857 | " sck:send(html_12)", 1, |
201710861 | 0:78de368300ec | 858 | " sck:send(html_13)", 1, |
201710861 | 0:78de368300ec | 859 | " sck:send(html_14)", 1, |
201710861 | 0:78de368300ec | 860 | //" sck:send(html_text)", 1, |
201710861 | 0:78de368300ec | 861 | " sck:send(html_15)", 1, |
201710861 | 0:78de368300ec | 862 | " sck:send(html_16)", 1, |
201710861 | 0:78de368300ec | 863 | " sck:send(html_17)", 1, |
201710861 | 0:78de368300ec | 864 | " sck:send(html_18)", 1, |
201710861 | 0:78de368300ec | 865 | " sck:send(html_19)", 1, |
201710861 | 0:78de368300ec | 866 | " sck:send(html_20)", 1, |
201710861 | 0:78de368300ec | 867 | " end)", 1, |
201710861 | 0:78de368300ec | 868 | " conn:on(\"sent\", function(sck) sck:close() end)", 1, |
201710861 | 0:78de368300ec | 869 | "end)", 1, |
201710861 | 0:78de368300ec | 870 | NULL, 0, |
201710861 | 0:78de368300ec | 871 | }; |
201710861 | 0:78de368300ec | 872 | |
201710861 | 0:78de368300ec | 873 | void receive_Data(){ |
201710861 | 0:78de368300ec | 874 | |
201710861 | 0:78de368300ec | 875 | esp_data = ESP.getc(); |
201710861 | 0:78de368300ec | 876 | |
201710861 | 0:78de368300ec | 877 | if(index < 20){ |
201710861 | 0:78de368300ec | 878 | esp_arr[index++] = esp_data; |
201710861 | 0:78de368300ec | 879 | }else if(index == 20){ |
201710861 | 0:78de368300ec | 880 | esp_arr[index] = '\0'; |
201710861 | 0:78de368300ec | 881 | } |
201710861 | 0:78de368300ec | 882 | |
201710861 | 0:78de368300ec | 883 | } |
201710861 | 0:78de368300ec | 884 | |
201710861 | 0:78de368300ec | 885 | void time_get(){ |
201710861 | 0:78de368300ec | 886 | |
201710861 | 0:78de368300ec | 887 | index = 0; |
201710861 | 0:78de368300ec | 888 | } |
201710861 | 0:78de368300ec | 889 | |
201710861 | 0:78de368300ec | 890 | void ledSet(){ |
201710861 | 0:78de368300ec | 891 | while(true){ |
201710861 | 0:78de368300ec | 892 | while(perm_trans_status || alarm_trans_status){ |
201710861 | 0:78de368300ec | 893 | led_r = 1; |
201710861 | 0:78de368300ec | 894 | led_g = 0; |
201710861 | 0:78de368300ec | 895 | thread_sleep_for(100); |
201710861 | 0:78de368300ec | 896 | led_g = 1; |
201710861 | 0:78de368300ec | 897 | thread_sleep_for(100); |
201710861 | 0:78de368300ec | 898 | } |
201710861 | 0:78de368300ec | 899 | led_r = 0; |
201710861 | 0:78de368300ec | 900 | led_g = 1; |
201710861 | 0:78de368300ec | 901 | } |
201710861 | 0:78de368300ec | 902 | } |
201710861 | 0:78de368300ec | 903 | |
201710861 | 0:78de368300ec | 904 | //========================================================================== |
201710861 | 0:78de368300ec | 905 | //main |
201710861 | 0:78de368300ec | 906 | int main(){ |
201710861 | 0:78de368300ec | 907 | |
201710861 | 0:78de368300ec | 908 | writeLcdCLS("Starting... ", 24, 6); |
201710861 | 0:78de368300ec | 909 | |
201710861 | 0:78de368300ec | 910 | ESP.baud(115200); |
201710861 | 0:78de368300ec | 911 | PC.baud(115200); |
201710861 | 0:78de368300ec | 912 | |
201710861 | 0:78de368300ec | 913 | pc.printf("\r\nReset ESP...\r\n"); |
201710861 | 0:78de368300ec | 914 | ESP_reset(); |
201710861 | 0:78de368300ec | 915 | |
201710861 | 0:78de368300ec | 916 | PC.printf("Setup ESP noecho...\r\n"); |
201710861 | 0:78de368300ec | 917 | ESP_noecho(); |
201710861 | 0:78de368300ec | 918 | |
201710861 | 0:78de368300ec | 919 | PC.printf("Execute a NodeMCU program...\r\n"); |
201710861 | 0:78de368300ec | 920 | ESP_call_multi(http_server); |
201710861 | 0:78de368300ec | 921 | |
201710861 | 0:78de368300ec | 922 | PC.printf("\r\nESP receive mode...\r\n"); |
201710861 | 0:78de368300ec | 923 | ESP.attach(receive_Data, Serial::RxIrq); |
201710861 | 0:78de368300ec | 924 | |
201710861 | 0:78de368300ec | 925 | ticker.attach(&time_get, 1.0); |
201710861 | 0:78de368300ec | 926 | |
201710861 | 0:78de368300ec | 927 | clockInit(); |
201710861 | 0:78de368300ec | 928 | thread_led.start(ledSet); |
201710861 | 0:78de368300ec | 929 | thread_lcd.start(lcdStart); |
201710861 | 0:78de368300ec | 930 | joyInit(); |
201710861 | 0:78de368300ec | 931 | |
201710861 | 0:78de368300ec | 932 | thread_sleep_for(500); |
201710861 | 0:78de368300ec | 933 | |
201710861 | 0:78de368300ec | 934 | while(true){ |
201710861 | 0:78de368300ec | 935 | |
201710861 | 0:78de368300ec | 936 | } |
201710861 | 0:78de368300ec | 937 | } |