#include <EtherCard.h> #define RELAY_PIN 2 static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01}; static byte myip[] = {10,0,1,186}; byte Ethernet::buffer[700]; static uint32_t timer[3]; char til[4]; char rel[2]; byte repin[] = {2,3,4}; byte reon[] = {1,0,0}; byte reoff[] = {0,1,1}; char* on = "ON"; char* off = "OFF"; boolean relayStatus; char* relayLabel; char* linkLabel; void setup () { Serial.begin(57600); Serial.println("WebRelay Demo"); if(!ether.begin(sizeof Ethernet::buffer, mymac)) Serial.println( "Failed to access Ethernet controller"); else Serial.println("Ethernet controller initialized"); if(!ether.staticSetup(myip)) Serial.println("Failed to set IP address"); pinMode(repin[0], OUTPUT); digitalWrite(repin[0], reoff[0]); pinMode(repin[1], OUTPUT); digitalWrite(repin[1], reoff[1]); pinMode(repin[2], OUTPUT); digitalWrite(repin[2], reoff[2]); relayStatus = false; relayLabel = off; linkLabel = on; timer[0] = millis() + 5000; } void loop() { word len = ether.packetReceive(); word pos = ether.packetLoop(len); if (millis() > timer[0]) { digitalWrite(repin[0], reoff[0]); } if (millis() > timer[1]) { digitalWrite(repin[1], reoff[1]); } if (millis() > timer[2]) { digitalWrite(repin[2], reoff[2]); } if(pos) { char* data = (char *) Ethernet::buffer + pos; Serial.println(data); ether.findKeyVal(data + 6, rel , sizeof rel , "relay"); byte rela = atoi(rel); Serial.println(rel); if(strstr(data, "GET /?status=ON") != 0) { ether.findKeyVal(data + 6, til , sizeof til , "til"); Serial.print("Will stay on for "); Serial.print(til); Serial.println( " minutes.\n"); Serial.println(freeRAM()); int until = atoi(til); //Serial.println(until); timer[rela] = millis() + until*60000; relayStatus = reon[rela]; relayLabel = on; linkLabel = off; } else if(strstr(data, "GET /?status=OFF") != 0) { relayStatus = reoff[rela]; relayLabel = off; linkLabel = on; } digitalWrite(repin[rela], relayStatus); BufferFiller bfill = ether.tcpOffset(); bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n" "<html><head><meta name='viewport' content='width=200px'/></head><body>" "<div style='position:absolute;width:200px;height:200px;top:50%;left:50%;margin:-100px 0 0 -100px'>" "<div style='font:bold 14px verdana;text-align:center'>Relay is $S</div>" "<br><div style='text-align:center'>" "<a href='/?status=$S'><img src='http://www.lucadentella.it/files/bt_$S.png'></a>" "</div></div></body></html>" ), relayLabel, linkLabel, linkLabel); ether.httpServerReply(bfill.position()); } } int freeRAM(){ extern int __heap_start, *__brkval; int v; return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); }