Program code for the project

Dependencies:   4DGL-uLCD-SE SDAlarm mbed SDFileSystem SoundAPI mbed-rtos

Committer:
megnor3
Date:
Wed Dec 06 16:41:55 2017 +0000
Revision:
0:ecc736db2e40
Child:
1:049d9c16aa35
Test Version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
megnor3 0:ecc736db2e40 1 #include "mbed.h"
megnor3 0:ecc736db2e40 2 #include <ttmath.h>
megnor3 0:ecc736db2e40 3 #include "PinDetect.h"
megnor3 0:ecc736db2e40 4 #include "uLCD_4DGL.h"
megnor3 0:ecc736db2e40 5
megnor3 0:ecc736db2e40 6 Serial pc(USBTX, USBRX);
megnor3 0:ecc736db2e40 7 Serial esp(p28, p27); // tx, rx
megnor3 0:ecc736db2e40 8 DigitalOut reset(p26);
megnor3 0:ecc736db2e40 9 DigitalOut led1(LED1);
megnor3 0:ecc736db2e40 10 DigitalOut led4(LED4);
megnor3 0:ecc736db2e40 11 Timer t;
megnor3 0:ecc736db2e40 12
megnor3 0:ecc736db2e40 13 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
megnor3 0:ecc736db2e40 14
megnor3 0:ecc736db2e40 15 PinDetect pb1(p17);
megnor3 0:ecc736db2e40 16 PinDetect pb2(p18);
megnor3 0:ecc736db2e40 17 PinDetect pb3(p19);
megnor3 0:ecc736db2e40 18 PinDetect pb4(p20);
megnor3 0:ecc736db2e40 19
megnor3 0:ecc736db2e40 20 // Global count variable
megnor3 0:ecc736db2e40 21
megnor3 0:ecc736db2e40 22 int volatile hours=12;
megnor3 0:ecc736db2e40 23 int volatile minutes=0;
megnor3 0:ecc736db2e40 24 bool volatile alarmSet=false;
megnor3 0:ecc736db2e40 25 int volatile alarmTimeSet = 0;
megnor3 0:ecc736db2e40 26 int volatile timeDisp=0;
megnor3 0:ecc736db2e40 27 bool volatile AMPM=false; //False AM, true PM
megnor3 0:ecc736db2e40 28
megnor3 0:ecc736db2e40 29 int count,ended,timeout;
megnor3 0:ecc736db2e40 30 char buf[2024];
megnor3 0:ecc736db2e40 31 char snd[1024];
megnor3 0:ecc736db2e40 32 char ssid[32] = "MEwifi"; // enter WiFi router ssid inside the quotes
megnor3 0:ecc736db2e40 33 char pwd [32] = "fxyh5453"; // enter WiFi router password inside the quotes
megnor3 0:ecc736db2e40 34 bool timeReady = false;
megnor3 0:ecc736db2e40 35
megnor3 0:ecc736db2e40 36 char curTime[20];
megnor3 0:ecc736db2e40 37
megnor3 0:ecc736db2e40 38 void SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate(), getTime();
megnor3 0:ecc736db2e40 39 int timeFromResponse();
megnor3 0:ecc736db2e40 40 void dev_recv()
megnor3 0:ecc736db2e40 41 {
megnor3 0:ecc736db2e40 42 led1 = !led1;
megnor3 0:ecc736db2e40 43 while(esp.readable()) {
megnor3 0:ecc736db2e40 44 pc.putc(esp.getc());
megnor3 0:ecc736db2e40 45 }
megnor3 0:ecc736db2e40 46 }
megnor3 0:ecc736db2e40 47
megnor3 0:ecc736db2e40 48 void pc_recv()
megnor3 0:ecc736db2e40 49 {
megnor3 0:ecc736db2e40 50 led4 = !led4;
megnor3 0:ecc736db2e40 51 while(pc.readable()) {
megnor3 0:ecc736db2e40 52 esp.putc(pc.getc());
megnor3 0:ecc736db2e40 53 }
megnor3 0:ecc736db2e40 54 }
megnor3 0:ecc736db2e40 55
megnor3 0:ecc736db2e40 56 void pb1_hit_callback (void) {
megnor3 0:ecc736db2e40 57 count++;
megnor3 0:ecc736db2e40 58 hours++;
megnor3 0:ecc736db2e40 59 if(hours>12){ hours= 1; AMPM=!AMPM;}
megnor3 0:ecc736db2e40 60
megnor3 0:ecc736db2e40 61
megnor3 0:ecc736db2e40 62 uLCD.cls();
megnor3 0:ecc736db2e40 63 uLCD.printf("\nAlarm Time %d : %d\nTime %d",hours, minutes, timeDisp);
megnor3 0:ecc736db2e40 64 }
megnor3 0:ecc736db2e40 65
megnor3 0:ecc736db2e40 66 void pb2_hit_callback (void) {
megnor3 0:ecc736db2e40 67 count++;
megnor3 0:ecc736db2e40 68 minutes++;
megnor3 0:ecc736db2e40 69 if(minutes>59) minutes= 0;
megnor3 0:ecc736db2e40 70 uLCD.cls();
megnor3 0:ecc736db2e40 71 uLCD.printf("\nAlarm Time %d : %d\nTime %d",hours, minutes, timeDisp);
megnor3 0:ecc736db2e40 72 }
megnor3 0:ecc736db2e40 73
megnor3 0:ecc736db2e40 74 void pb3_hit_callback (void) {
megnor3 0:ecc736db2e40 75 alarmSet=true;
megnor3 0:ecc736db2e40 76 alarmTimeSet=60*60*hours+60*minutes;
megnor3 0:ecc736db2e40 77 uLCD.cls();
megnor3 0:ecc736db2e40 78 uLCD.printf("\nAlarm Time %d : %d\nTime %d\nAlarm Turned On",hours, minutes, timeDisp);
megnor3 0:ecc736db2e40 79 }
megnor3 0:ecc736db2e40 80
megnor3 0:ecc736db2e40 81 void pb4_hit_callback (void) {
megnor3 0:ecc736db2e40 82 alarmSet=false;
megnor3 0:ecc736db2e40 83 uLCD.cls();
megnor3 0:ecc736db2e40 84 uLCD.printf("\nAlarm Time %d : %d\nTime %d\nAlarm Turned Off",hours, minutes, timeDisp);
megnor3 0:ecc736db2e40 85 }
megnor3 0:ecc736db2e40 86
megnor3 0:ecc736db2e40 87 int main()
megnor3 0:ecc736db2e40 88 {
megnor3 0:ecc736db2e40 89 pb1.mode(PullUp);
megnor3 0:ecc736db2e40 90 pb2.mode(PullUp);
megnor3 0:ecc736db2e40 91 pb3.mode(PullUp);
megnor3 0:ecc736db2e40 92 pb4.mode(PullUp);
megnor3 0:ecc736db2e40 93
megnor3 0:ecc736db2e40 94 wait(.001);
megnor3 0:ecc736db2e40 95 // Setup Interrupt callback function for a pb hit
megnor3 0:ecc736db2e40 96 pb1.attach_deasserted(&pb1_hit_callback);
megnor3 0:ecc736db2e40 97 pb2.attach_deasserted(&pb2_hit_callback);
megnor3 0:ecc736db2e40 98 pb3.attach_deasserted(&pb3_hit_callback);
megnor3 0:ecc736db2e40 99 pb4.attach_deasserted(&pb4_hit_callback);
megnor3 0:ecc736db2e40 100
megnor3 0:ecc736db2e40 101 pb1.setSampleFrequency();
megnor3 0:ecc736db2e40 102 pb2.setSampleFrequency();
megnor3 0:ecc736db2e40 103 pb3.setSampleFrequency();
megnor3 0:ecc736db2e40 104 pb4.setSampleFrequency();
megnor3 0:ecc736db2e40 105
megnor3 0:ecc736db2e40 106 reset=0; //hardware reset for 8266
megnor3 0:ecc736db2e40 107 pc.baud(9600); // set what you want here depending on your terminal program speed
megnor3 0:ecc736db2e40 108 pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r");
megnor3 0:ecc736db2e40 109 wait(0.5);
megnor3 0:ecc736db2e40 110 reset=1;
megnor3 0:ecc736db2e40 111 timeout=2;
megnor3 0:ecc736db2e40 112 getreply();
megnor3 0:ecc736db2e40 113
megnor3 0:ecc736db2e40 114 esp.baud(9600); // change this to the new ESP8266 baudrate if it is changed at any time.
megnor3 0:ecc736db2e40 115
megnor3 0:ecc736db2e40 116 //ESPsetbaudrate(); //****************** include this routine to set a different ESP8266 baudrate ******************
megnor3 0:ecc736db2e40 117
megnor3 0:ecc736db2e40 118 ESPconfig(); //****************** include Config to set the ESP8266 configuration ***********************
megnor3 0:ecc736db2e40 119 getTime();
megnor3 0:ecc736db2e40 120 pc.printf("%s", buf);
megnor3 0:ecc736db2e40 121
megnor3 0:ecc736db2e40 122 timeDisp = timeFromResponse();
megnor3 0:ecc736db2e40 123 set_time(timeDisp);
megnor3 0:ecc736db2e40 124 pc.printf("%d", timeDisp);
megnor3 0:ecc736db2e40 125 timeDisp = timeDisp%86400;
megnor3 0:ecc736db2e40 126 while (1) {
megnor3 0:ecc736db2e40 127
megnor3 0:ecc736db2e40 128 //timeDisp++;
megnor3 0:ecc736db2e40 129 if(alarmSet&&int(alarmTimeSet/60)==int(timeDisp/60)){
megnor3 0:ecc736db2e40 130 uLCD.cls();
megnor3 0:ecc736db2e40 131 uLCD.printf("ALARM");
megnor3 0:ecc736db2e40 132 }
megnor3 0:ecc736db2e40 133
megnor3 0:ecc736db2e40 134 wait(.5);
megnor3 0:ecc736db2e40 135 }
megnor3 0:ecc736db2e40 136
megnor3 0:ecc736db2e40 137 }
megnor3 0:ecc736db2e40 138
megnor3 0:ecc736db2e40 139 // Sets new ESP8266 baurate, change the esp.baud(xxxxx) to match your new setting once this has been executed
megnor3 0:ecc736db2e40 140 void ESPsetbaudrate()
megnor3 0:ecc736db2e40 141 {
megnor3 0:ecc736db2e40 142 strcpy(snd, "AT+CIOBAUD=115200\r\n"); // change the numeric value to the required baudrate
megnor3 0:ecc736db2e40 143 SendCMD();
megnor3 0:ecc736db2e40 144 }
megnor3 0:ecc736db2e40 145
megnor3 0:ecc736db2e40 146 // +++++++++++++++++++++++++++++++++ This is for ESP8266 config only, run this once to set up the ESP8266 +++++++++++++++
megnor3 0:ecc736db2e40 147 void ESPconfig()
megnor3 0:ecc736db2e40 148 {
megnor3 0:ecc736db2e40 149
megnor3 0:ecc736db2e40 150 wait(5);
megnor3 0:ecc736db2e40 151 pc.printf("\f---------- Starting ESP Config ----------\r\n\n");
megnor3 0:ecc736db2e40 152 strcpy(snd,".\r\n.\r\n");
megnor3 0:ecc736db2e40 153 SendCMD();
megnor3 0:ecc736db2e40 154 wait(1);
megnor3 0:ecc736db2e40 155 pc.printf("---------- Reset & get Firmware ----------\r\n");
megnor3 0:ecc736db2e40 156 strcpy(snd,"node.restart()\r\n");
megnor3 0:ecc736db2e40 157 SendCMD();
megnor3 0:ecc736db2e40 158 timeout=5;
megnor3 0:ecc736db2e40 159 getreply();
megnor3 0:ecc736db2e40 160 pc.printf(buf);
megnor3 0:ecc736db2e40 161
megnor3 0:ecc736db2e40 162
megnor3 0:ecc736db2e40 163 // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station)
megnor3 0:ecc736db2e40 164 pc.printf("\n---------- Setting Mode ----------\r\n");
megnor3 0:ecc736db2e40 165 strcpy(snd, "wifi.setmode(wifi.STATION)\r\n");
megnor3 0:ecc736db2e40 166 SendCMD();
megnor3 0:ecc736db2e40 167 timeout=4;
megnor3 0:ecc736db2e40 168 getreply();
megnor3 0:ecc736db2e40 169 pc.printf(buf);
megnor3 0:ecc736db2e40 170
megnor3 0:ecc736db2e40 171 wait(1);
megnor3 0:ecc736db2e40 172
megnor3 0:ecc736db2e40 173 strcpy(snd, "wifi.sta.config(\"");
megnor3 0:ecc736db2e40 174 strcat(snd, ssid);
megnor3 0:ecc736db2e40 175 strcat(snd, "\",\"");
megnor3 0:ecc736db2e40 176 strcat(snd, pwd);
megnor3 0:ecc736db2e40 177 strcat(snd, "\")\r\n");
megnor3 0:ecc736db2e40 178 SendCMD();
megnor3 0:ecc736db2e40 179 timeout=10;
megnor3 0:ecc736db2e40 180 getreply();
megnor3 0:ecc736db2e40 181 pc.printf(buf);
megnor3 0:ecc736db2e40 182
megnor3 0:ecc736db2e40 183 wait(1);
megnor3 0:ecc736db2e40 184
megnor3 0:ecc736db2e40 185 pc.printf("\n---------- Get IP's ----------\r\n");
megnor3 0:ecc736db2e40 186 strcpy(snd, "print(wifi.sta.getip())\r\n");
megnor3 0:ecc736db2e40 187 SendCMD();
megnor3 0:ecc736db2e40 188 timeout=3;
megnor3 0:ecc736db2e40 189 getreply();
megnor3 0:ecc736db2e40 190 pc.printf(buf);
megnor3 0:ecc736db2e40 191
megnor3 0:ecc736db2e40 192 wait(1);
megnor3 0:ecc736db2e40 193
megnor3 0:ecc736db2e40 194 pc.printf("\n---------- Get Connection Status ----------\r\n");
megnor3 0:ecc736db2e40 195 strcpy(snd, "print(wifi.sta.status())\r\n");
megnor3 0:ecc736db2e40 196 SendCMD();
megnor3 0:ecc736db2e40 197 timeout=5;
megnor3 0:ecc736db2e40 198 getreply();
megnor3 0:ecc736db2e40 199
megnor3 0:ecc736db2e40 200 }
megnor3 0:ecc736db2e40 201 void getTime() {
megnor3 0:ecc736db2e40 202 wait(1);
megnor3 0:ecc736db2e40 203 strcpy(snd,"sk=net.createConnection(net.TCP, 0)\r\n");
megnor3 0:ecc736db2e40 204 SendCMD();
megnor3 0:ecc736db2e40 205 timeout=3;
megnor3 0:ecc736db2e40 206 getreply();
megnor3 0:ecc736db2e40 207
megnor3 0:ecc736db2e40 208 strcpy(snd,"sk:on(\"receive\", function(sck, c) print(c) end )\r\n");
megnor3 0:ecc736db2e40 209 SendCMD();
megnor3 0:ecc736db2e40 210 timeout=3;
megnor3 0:ecc736db2e40 211 getreply();
megnor3 0:ecc736db2e40 212
megnor3 0:ecc736db2e40 213 strcpy(snd,"sk:connect(80,\"api.timezonedb.com\")\r\n");
megnor3 0:ecc736db2e40 214 SendCMD();
megnor3 0:ecc736db2e40 215 timeout=3;
megnor3 0:ecc736db2e40 216 getreply();
megnor3 0:ecc736db2e40 217 wait(1);
megnor3 0:ecc736db2e40 218
megnor3 0:ecc736db2e40 219 strcpy(snd, "sk:send(\"GET /v2/get-time-zone?key=ONL9KGITMG1G&format=json&by=zone&zone=America/New_York HTTP/1.1\\r\\nHost: api.timezonedb.com\\r\\nConnection: keep-alive\\r\\nAccept: */*\\r\\n\\r\\n\")\r\n");
megnor3 0:ecc736db2e40 220 SendCMD();
megnor3 0:ecc736db2e40 221 timeout=17;
megnor3 0:ecc736db2e40 222 getreply();
megnor3 0:ecc736db2e40 223
megnor3 0:ecc736db2e40 224 timeReady = true;
megnor3 0:ecc736db2e40 225
megnor3 0:ecc736db2e40 226 }
megnor3 0:ecc736db2e40 227 void SendCMD()
megnor3 0:ecc736db2e40 228 {
megnor3 0:ecc736db2e40 229 esp.printf("%s", snd);
megnor3 0:ecc736db2e40 230 }
megnor3 0:ecc736db2e40 231
megnor3 0:ecc736db2e40 232 void getreply()
megnor3 0:ecc736db2e40 233 {
megnor3 0:ecc736db2e40 234 memset(buf, '\0', sizeof(buf));
megnor3 0:ecc736db2e40 235 t.start();
megnor3 0:ecc736db2e40 236 ended=0;
megnor3 0:ecc736db2e40 237 count=0;
megnor3 0:ecc736db2e40 238 while(!ended) {
megnor3 0:ecc736db2e40 239 if(esp.readable()) {
megnor3 0:ecc736db2e40 240 buf[count] = esp.getc();
megnor3 0:ecc736db2e40 241 count++;
megnor3 0:ecc736db2e40 242 }
megnor3 0:ecc736db2e40 243 if(t.read() > timeout) {
megnor3 0:ecc736db2e40 244 ended = 1;
megnor3 0:ecc736db2e40 245 t.stop();
megnor3 0:ecc736db2e40 246 t.reset();
megnor3 0:ecc736db2e40 247 }
megnor3 0:ecc736db2e40 248 }
megnor3 0:ecc736db2e40 249 }
megnor3 0:ecc736db2e40 250
megnor3 0:ecc736db2e40 251 int timeFromResponse() {
megnor3 0:ecc736db2e40 252 char * timestamp;
megnor3 0:ecc736db2e40 253 timestamp = strstr(buf, "\"timestamp\":");
megnor3 0:ecc736db2e40 254
megnor3 0:ecc736db2e40 255 timestamp = timestamp + 12;
megnor3 0:ecc736db2e40 256 int count = 0;
megnor3 0:ecc736db2e40 257
megnor3 0:ecc736db2e40 258 while(timestamp[count] != ',') {
megnor3 0:ecc736db2e40 259 count++;
megnor3 0:ecc736db2e40 260 }
megnor3 0:ecc736db2e40 261
megnor3 0:ecc736db2e40 262 strncpy(curTime, timestamp, count);
megnor3 0:ecc736db2e40 263 return atoi(curTime);
megnor3 0:ecc736db2e40 264 }