This code creates a WiFi DoorLock

Dependencies:   4DGL-uLCD-SE ESP8266-WEB-Mbed-LPC1768-Controller Servo mbed

Fork of ESP8266-WEB-Mbed-LPC1768-Controller by jim hamblen

Committer:
twmeares
Date:
Fri Oct 23 10:55:38 2015 +0000
Revision:
5:3a405e2f4ad1
Parent:
4:40dd020463ea
IoT Doorlock

Who changed what in which revision?

UserRevisionLine numberNew contents of line
star297 0:e2a155f50119 1 // ESP8266 Static page WEB server to control Mbed
twmeares 5:3a405e2f4ad1 2 // http://192.168.43.200
star297 0:e2a155f50119 3
star297 0:e2a155f50119 4 #include "mbed.h"
twmeares 5:3a405e2f4ad1 5 #include "Servo.h"
twmeares 5:3a405e2f4ad1 6 #include "uLCD_4DGL.h"
star297 0:e2a155f50119 7
star297 0:e2a155f50119 8 Serial pc(USBTX, USBRX);
twmeares 5:3a405e2f4ad1 9 Serial esp(p9, p10); // tx, rx
twmeares 5:3a405e2f4ad1 10 uLCD_4DGL lcd(p28, p27, p29);
star297 0:e2a155f50119 11
twmeares 5:3a405e2f4ad1 12 Servo door_lock(p22);
twmeares 5:3a405e2f4ad1 13 int locked = 0;
star297 0:e2a155f50119 14
star297 0:e2a155f50119 15
star297 0:e2a155f50119 16 Timer t1;
star297 1:71ed1afbf344 17 Timer t2;
star297 1:71ed1afbf344 18
star297 1:71ed1afbf344 19 struct tm t;
star297 0:e2a155f50119 20
star297 3:f7febfa77784 21 int bufflen, DataRX, count, getcount, replycount, servreq, timeout;
star297 2:d4c6bc0f2dc4 22 int bufl, ipdLen, linkID, weberror, webcounter;
4180_1 4:40dd020463ea 23 float temperature, AdcIn, Ht;
star297 0:e2a155f50119 24 float R1=100000, R2=10000; // resistor values to give a 10:1 reduction of measured AnalogIn voltage
star297 0:e2a155f50119 25 char Vcc[10];
star297 0:e2a155f50119 26 char Temp[10];
star297 0:e2a155f50119 27 char temp[10];
star297 2:d4c6bc0f2dc4 28 char webcount[8];
star297 3:f7febfa77784 29 char lasthit[30];
star297 0:e2a155f50119 30 char timebuf[30];
star297 0:e2a155f50119 31 char type[16];
star297 0:e2a155f50119 32 char type1[16];
star297 0:e2a155f50119 33 char channel[2];
star297 3:f7febfa77784 34 char cmdbuff[32];
4180_1 4:40dd020463ea 35 char replybuff[1024];
star297 0:e2a155f50119 36 char webdata[1024]; // This may need to be bigger depending on WEB browser used
star297 3:f7febfa77784 37 char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added
star297 0:e2a155f50119 38
star297 0:e2a155f50119 39 void SendCMD(),getreply(),ReadWebData(),startserver(),sendpage(),SendWEB(),sendcheck();
twmeares 5:3a405e2f4ad1 40 void gettime(),setRTC();
twmeares 5:3a405e2f4ad1 41 void processLock();
star297 0:e2a155f50119 42
star297 1:71ed1afbf344 43 // manual set RTC values
4180_1 4:40dd020463ea 44 int minute =00; // 0-59
4180_1 4:40dd020463ea 45 int hour =12; // 2-23
4180_1 4:40dd020463ea 46 int dayofmonth =26; // 1-31
4180_1 4:40dd020463ea 47 int month =8; // 1-12
star297 1:71ed1afbf344 48 int year =15; // last 2 digits
star297 2:d4c6bc0f2dc4 49
4180_1 4:40dd020463ea 50 int port =80; // set server port
4180_1 4:40dd020463ea 51 int SERVtimeout =5; // set server timeout in seconds in case link breaks.
4180_1 4:40dd020463ea 52
star297 0:e2a155f50119 53 // Serial Interrupt read ESP data
4180_1 4:40dd020463ea 54 void callback()
4180_1 4:40dd020463ea 55 {
4180_1 4:40dd020463ea 56 while (esp.readable()) {
4180_1 4:40dd020463ea 57 webbuff[count] = esp.getc();
4180_1 4:40dd020463ea 58 count++;
4180_1 4:40dd020463ea 59 }
4180_1 4:40dd020463ea 60 if(strlen(webbuff)>bufflen) {
4180_1 4:40dd020463ea 61 DataRX=1;
4180_1 4:40dd020463ea 62 }
star297 0:e2a155f50119 63 }
star297 0:e2a155f50119 64
4180_1 4:40dd020463ea 65 int main()
4180_1 4:40dd020463ea 66 {
star297 0:e2a155f50119 67 pc.baud(115200);
twmeares 5:3a405e2f4ad1 68 lcd.baudrate(3000000);
twmeares 5:3a405e2f4ad1 69 lcd.background_color(0);
twmeares 5:3a405e2f4ad1 70 lcd.cls();
twmeares 5:3a405e2f4ad1 71
twmeares 5:3a405e2f4ad1 72 lcd.printf("Initializing...");
4180_1 4:40dd020463ea 73
4180_1 4:40dd020463ea 74 pc.printf("\f\n\r------------ ESP8266 Hardware Reset --------------\n\r");
4180_1 4:40dd020463ea 75 wait(0.5);
4180_1 4:40dd020463ea 76 timeout=6000;
4180_1 4:40dd020463ea 77 getcount=500;
4180_1 4:40dd020463ea 78 getreply();
star297 3:f7febfa77784 79 esp.baud(115200); // ESP8266 baudrate. Maximum on KLxx' is 115200, 230400 works on K20 and K22F
4180_1 4:40dd020463ea 80 if (time(NULL) < 1420070400) {
4180_1 4:40dd020463ea 81 setRTC();
4180_1 4:40dd020463ea 82 }
star297 0:e2a155f50119 83 startserver();
twmeares 5:3a405e2f4ad1 84 lcd.cls();
twmeares 5:3a405e2f4ad1 85 lcd.printf("Finished Setup: Door is unlocked");
4180_1 4:40dd020463ea 86
4180_1 4:40dd020463ea 87 while(1) {
4180_1 4:40dd020463ea 88 if(DataRX==1) {
star297 0:e2a155f50119 89 ReadWebData();
4180_1 4:40dd020463ea 90 if (servreq == 1 && weberror == 0) {
4180_1 4:40dd020463ea 91 sendpage();
4180_1 4:40dd020463ea 92 }
4180_1 4:40dd020463ea 93 esp.attach(&callback);
4180_1 4:40dd020463ea 94 pc.printf(" IPD Data:\r\n\n Link ID = %d,\r\n IPD Header Length = %d \r\n IPD Type = %s\r\n", linkID, ipdLen, type);
4180_1 4:40dd020463ea 95 pc.printf("\n\n HTTP Packet: \n\n%s\n", webdata);
star297 0:e2a155f50119 96 pc.printf(" Web Characters sent : %d\n\n", bufl);
star297 0:e2a155f50119 97 pc.printf(" -------------------------------------\n\n");
star297 2:d4c6bc0f2dc4 98 strcpy(lasthit, timebuf);
4180_1 4:40dd020463ea 99 servreq=0;
4180_1 4:40dd020463ea 100 }
star297 0:e2a155f50119 101 }
4180_1 4:40dd020463ea 102 }
4180_1 4:40dd020463ea 103 // Static WEB page
star297 0:e2a155f50119 104 void sendpage()
4180_1 4:40dd020463ea 105 {
4180_1 4:40dd020463ea 106 gettime();
4180_1 4:40dd020463ea 107
4180_1 4:40dd020463ea 108 // WEB page data
star297 3:f7febfa77784 109 strcpy(webbuff, "<!DOCTYPE html>");
twmeares 5:3a405e2f4ad1 110 strcat(webbuff, "<html><head><title>Internet-enabled Door Lock</title></head>");
4180_1 4:40dd020463ea 111 strcat(webbuff, "<body>");
twmeares 5:3a405e2f4ad1 112 strcat(webbuff, "<div style=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h1>Door Lock Web Controller</h1>");
star297 3:f7febfa77784 113 strcat(webbuff, "Hit Count - ");
star297 3:f7febfa77784 114 strcat(webbuff, webcount);
star297 3:f7febfa77784 115 strcat(webbuff, "<br>Last Hit - ");
4180_1 4:40dd020463ea 116 strcat(webbuff, lasthit);
star297 3:f7febfa77784 117 strcat(webbuff, "</div><br /><hr>");
4180_1 4:40dd020463ea 118 strcat(webbuff, "<h3>Mbed RTC Time -&nbsp&nbsp");
star297 3:f7febfa77784 119 strcat(webbuff, timebuf);
star297 3:f7febfa77784 120 strcat(webbuff, "</h3>\r\n");
twmeares 5:3a405e2f4ad1 121 strcat(webbuff, "<p><form method=\"POST\">");
twmeares 5:3a405e2f4ad1 122 if(locked==0) {
twmeares 5:3a405e2f4ad1 123 strcat(webbuff, "<p><input type=\"radio\" name=\"locked\" value=\"0\" checked> Door Unlocked");
twmeares 5:3a405e2f4ad1 124 strcat(webbuff, "<br><input type=\"radio\" name=\"locked\" value=\"1\" > Door Locked");
4180_1 4:40dd020463ea 125 } else {
twmeares 5:3a405e2f4ad1 126 strcat(webbuff, "<p><input type=\"radio\" name=\"locked\" value=\"0\" > Door Unlocked");
twmeares 5:3a405e2f4ad1 127 strcat(webbuff, "<br><input type=\"radio\" name=\"locked\" value=\"1\" checked> Door Locked");
4180_1 4:40dd020463ea 128 }
4180_1 4:40dd020463ea 129 strcat(webbuff, "</strong><p><input type=\"submit\" value=\"send-refresh\" style=\"background: #3498db;");
4180_1 4:40dd020463ea 130 strcat(webbuff, "background-image:-webkit-linear-gradient(top, #3498db, #2980b9);");
star297 3:f7febfa77784 131 strcat(webbuff, "background-image:linear-gradient(to bottom, #3498db, #2980b9);");
star297 3:f7febfa77784 132 strcat(webbuff, "-webkit-border-radius:12;border-radius: 12px;font-family: Arial;color:#ffffff;font-size:20px;padding:");
4180_1 4:40dd020463ea 133 strcat(webbuff, "10px 20px 10px 20px; border:solid #103c57 3px;text-decoration: none;");
star297 3:f7febfa77784 134 strcat(webbuff, "background: #3cb0fd;");
4180_1 4:40dd020463ea 135 strcat(webbuff, "background-image:-webkit-linear-gradient(top,#3cb0fd,#1a5f8a);");
star297 3:f7febfa77784 136 strcat(webbuff, "background-image:linear-gradient(to bottom,#3cb0fd,#1a5f8a);");
star297 3:f7febfa77784 137 strcat(webbuff, "text-decoration:none;\"></form></span>");
star297 3:f7febfa77784 138 strcat(webbuff, "<p/><h2>How to use:</h2><ul>");
star297 3:f7febfa77784 139 strcat(webbuff, "<li>Select the Radio buttons to control the digital out pins.</li>");
4180_1 4:40dd020463ea 140 strcat(webbuff, "<li>Click 'Send-Refresh' to send.</li>");
4180_1 4:40dd020463ea 141 strcat(webbuff, "<li>Use the 'Send-Refresh' button to refresh the data.</li>");
star297 3:f7febfa77784 142 strcat(webbuff, "</ul>");
4180_1 4:40dd020463ea 143 strcat(webbuff, "</body></html>");
4180_1 4:40dd020463ea 144 // end of WEB page data
4180_1 4:40dd020463ea 145 bufl = strlen(webbuff); // get total page buffer length
star297 3:f7febfa77784 146 sprintf(cmdbuff,"AT+CIPSEND=%d,%d\r\n", linkID, bufl); // send IPD link channel and buffer character length.
4180_1 4:40dd020463ea 147 timeout=200;
4180_1 4:40dd020463ea 148 getcount=7;
star297 3:f7febfa77784 149 SendCMD();
4180_1 4:40dd020463ea 150 getreply();
star297 0:e2a155f50119 151 SendWEB(); // send web page
star297 3:f7febfa77784 152 memset(webbuff, '\0', sizeof(webbuff));
4180_1 4:40dd020463ea 153 sendcheck();
star297 0:e2a155f50119 154 }
star297 0:e2a155f50119 155
star297 3:f7febfa77784 156 // wait for ESP "SEND OK" reply, then close IP to load web page
star297 0:e2a155f50119 157 void sendcheck()
star297 0:e2a155f50119 158 {
4180_1 4:40dd020463ea 159 weberror=1;
4180_1 4:40dd020463ea 160 timeout=500;
4180_1 4:40dd020463ea 161 getcount=24;
4180_1 4:40dd020463ea 162 t2.reset();
4180_1 4:40dd020463ea 163 t2.start();
4180_1 4:40dd020463ea 164 while(weberror==1 && t2.read() <5) {
star297 0:e2a155f50119 165 getreply();
4180_1 4:40dd020463ea 166 if (strstr(replybuff, "SEND OK") != NULL) {
4180_1 4:40dd020463ea 167 weberror=0; // wait for valid SEND OK
star297 0:e2a155f50119 168 }
4180_1 4:40dd020463ea 169 }
4180_1 4:40dd020463ea 170 if(weberror==1) { // restart connection
4180_1 4:40dd020463ea 171 strcpy(cmdbuff, "AT+CIPMUX=1\r\n");
4180_1 4:40dd020463ea 172 timeout=500;
4180_1 4:40dd020463ea 173 getcount=10;
4180_1 4:40dd020463ea 174 SendCMD();
4180_1 4:40dd020463ea 175 getreply();
4180_1 4:40dd020463ea 176 pc.printf(replybuff);
star297 3:f7febfa77784 177 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
4180_1 4:40dd020463ea 178 timeout=500;
4180_1 4:40dd020463ea 179 getcount=10;
4180_1 4:40dd020463ea 180 SendCMD();
4180_1 4:40dd020463ea 181 getreply();
4180_1 4:40dd020463ea 182 pc.printf(replybuff);
4180_1 4:40dd020463ea 183 } else {
4180_1 4:40dd020463ea 184 sprintf(cmdbuff, "AT+CIPCLOSE=%s\r\n",channel); // close current connection
4180_1 4:40dd020463ea 185 SendCMD();
4180_1 4:40dd020463ea 186 getreply();
4180_1 4:40dd020463ea 187 pc.printf(replybuff);
4180_1 4:40dd020463ea 188 }
4180_1 4:40dd020463ea 189 t2.reset();
4180_1 4:40dd020463ea 190 }
star297 0:e2a155f50119 191
4180_1 4:40dd020463ea 192 // Reads and processes GET and POST web data
star297 0:e2a155f50119 193 void ReadWebData()
4180_1 4:40dd020463ea 194 {
4180_1 4:40dd020463ea 195 wait_ms(200);
star297 3:f7febfa77784 196 esp.attach(NULL);
4180_1 4:40dd020463ea 197 count=0;
4180_1 4:40dd020463ea 198 DataRX=0;
4180_1 4:40dd020463ea 199 weberror=0;
4180_1 4:40dd020463ea 200 memset(webdata, '\0', sizeof(webdata));
star297 3:f7febfa77784 201 int x = strcspn (webbuff,"+");
4180_1 4:40dd020463ea 202 if(x) {
4180_1 4:40dd020463ea 203 strcpy(webdata, webbuff + x);
4180_1 4:40dd020463ea 204 weberror=0;
4180_1 4:40dd020463ea 205 int numMatched = sscanf(webdata,"+IPD,%d,%d:%s", &linkID, &ipdLen, type);
twmeares 5:3a405e2f4ad1 206 if( strstr(webdata, "locked=0") != NULL ) {
twmeares 5:3a405e2f4ad1 207 locked = 0;
4180_1 4:40dd020463ea 208 }
twmeares 5:3a405e2f4ad1 209 if( strstr(webdata, "locked=1") != NULL ) {
twmeares 5:3a405e2f4ad1 210 locked = 1;
4180_1 4:40dd020463ea 211 }
4180_1 4:40dd020463ea 212 sprintf(channel, "%d",linkID);
4180_1 4:40dd020463ea 213 if (strstr(webdata, "GET") != NULL) {
4180_1 4:40dd020463ea 214 servreq=1;
4180_1 4:40dd020463ea 215 }
4180_1 4:40dd020463ea 216 if (strstr(webdata, "POST") != NULL) {
4180_1 4:40dd020463ea 217 servreq=1;
4180_1 4:40dd020463ea 218 }
star297 2:d4c6bc0f2dc4 219 webcounter++;
star297 2:d4c6bc0f2dc4 220 sprintf(webcount, "%d",webcounter);
4180_1 4:40dd020463ea 221 } else {
4180_1 4:40dd020463ea 222 memset(webbuff, '\0', sizeof(webbuff));
4180_1 4:40dd020463ea 223 esp.attach(&callback);
4180_1 4:40dd020463ea 224 weberror=1;
4180_1 4:40dd020463ea 225 }
twmeares 5:3a405e2f4ad1 226
twmeares 5:3a405e2f4ad1 227 processLock();
star297 0:e2a155f50119 228 }
star297 0:e2a155f50119 229 // Starts and restarts webserver if errors detected.
star297 0:e2a155f50119 230 void startserver()
star297 0:e2a155f50119 231 {
4180_1 4:40dd020463ea 232 gettime();
star297 1:71ed1afbf344 233 pc.printf("\n\n RTC time %s\r\n\n",timebuf);
4180_1 4:40dd020463ea 234 pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
star297 3:f7febfa77784 235 strcpy(cmdbuff,"AT+RST\r\n");
4180_1 4:40dd020463ea 236 timeout=8000;
4180_1 4:40dd020463ea 237 getcount=1000;
star297 0:e2a155f50119 238 SendCMD();
star297 1:71ed1afbf344 239 getreply();
star297 3:f7febfa77784 240 pc.printf(replybuff);
star297 3:f7febfa77784 241 pc.printf("%d",count);
star297 3:f7febfa77784 242 if (strstr(replybuff, "OK") != NULL) {
star297 1:71ed1afbf344 243 pc.printf("\n++++++++++ Starting Server ++++++++++\r\n");
4180_1 4:40dd020463ea 244 strcpy(cmdbuff, "AT+CIPMUX=1\r\n"); // set multiple connections.
4180_1 4:40dd020463ea 245 timeout=500;
4180_1 4:40dd020463ea 246 getcount=20;
star297 1:71ed1afbf344 247 SendCMD();
star297 2:d4c6bc0f2dc4 248 getreply();
4180_1 4:40dd020463ea 249 pc.printf(replybuff);
star297 3:f7febfa77784 250 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
4180_1 4:40dd020463ea 251 timeout=500;
4180_1 4:40dd020463ea 252 getcount=20;
star297 1:71ed1afbf344 253 SendCMD();
star297 3:f7febfa77784 254 getreply();
4180_1 4:40dd020463ea 255 pc.printf(replybuff);
4180_1 4:40dd020463ea 256 wait(1);
star297 3:f7febfa77784 257 sprintf(cmdbuff,"AT+CIPSTO=%d\r\n",SERVtimeout);
4180_1 4:40dd020463ea 258 timeout=500;
4180_1 4:40dd020463ea 259 getcount=50;
star297 3:f7febfa77784 260 SendCMD();
star297 2:d4c6bc0f2dc4 261 getreply();
4180_1 4:40dd020463ea 262 pc.printf(replybuff);
4180_1 4:40dd020463ea 263 wait(5);
4180_1 4:40dd020463ea 264 pc.printf("\n Getting Server IP \r\n");
star297 3:f7febfa77784 265 strcpy(cmdbuff, "AT+CIFSR\r\n");
4180_1 4:40dd020463ea 266 timeout=2500;
4180_1 4:40dd020463ea 267 getcount=200;
4180_1 4:40dd020463ea 268 while(weberror==0) {
4180_1 4:40dd020463ea 269 SendCMD();
4180_1 4:40dd020463ea 270 getreply();
4180_1 4:40dd020463ea 271 if (strstr(replybuff, "0.0.0.0") == NULL) {
4180_1 4:40dd020463ea 272 weberror=1; // wait for valid IP
star297 1:71ed1afbf344 273 }
4180_1 4:40dd020463ea 274 }
4180_1 4:40dd020463ea 275 pc.printf("\n Enter WEB address (IP) found below in your browser \r\n\n");
4180_1 4:40dd020463ea 276 pc.printf("\n The MAC address is also shown below,if it is needed \r\n\n");
4180_1 4:40dd020463ea 277 replybuff[strlen(replybuff)-1] = '\0';
4180_1 4:40dd020463ea 278 //char* IP = replybuff + 5;
4180_1 4:40dd020463ea 279 sprintf(webdata,"%s", replybuff);
4180_1 4:40dd020463ea 280 pc.printf(webdata);
4180_1 4:40dd020463ea 281 bufflen=200;
4180_1 4:40dd020463ea 282 count=0;
star297 1:71ed1afbf344 283 pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
star297 1:71ed1afbf344 284 esp.attach(&callback);
4180_1 4:40dd020463ea 285 } else {
4180_1 4:40dd020463ea 286 pc.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n");
4180_1 4:40dd020463ea 287 while(1) {}
4180_1 4:40dd020463ea 288 }
4180_1 4:40dd020463ea 289 t2.reset();
4180_1 4:40dd020463ea 290 t2.start();
4180_1 4:40dd020463ea 291 }
star297 0:e2a155f50119 292 // ESP Command data send
star297 0:e2a155f50119 293 void SendCMD()
star297 0:e2a155f50119 294 {
4180_1 4:40dd020463ea 295 esp.printf("%s", cmdbuff);
4180_1 4:40dd020463ea 296 }
star297 0:e2a155f50119 297 // Large WEB buffer data send
star297 0:e2a155f50119 298 void SendWEB()
4180_1 4:40dd020463ea 299 {
star297 0:e2a155f50119 300 int i=0;
star297 0:e2a155f50119 301 if(esp.writeable()) {
4180_1 4:40dd020463ea 302 while(webbuff[i]!='\0') {
4180_1 4:40dd020463ea 303 esp.putc(webbuff[i]);
4180_1 4:40dd020463ea 304 i++;
4180_1 4:40dd020463ea 305 }
4180_1 4:40dd020463ea 306 }
4180_1 4:40dd020463ea 307 }
4180_1 4:40dd020463ea 308 // Get Command and ESP status replies
star297 0:e2a155f50119 309 void getreply()
4180_1 4:40dd020463ea 310 {
star297 3:f7febfa77784 311 memset(replybuff, '\0', sizeof(replybuff));
4180_1 4:40dd020463ea 312 t1.reset();
4180_1 4:40dd020463ea 313 t1.start();
4180_1 4:40dd020463ea 314 replycount=0;
star297 3:f7febfa77784 315 while(t1.read_ms()< timeout && replycount < getcount) {
star297 0:e2a155f50119 316 if(esp.readable()) {
4180_1 4:40dd020463ea 317 replybuff[replycount] = esp.getc();
4180_1 4:40dd020463ea 318 replycount++;
star297 2:d4c6bc0f2dc4 319 }
4180_1 4:40dd020463ea 320 }
4180_1 4:40dd020463ea 321 t1.stop();
star297 0:e2a155f50119 322 }
twmeares 5:3a405e2f4ad1 323
4180_1 4:40dd020463ea 324 // Get RTC time
star297 0:e2a155f50119 325 void gettime()
star297 0:e2a155f50119 326 {
star297 0:e2a155f50119 327 time_t seconds = time(NULL);
4180_1 4:40dd020463ea 328 strftime(timebuf,50,"%H:%M:%S %a %d %b %y", localtime(&seconds));
star297 0:e2a155f50119 329 }
star297 0:e2a155f50119 330
star297 1:71ed1afbf344 331 void setRTC()
star297 1:71ed1afbf344 332 {
4180_1 4:40dd020463ea 333 t.tm_sec = (0); // 0-59
4180_1 4:40dd020463ea 334 t.tm_min = (minute); // 0-59
4180_1 4:40dd020463ea 335 t.tm_hour = (hour); // 0-23
4180_1 4:40dd020463ea 336 t.tm_mday = (dayofmonth); // 1-31
4180_1 4:40dd020463ea 337 t.tm_mon = (month-1); // 0-11 "0" = Jan, -1 added for Mbed RCT clock format
4180_1 4:40dd020463ea 338 t.tm_year = ((year)+100); // year since 1900, current DCF year + 100 + 1900 = correct year
4180_1 4:40dd020463ea 339 set_time(mktime(&t)); // set RTC clock
4180_1 4:40dd020463ea 340 }
twmeares 5:3a405e2f4ad1 341
twmeares 5:3a405e2f4ad1 342 void processLock()
twmeares 5:3a405e2f4ad1 343 {
twmeares 5:3a405e2f4ad1 344 lcd.cls();
twmeares 5:3a405e2f4ad1 345 if(locked == 1) {
twmeares 5:3a405e2f4ad1 346 door_lock.write(0.0);
twmeares 5:3a405e2f4ad1 347 lcd.printf("Door is Locked");
twmeares 5:3a405e2f4ad1 348 } else {
twmeares 5:3a405e2f4ad1 349 door_lock.write(0.5);
twmeares 5:3a405e2f4ad1 350 lcd.printf("Door is unlocked");
twmeares 5:3a405e2f4ad1 351 }
twmeares 5:3a405e2f4ad1 352 }