Тема: W5500 - терморегулятор
Основная статья - http://rcl-radio.ru/?p=77830
Оптимизация памяти
Скетч использует 16708 байт (51%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 498 байт (24%) динамической памяти, оставляя 1550 байт для локальных переменных. Максимум: 2048 байт.
#include <SPI.h>
#include <Ethernet2.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
OneWire oneWire(A0);
DallasTemperature t(&oneWire);
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(10,42,0,100);
EthernetServer server(80);
float temp;
int reg,w,flag;
String readString = String(30);
const byte gis = 1; // гистерезис 1 градус
void setup() {
Serial.begin(9600);
t.begin();
t.setResolution(12);// 12 bit 18b20
Ethernet.begin(mac, ip);
server.begin();
Serial.print("IP: ");
pinMode(3, OUTPUT); // D3 управление реле нагревательного элемента
reg = EEPROM.read(0);
}
void loop() {
t.requestTemperatures();
temp = t.getTempCByIndex(0);
if(reg >= (int)temp + gis){digitalWrite(3,HIGH);flag=1;}
if(reg <= (int)temp - gis){digitalWrite(3,LOW);flag=0;}
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 30){readString.concat(c);}//Serial.print(c);
if (c == '\n') {
int a;
a = readString.indexOf("?temp=");if(a>0){reg = readString.substring(a+6, a+9).toInt();w=1;
if(reg<0){reg=0;}if(reg>125){reg=125;}}
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println(F("Connection: close"));
client.println(F("Refresh: 10")); // время обновления страницы
client.println();
client.println(F("<!DOCTYPE HTML>"));
client.println(F("<html><meta charset='UTF-8'>"));
client.println(F("<style>.tab1 {background-color:#F5F5F5;border-radius: 5px;margin: auto;}</style>"
"<br><TABLE class='tab1' align='center' width='470' BORDER='1' cellspacing='0' cellpadding='10'>"
"<td><center><big><b>Терморегулятор DS18B20</b></big></td><tr><td><center>"));
client.println(F("<h1>Температура: "));
client.println(temp);
client.println(F(" °C</h1>"
"</td><tr><td align='center'>Установка температуры регулирования (0...125°C)"));
client.println(F("<form action='' method='GET'>"
"<br><input type='text' name='temp' autocomplete='off' size='1'></input> "
"<button>Подтвердить</button></form></td><tr>"));
client.println(F("<td><center>Температура регулировки: <b>"));
client.println(reg);
client.println(F("°C</b><br>"));
if(flag==1){client.print(F("ON"));}
if(flag==0){client.print(F("OFF"));}
client.println(F("</td></table></center>"));
client.println(F("</html>"));
readString="";
break;
}
}
}
if(w==1){w=0;EEPROM.update(0,reg);}
delay(1);
client.stop();
Serial.println("client disconnected");
}
}