Non ci sono prodotti a carrello.
Codice Sorgente Firmware – Access Control v1.0 del 29-03-2016 Pier Aisa
/* Access Control v1.0 del 29-03-2016 Pier Aisa */ #include <SdFat.h> #include <FishinoUdp.h> #include <FishinoSockBuf.h> #include <Fishino.h> #include <SPI.h> #include <Wire.h> #include "RTClib.h" #define BUFSIZ 38 //stringa piu' lunga "GET /?YYYYMMDDHHMMSS HTTP1.1" = 38 #define wc(s) wc_p(PSTR(s)) //save RAM used instead client.print with data on flash #define fp(s) fp_p(PSTR(s)) //save RAM used instead file1.print with data on flash #define header "HTTP/1.1 200 OK\n" #define content "Content-Type: text/html\n\n" #define head "<HTML>\n" #define dash "-\n" #define br1 "<br>\n" #define url "<a href=\"/\">HOME</a>\n" #define txt ".TXT" #define comma '\t' #define colon ":" #define dot "/" #define http " HTTP" #define day1 "DAY" #define get "GET /" #define datafile "D" //"DATA____" #define MY_SSID "NikolaTesla" #define MY_PASS "" RTC_DS1307 RTC; int DS1307 = 0x68; DateTime now; int in0 = 0,cycle=0; Sd2Card card; SdVolume volume; SdFile root ; SdFile file ; SdFile file1 ; dir_t p ; char filename[14] ; char* dirname ; String date; int fasce[12]; FishinoServer server(80); FishinoClient client ; void setup() { pinMode(2, OUTPUT); Serial.begin(115200); if (!card.init(SPI_HALF_SPEED, 4)) ; if (!volume.init(&card)) ; if (!root.openRoot(&volume)) ; SPI.begin(); SPI.setClockDivider(SPI_CLOCK_DIV2); while(!Fishino.reset()) Fishino.setMode(STATION_MODE); while(!Fishino.begin(MY_SSID, MY_PASS)) server.begin(); client = server.available(); Wire.begin(); RTC.begin(); root.rewind(); client = server.available(); IPAddress ip = Fishino.localIP(); Serial.println((IPAddress)ip); } void loop() { delay(2000); ListFiles(LS_SIZE,root); now = RTC.now(); char clientline[BUFSIZ]; int index; client = server.available(); if (client) { boolean current_line_is_blank = true; index = 0; while (client.connected()) { if (client.available()) { char c = client.read(); if (c != '\n' && c != '\r') { clientline[index] = c; index++; if (index >= BUFSIZ) index = BUFSIZ -1; continue; } clientline[index] = 0; date = get; date += " " ; date.toCharArray(filename,14,0); if (strstr(clientline, filename) != 0) { //Lista SD dirname = "/"; HtmlHeader(); root.rewind(); ListFiles(LS_SIZE,root); break; } date = get; date += "D" ; date.toCharArray(filename,14,0); if (strstr(clientline, filename) != 0) { //D command read subdir dirname = clientline + 6; // look after the "GET />" (6 chars) (strstr(clientline, http))[0] = 0; if(file.open(&root,dirname, O_READ)); { HtmlHeader(); ListFiles(LS_SIZE,file); } file.close(); break; } //H command set time date = get; date += "H" ; date.toCharArray(filename,14,0); if (strstr(clientline, filename) != 0) { //set date date = clientline + 6; // look after the "GET />" (6 chars) (strstr(clientline, http))[0] = 0; setTime(date.substring(0,4).toInt(), date.substring(4,6).toInt(), date.substring(6,8).toInt(),date.substring(8,10).toInt(), date.substring(10,12).toInt(), date.substring(12,14).toInt()); wc(url); //back to home delay(3000); break; } } } delay(1000); client.stop(); } gestionevento(false); // true per simazione evento if (now.hour() == 23 && now.minute() == 59) finegiornata(); delay(2000); } void HtmlHeader() { wc(header); wc(content); wc(head); client.print(getday());client.print(" ");client.print(getdate(true)); wc(" \n");client.print(gettime()); wc(br1); } void ListFiles(uint8_t flags, SdFile current) { current.getFilename(filename); client.print(filename); wc("<ul>\n"); while (current.readDir(p) > 0) { if (p.name[0] == DIR_NAME_FREE) break; if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.') continue; if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue; wc("<li>"); current.getFilename(filename); if (DIR_IS_SUBDIR(&p)) { wc("<a href=\"D\n"); client.write(filename); } date = getname(p); date.toCharArray(filename,14,0); client.print(filename); if (DIR_IS_SUBDIR(&p)) { wc("\">\n"); client.print(filename); } if (DIR_IS_SUBDIR(&p)) wc("</a>\n"); wc("</li>\n"); } wc("</ul>\n\n"); } void gestionevento(boolean sim) { in0 = analogRead(A0); Serial.print(++cycle);Serial.print("in=");Serial.println(in0); if (in0 > 50 || sim) { //usare se quando la porta si apre A0 è alto >50 //if (in0 < 50|| sim) { //usare se quando la porta si apre A0 è basso <50 digitalWrite(2, HIGH); //abilita uscita now = RTC.now(); date = getdate(false)+txt; date.toCharArray(filename,14,0); writefile(filename,"G"); wc(url); //back to home int ora = now.hour(); if (ora>=8 && ora <=19) fasce[ora-8]++; delay(1000); } else digitalWrite(2, LOW); //disabilita uscita } void finegiornata() { String dirname1 = String ("GAAAAMMDD.TXT"); char * dirname2 = "G"; for(int i=0;i<12;i++) fasce[i]=0; int ora = now.hour(); date = getdate(false)+txt; date.toCharArray(filename,14,0); dirname1 = String("G"); //+ String(filename); dirname1.toCharArray(dirname2,1,0); openfile(filename,dirname2); Serial.println("f"); int16_t c; String hour = String(""); boolean oranext = false; while ((c = file1.read()) > 0) { if (c==13) {oranext = true;} else {if(oranext && c!=58) { hour = hour + String((char)c) ;} else { ora = hour.toInt(); if (ora>=8 && ora <=19) fasce[ora-8]++; oranext = false; hour = ""; ora= 0; } } } file1.close(); date = getdate(false).substring(2,8)+txt; date.toCharArray(filename,14,0); writefile(filename,"M"); for(int i=0;i<12;i++) fasce[i]=0; wc(url); delay(50000); } void writefile(char * filename1, char * dir) { root.rewind(); file.close(); if(strstr(dir,"M")) { if (!file.open(&root,dir, O_READ)) {} else {if (!file.exists(filename1)) { if (!file1.open(&file,filename1, O_RDWR | O_CREAT | O_AT_END)) {} else { fp(datafile);file1.print(comma); fp("M"); file1.print(comma); fp("G"); file1.print(comma); for(int i=0;i<12;i++) {file1.print(getDigits(i+8,2));file1.print(comma);} fp("T"); file1.print(comma); fp(br1); file1.close();file.close(); } } } } else { if (!file.open(&root,dir, O_READ)) {} else {if (!file.exists(filename1)) { if (!file1.open(&file,filename1, O_RDWR | O_CREAT | O_AT_END)) file1.println("\n");file1.close();file.close(); } } } root.rewind(); file.close();file1.close(); if (!file.open(&root,dir, O_READ)) {} if (!file1.open(&file,filename1, O_RDWR | O_CREAT | O_AT_END)) {} else { if (strstr(dir,"M")) { file1.print(getdate(true));file1.print(comma); file1.print(getmonth()); file1.print(comma); file1.print(getday()); int tot=0; double med=0; for(int i=0;i<12;i++) {file1.print(comma);file1.print(getDigits(fasce[i],2));tot+=fasce[i];} file1.print(comma);file1.print(getDigits(tot,3)); Serial.println("OKWM\n"); Serial.println(filename1); } if (strstr(dir,"G")) { file1.print(gettime());file1.print(comma);file1.print(getday());file1.print(comma);file1.println(getdate(true)); } } file.close();file1.close(); delay(100); } void openfile(char * filename1, char * dir) { if (!file.open(&root,dir, O_READ)) {} if (!file1.open(&file,filename1, O_READ)) {} } void wc_p(const char p[]) { byte c; while (0 != (c = pgm_read_byte(p++))) { client.print((char)c); } } void fp_p(const char p[]) { byte c; while (0 != (c = pgm_read_byte(p++))) { file1.print((char)c); } } String getdate(boolean point){ String time =getDigits(now.day(),2); if (point) time +=dot; time +=getDigits(now.month(),2); if (point) time +=dot; time += String(now.year()); return time; } String gettime(){ String time = String(getDigits(now.hour(),2)); time += colon; time +=getDigits(now.minute(),2); time += colon; time +=getDigits(now.second(),2); return time; } String getday(){ int day = now.dayOfWeek(); String time = String("XXX"); if (day==0) time="DOM";if (day==1) time="LUN";if (day==2) time="MAR";if (day==3) time="MER";if (day==4) time="GIO";if (day==5) time="VEN";if (day==6) time="SAB"; return time; } String getmonth(){ int day = now.month(); String time = String("XXX"); if (day==1) time="GEN";if (day==2) time="FEB";if (day==3) time="MAR";if (day==4) time="APR";if (day==5) time="MAG";if (day==6) time="GIU"; if (day==7) time="LUG";if (day==8) time="AGO";if (day==9) time="SET";if (day==10) time="OTT";if (day==11) time="NOV";if (day==12) time="DIC"; return time; } String getDigits(int num, int digits){ String time = String(); time=String(""); if(num < 10 && digits==2) time += String('0'); if(num < 10 && digits==3) time += String("00"); if(num < 100 && num > 9 && digits==3) time += String('0'); time += String(num); return time ; } String getname(dir_t p) { String namefile = String(); for (uint8_t i = 0; i < 11; i++) { if (p.name[i] == ' ') continue; if (i == 8) { namefile += '.'; } namefile += String((char)p.name[i]); } return namefile ; } void setTime(uint16_t ye,uint16_t mo,uint16_t da,uint16_t ho,uint16_t mi,uint16_t se) { RTC.adjust(DateTime(ye,mo,da,ho,mi,se)); }
44 Commenti