Скетч Веб термостата на Меге, W5100 с SD Card.
- Войдите на сайт для отправки комментариев
Чт, 19/11/2015 - 16:42
Имеется: Мега, W5100 с SD картой на борту, 8 термодатчиков DS18B20.
Ранее использовался код:
/* * контроллер тёплого пола */ #include <EtherCard.h> // Библиотека для сетевой карты #include <OneWire.h> // Бибилиотека для датчика температуты D18B20 #include <EEPROM.h> // Библиотека энергонезависимой памяти static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; // MAC адрес const byte PinTemp = 9; // Датчики Dallas DS18B20 Temperature Sensors const byte PinSSR1 = 3; // Реле Pin for SSR 1 const byte PinSSR2 = 4; // Реле Pin for SSR 2 const byte PinSSR3 = 5; // Реле Pin for SSR 3 const byte PinSSR4 = 6; const byte PinSSR5 = 7; const byte pirPin = 1; char TargetTemperarureTextbox[10]; byte sensor1[8] = {0x28, 0xFF, 0xE0, 0x8C, 0x11, 0x14, 0x00, 0x6F}; // Адрес первого сенсора byte sensor2[8] = {0x28, 0xFF, 0xAE, 0x92, 0x10, 0x14, 0x00, 0xA2}; // Адрес второго сенсора byte sensor3[8] = {0x28, 0xFF, 0xC9, 0x4D, 0x11, 0x14, 0x00, 0xD2}; // Адрес третьего сенсора byte sensor4[8] = {0x28, 0xFF, 0xE7, 0x8C, 0x11, 0x14, 0x00, 0x3E}; // Адрес четвертого сенсора float temp1; float temp2; float temp3; float temp4; char chartemp1[10]; char chartemp2[10]; char chartemp3[10]; char chartemp4[10]; byte TargetTemp1; byte TargetTemp2; byte TargetTemp3; byte TargetTemp4; byte SSR1on = 0; // 0 is Off, 1 is On byte SSR2on = 0; // 0 is Off, 1 is On byte SSR3on = 0; // 0 is Off, 1 is On byte SSR4on = 0; // 0 is Off, 1 is On byte Ethernet::buffer[1420]; // if you increase the size of the HTML code you may need to increase the buffer size (or it will stop working) //TODO BufferFiller bfill; OneWire ds(PinTemp); // пин подключения термодатчика void setup () { pinMode(PinTemp, INPUT); pinMode(PinSSR1, OUTPUT); // sets the digital pin as input pinMode(PinSSR2, OUTPUT); // sets the digital pin as input pinMode(PinSSR3, OUTPUT); // sets the digital pin as input pinMode(PinSSR4, OUTPUT); // sets the digital pin as input pinMode(PinSSR5, OUTPUT); // sets the digital pin as input TargetTemp1 = EEPROM.read(0); TargetTemp2 = EEPROM.read(2); TargetTemp3 = EEPROM.read(4); TargetTemp4 = EEPROM.read(6); ether.begin(sizeof Ethernet::buffer, mymac, 10); ether.dhcpSetup(); } const char http_OK[] PROGMEM = "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\n" "Pragma: no-cache\r\n\r\n" "<!DOCTYPE html>" "<html><head>" "<meta http-equiv='refresh' content='120'/>" "<meta charset='utf-8'>" "<title>Тёплые полы</title>" "<body>" "<center><font size=\"4\">" "<table border=\"1\" cellpadding=\"5\" style=\"width: 800px; border-collapse: collapse; border: 1px solid black;\">" "<tr style=\"background-color: silver\"><td>Помещение:</td>" "<td>Ванна</td>" "<td>Прихожая</td>" "<td>Зал</td>" "<td>Кухня</td></tr>"; const char http_Found[] PROGMEM = "HTTP/1.0 302 Found\r\n" "Location: /\r\n\r\n"; const char http_Unauthorized[] PROGMEM = "HTTP/1.0 401 Unauthorized\r\n" "Content-Type: text/html\r\n\r\n" "<h1>401 Unauthorized</h1>"; //$D = word data type //$L = long data type //$S = c string //$F = progmem string //$E = byte from the eeprom. static word homePage() { bfill.emit_p(http_OK); bfill.emit_p(PSTR( "<tr><td>Температура:</td>" "<td>$S °C</td>" "<td>$S °C</td>" "<td>$S °C</td>" "<td>$S °C</td></tr>"), chartemp1, chartemp2, chartemp3, chartemp4); bfill.emit_p(PSTR("<tr><td>Обогрев:</td>")); if ( digitalRead(PinSSR1) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR2) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR3) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR4) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } bfill.emit_p(PSTR("</tr><tr><td>Цель:</td>")); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp1); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp2); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp3); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp4); bfill.emit_p(PSTR("</tr><tr><td>Установить:</td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp1 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp2 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp3 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp4 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("</tr></table>" "</font></center></body></html>")); return bfill.position(); } void loop(void) { temp1=tempread(sensor1); dtostrf(temp1, 4, 2, chartemp1); temp2=tempread(sensor2); dtostrf(temp2, 4, 2, chartemp2); temp3=tempread(sensor3); dtostrf(temp3, 4, 2, chartemp3); temp4=tempread(sensor4); dtostrf(temp4, 4, 2, chartemp4); if (temp1<TargetTemp1-0.5) { digitalWrite(PinSSR1, LOW); SSR1on = 1; } else if (temp1>TargetTemp1+0.5) { digitalWrite(PinSSR1, HIGH); SSR1on = 0; } if (temp2<TargetTemp2-0.5) { digitalWrite(PinSSR2, LOW); SSR2on = 1; } else if (temp2>TargetTemp2+0.5){ digitalWrite(PinSSR2, HIGH); SSR2on = 0; } if (temp3<TargetTemp3-0.5) { digitalWrite(PinSSR3, LOW); SSR3on = 1; } else if (temp3>TargetTemp3+0.5){ digitalWrite(PinSSR3, HIGH); SSR3on = 0; } if (temp4<TargetTemp4-0.5) { digitalWrite(PinSSR4, LOW); SSR4on = 1; } else if (temp4>TargetTemp4+0.5){ digitalWrite(PinSSR4, HIGH); SSR4on = 0; } word len = ether.packetReceive(); word pos = ether.packetLoop(len); if (pos) { bfill = ether.tcpOffset(); char *data = (char *) Ethernet::buffer + pos; if (strncmp("GET /", data, 5) != 0) { bfill.emit_p(http_Unauthorized); } else { data += 5; if (data[0] == ' ') { homePage(); } else if (strncmp( "?ttemp1=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp1") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp1 = value; EEPROM.write(0, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp2=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp2") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp2 = value; EEPROM.write(2, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp3=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp3") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp3 = value; EEPROM.write(4, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp4=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp4") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp4 = value; EEPROM.write(6, value); } } bfill.emit_p(http_Found); } } ether.httpServerReply(bfill.position()); } } float tempread(byte sensoraddr[]) // error codes: // -1 no sensors found // -2 invalid CRC // -3 not a DS1820 { byte i; byte present = 0; byte data[12]; byte addr[8]; //int HighByte, LowByte, TReading, SignBit, Tc_100, Tf_100, Whole, Fract; for ( i = 0; i < 8; i++) { addr[i]=sensoraddr[i]; } ds.reset(); // pulse the pins and wait for a response to reset the DS1820 ds.select(addr); // 0x55 (MATCH_ROM) followed by the address of the 1820 to talk to. // ds.write(0x44,1); // start conversion, with parasite power on at the end ds.write(0x44,0); //PARASITE POWER OFF // delay(800); present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } int16_t raw = (data[1] << 8) | data[0]; float temp = (float)raw / 16.0; return temp; }
Мной этот код был увеличен до:
/* * контроллер тёплого пола */ #include <EtherCard.h> // Библиотека для сетевой карты #include <OneWire.h> // Бибилиотека для датчика температуты D18B20 #include <EEPROM.h> // Библиотека энергонезависимой памяти static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; // MAC адрес const byte PinTemp = 9; // Датчики Dallas DS18B20 Temperature Sensors const byte PinSSR1 = 3; // Реле Pin for SSR 1 const byte PinSSR2 = 4; // Реле Pin for SSR 2 const byte PinSSR3 = 5; // Реле Pin for SSR 3 const byte PinSSR4 = 6; // Реле Pin for SSR 4 const byte PinSSR5 = 7; // Реле Pin for SSR 5 const byte PinSSR6 = 8; // Реле Pin for SSR 6 const byte PinSSR7 = 22; // Реле Pin for SSR 7 const byte PinSSR8 = 23; // Реле Pin for SSR 8 char TargetTemperarureTextbox[10]; byte sensor1[8] = {0x00, 0xFF, 0xE0, 0x8C, 0x11, 0x14, 0x00, 0x6F}; // Адрес первого сенсора byte sensor2[8] = {0x00, 0xFF, 0xAE, 0x92, 0x10, 0x14, 0x00, 0xA2}; // Адрес второго сенсора byte sensor3[8] = {0x00, 0xFF, 0xC9, 0x4D, 0x11, 0x14, 0x00, 0xD2}; // Адрес третьего сенсора byte sensor4[8] = {0x00, 0xFF, 0xE7, 0x8C, 0x11, 0x14, 0x00, 0x3E}; // Адрес четвертого сенсора byte sensor5[8] = {0x28, 0xFF, 0xB2, 0x48, 0x11, 0x14, 0x00, 0x4E}; // Адрес пятого сенсора byte sensor6[8] = {0x28, 0xFF, 0x6A, 0xD4, 0x10, 0x14, 0x00, 0x76}; // Адрес шестого сенсора byte sensor7[8] = {0x28, 0xFF, 0x9E, 0x8A, 0x11, 0x14, 0x00, 0xA9}; // Адрес седьмого сенсора byte sensor8[8] = {0x28, 0xFF, 0xEB, 0x8B, 0x10, 0x14, 0x00, 0x32}; // Адрес восьмого сенсора float temp1; float temp2; float temp3; float temp4; float temp5; float temp6; float temp7; float temp8; char chartemp1[10]; char chartemp2[10]; char chartemp3[10]; char chartemp4[10]; char chartemp5[10]; char chartemp6[10]; char chartemp7[10]; char chartemp8[10]; byte TargetTemp1; byte TargetTemp2; byte TargetTemp3; byte TargetTemp4; byte TargetTemp5; byte TargetTemp6; byte TargetTemp7; byte TargetTemp8; byte SSR1on = 0; // 0 is Off, 1 is On byte SSR2on = 0; // 0 is Off, 1 is On byte SSR3on = 0; // 0 is Off, 1 is On byte SSR4on = 0; // 0 is Off, 1 is On byte SSR5on = 0; // 0 is Off, 1 is On byte SSR6on = 0; // 0 is Off, 1 is On byte SSR7on = 0; // 0 is Off, 1 is On byte SSR8on = 0; // 0 is Off, 1 is On byte Ethernet::buffer[3072]; // if you increase the size of the HTML code you may need to increase the buffer size (or it will stop working) //TODO BufferFiller bfill; OneWire ds(PinTemp); // пин подключения термодатчика void setup () { pinMode(PinTemp, INPUT); pinMode(PinSSR1, OUTPUT); // sets the digital pin as input pinMode(PinSSR2, OUTPUT); // sets the digital pin as input pinMode(PinSSR3, OUTPUT); // sets the digital pin as input pinMode(PinSSR4, OUTPUT); // sets the digital pin as input pinMode(PinSSR5, OUTPUT); // sets the digital pin as input pinMode(PinSSR6, OUTPUT); // sets the digital pin as input pinMode(PinSSR7, OUTPUT); // sets the digital pin as input pinMode(PinSSR8, OUTPUT); // sets the digital pin as input TargetTemp1 = EEPROM.read(0); TargetTemp2 = EEPROM.read(2); TargetTemp3 = EEPROM.read(4); TargetTemp4 = EEPROM.read(6); TargetTemp5 = EEPROM.read(14); TargetTemp6 = EEPROM.read(16); TargetTemp7 = EEPROM.read(18); TargetTemp8 = EEPROM.read(20); ether.begin(sizeof Ethernet::buffer, mymac, 53); ether.dhcpSetup(); } const char http_OK[] PROGMEM = "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\n" "Pragma: no-cache\r\n\r\n" "<!DOCTYPE html>" "<html><head>" "<meta http-equiv='refresh' content='120'/>" "<meta charset='utf-8'>" "<title>Тёплые полы</title>" "<body>" "<center><font size=\"4\">" "<table border=\"1\" cellpadding=\"5\" style=\"width: 800px; border-collapse: collapse; border: 1px solid black;\">" "<tr style=\"background-color: silver\"><td>Помещение:</td>" "<td>Ванна</td>" "<td>Прихожая</td>" "<td>Зал</td>" "<td>Кухня</td>" "<td>Ванна2</td>" "<td>Прихожая2</td>" "<td>Зал2</td>" "<td>Кухня2</td></tr>"; const char http_Found[] PROGMEM = "HTTP/1.0 302 Found\r\n" "Location: /\r\n\r\n"; const char http_Unauthorized[] PROGMEM = "HTTP/1.0 401 Unauthorized\r\n" "Content-Type: text/html\r\n\r\n" "<h1>401 Unauthorized</h1>"; //$D = word data type //$L = long data type //$S = c string //$F = progmem string //$E = byte from the eeprom. static word homePage() { bfill.emit_p(http_OK); bfill.emit_p(PSTR( "<tr><td>Температура:</td>" "<td>$S °C</td>" "<td>$S °C</td>" "<td>$S °C</td>" "<td>$S °C</td>" "<td>$S °C</td>" "<td>$S °C</td>" "<td>$S °C</td>" "<td>$S °C</td></tr>"), chartemp1, chartemp2, chartemp3, chartemp4, chartemp6, chartemp6, chartemp7, chartemp8 ); bfill.emit_p(PSTR("<tr><td>Обогрев:</td>")); if ( digitalRead(PinSSR1) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR2) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR3) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR4) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR5) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR6) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR7) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } if ( digitalRead(PinSSR8) == LOW ) { bfill.emit_p(PSTR("<td><font color=green><b>ВКЛ</b></font></td>")); } else { bfill.emit_p(PSTR("<td><font color=red><b>ВЫКЛ</b></font></td>")); } bfill.emit_p(PSTR("</tr><tr><td>Цель:</td>")); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp1); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp2); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp3); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp4); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp5); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp6); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp7); bfill.emit_p(PSTR("<td>$D °C</td>"), TargetTemp8); bfill.emit_p(PSTR("</tr><tr><td>Установить:</td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp1 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp2 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp3 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp4 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp5 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp6 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp7 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("<td><form><input type=text name=ttemp8 size=10> <input type=submit value=ОК> </form></td>")); bfill.emit_p(PSTR("</tr></table>" "</font></center></body></html>")); return bfill.position(); } void loop(void) { temp1=tempread(sensor1); dtostrf(temp1, 4, 2, chartemp1); temp2=tempread(sensor2); dtostrf(temp2, 4, 2, chartemp2); temp3=tempread(sensor3); dtostrf(temp3, 4, 2, chartemp3); temp4=tempread(sensor4); dtostrf(temp4, 4, 2, chartemp4); temp5=tempread(sensor5); dtostrf(temp5, 4, 2, chartemp5); temp6=tempread(sensor6); dtostrf(temp6, 4, 2, chartemp6); temp7=tempread(sensor7); dtostrf(temp7, 4, 2, chartemp7); temp8=tempread(sensor8); dtostrf(temp8, 4, 2, chartemp8); if (temp1<TargetTemp1-0.5) { digitalWrite(PinSSR1, LOW); SSR1on = 1; } else if (temp1>TargetTemp1+0.5) { digitalWrite(PinSSR1, HIGH); SSR1on = 0; } if (temp2<TargetTemp2-0.5) { digitalWrite(PinSSR2, LOW); SSR2on = 1; } else if (temp2>TargetTemp2+0.5){ digitalWrite(PinSSR2, HIGH); SSR2on = 0; } if (temp3<TargetTemp3-0.5) { digitalWrite(PinSSR3, LOW); SSR3on = 1; } else if (temp3>TargetTemp3+0.5){ digitalWrite(PinSSR3, HIGH); SSR3on = 0; } if (temp4<TargetTemp4-0.5) { digitalWrite(PinSSR4, LOW); SSR4on = 1; } else if (temp4>TargetTemp4+0.5){ digitalWrite(PinSSR4, HIGH); SSR4on = 0; } if (temp5<TargetTemp5-0.5) { digitalWrite(PinSSR5, LOW); SSR5on = 1; } else if (temp5>TargetTemp5+0.5) { digitalWrite(PinSSR5, HIGH); SSR5on = 0; } if (temp6<TargetTemp6-0.5) { digitalWrite(PinSSR6, LOW); SSR6on = 1; } else if (temp6>TargetTemp6+0.5){ digitalWrite(PinSSR6, HIGH); SSR6on = 0; } if (temp7<TargetTemp7-0.5) { digitalWrite(PinSSR7, LOW); SSR7on = 1; } else if (temp7>TargetTemp7+0.5){ digitalWrite(PinSSR7, HIGH); SSR7on = 0; } if (temp8<TargetTemp8-0.5) { digitalWrite(PinSSR8, LOW); SSR8on = 1; } else if (temp8>TargetTemp8+0.5){ digitalWrite(PinSSR8, HIGH); SSR8on = 0; } word len = ether.packetReceive(); word pos = ether.packetLoop(len); if (pos) { bfill = ether.tcpOffset(); char *data = (char *) Ethernet::buffer + pos; if (strncmp("GET /", data, 5) != 0) { bfill.emit_p(http_Unauthorized); } else { data += 5; if (data[0] == ' ') { homePage(); } else if (strncmp( "?ttemp1=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp1") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp1 = value; EEPROM.write(0, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp2=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp2") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp2 = value; EEPROM.write(2, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp3=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp3") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp3 = value; EEPROM.write(4, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp4=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp4") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp4 = value; EEPROM.write(6, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp5=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp5") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp5 = value; EEPROM.write(14, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp6=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp6") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp6 = value; EEPROM.write(16, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp7=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp7") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp7 = value; EEPROM.write(18, value); } } bfill.emit_p(http_Found); } else if (strncmp( "?ttemp8=" , data , 8 ) == 0) { if (ether.findKeyVal(data + 1, TargetTemperarureTextbox , sizeof TargetTemperarureTextbox , "ttemp8") > 0) { byte value = atoi(TargetTemperarureTextbox); // command to convert a string to number if ((value >=0) && (value <=100)) //if the temperature entered is within the range of 0-100 { TargetTemp8 = value; EEPROM.write(20, value); } } bfill.emit_p(http_Found); } } ether.httpServerReply(bfill.position()); } } float tempread(byte sensoraddr[]) // error codes: // -1 no sensors found // -2 invalid CRC // -3 not a DS1820 { byte i; byte present = 0; byte data[12]; byte addr[8]; //int HighByte, LowByte, TReading, SignBit, Tc_100, Tf_100, Whole, Fract; for ( i = 0; i < 8; i++) { addr[i]=sensoraddr[i]; } ds.reset(); // pulse the pins and wait for a response to reset the DS1820 ds.select(addr); // 0x55 (MATCH_ROM) followed by the address of the 1820 to talk to. // ds.write(0x44,1); // start conversion, with parasite power on at the end ds.write(0x44,0); //PARASITE POWER OFF // delay(800); present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } int16_t raw = (data[1] << 8) | data[0]; float temp = (float)raw / 16.0; return temp; }
но этот код не запустился, так как не хватает памяти.
Ищу исполнителя на переделку кода под W5100, что бы сама страница хранилась на карте памяти. Если возможно, то вместо HTML что бы использовался XML (в планах написать виджет под андроид).
Для связи использовать мыло deuce575@outlook.com в теме написать Arduino (что бы в спам не попало).
какой памяти не хватает у меги? всё там хватает, там еще вагон памяти.
Делаю так: во втором скетче закоментировал все строки, которые добавил копипастом. Начинаю по одной раскоменчивать. После добавления строки где ставится или ВКЛ или ВЫКЛ страница перестает открываться в браузере. Про память сказали в другой ветке форума. Сам я не силен в кодинге. Я даже не начинающий.... Так..... Случайно подсмотревший. Потому и склонился к мысли, что раз сам не умею, то проще заплатить тому, кто умеет. Правда, желающих не шибко много :(
Делаю так: во втором скетче закоментировал все строки, которые добавил копипастом. Начинаю по одной раскоменчивать. После добавления строки где ставится или ВКЛ или ВЫКЛ страница перестает открываться в браузере. Про память сказали в другой ветке форума. Сам я не силен в кодинге. Я даже не начинающий.... Так..... Случайно подсмотревший. Потому и склонился к мысли, что раз сам не умею, то проще заплатить тому, кто умеет. Правда, желающих не шибко много :(
Веб сервер на меге, странички c SD карты от 20 тыр, исходники - отдельная оплата.
Веб сервер на меге, странички c SD карты от 20 тыр, исходники - отдельная оплата.
А что же я получу за 20к, если исходники - отдельная плата? Теоретическое описание того, как все это работает?
Deuce, не найдете исполнителя - напишите.
StudioGippopotam@gmail.com
Всем спасибо за предложения, вопрос снят всвязи с самостоятельным решением вопроса.