Allora ragazzi...
Ho cercato grazie alle vostre basi ed ai vostri consigli di abbozzare qualcosa.
So già che molto probabilmente ci saranno degli errori, ma perlomeno si compila. ![]()
Mi farebbe piacere avere qualche feedback per capire se mi sono rimesso sulla retta via...
// Inclusione librerie
#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal.h>
// Definizione costanti e variabili
const int rs = 0, en = 1, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
const int Min = 6, Max = 7;
const int Echo = 8, Trig = 9;
int stato = 1;
// Definizione caratteri del caricamento durante l'avvio
byte avvio[8] = {
B11111,
B00000,
B11111,
B11111,
B11111,
B11111,
B00000,
B11111
};
// Definizione MAC Address, IP Address e Porta
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 178, 49);
EthernetServer server(80);
// Definizione pin schermo LCD
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
//Inizializzazione Ethernet Shield
Ethernet.init(10);
Ethernet.begin(mac, ip);
server.begin();
// Definizione pin
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
pinMode(Min,OUTPUT);
pinMode(Max,OUTPUT);
// Finto boot: Nome creatore del sistema + caricamento --> Nome del sistema
lcd.createChar(1, avvio);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(" CMV SISTEMI ");
delay(1000);
for(int i=-1;i<15;i++) {
lcd.setCursor(i+1,1);
lcd.write(1);
delay(500);
}
delay(1000);
lcd.clear();
delay(250);
lcd.setCursor(0,0);
lcd.print(" MONITORAGGIO ");
delay(200);
lcd.setCursor(0,1);
lcd.print(" RISERVA IDRICA ");
delay(4000);
lcd.clear();
}
void loop() {
//Attivazione sensore
digitalWrite(Trig, LOW);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
//Calcolo distanza
long durata = pulseIn(Echo, HIGH);
long distanza = 0.034 * durata / 2;
return distanza;
//Calcolo livello
int liv = 100 - (((distanza-18)*100)/110) ; // (distanza-18) : livello = 110 : 100
//100 = %, 18 = cm rilevati dal sensore in più quando l'autoclave è pieno per riportare valore in tolleranza
//Macchina a stati
switch (stato){
case 0:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ANOMALIA ");
digitalWrite(Min,LOW);
digitalWrite(Max,LOW);
if (liv > 100) stato = 0;
if ((liv < 100) && (liv > 70)) stato = 1;
break;
case 1:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Autoclave: PIENO ");
digitalWrite(Min,HIGH);
digitalWrite(Max,LOW);
if (liv > 100) stato = 0;
if ((liv < 100) && (liv > 70)) stato = 1;
if ((liv < 70) && (liv > 40)) stato = 2;
break;
case 2:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Autoclave: MEDIO ");
digitalWrite(Min,HIGH);
digitalWrite(Max,LOW);
if ((liv < 100) && (liv > 70)) stato = 1;
if ((liv < 70) && (liv > 40)) stato = 2;
if (liv < 30) stato = 3;
break;
case 3:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Autoclave: VUOTO ");
digitalWrite(Min,LOW);
digitalWrite(Max,HIGH);
if ((liv < 70) && (liv > 40)) stato = 2;
if (liv < 30) stato = 3;
break;
}
delay(200);
//Server
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
//Pagina HTML
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 5");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<title> Sistema Di Monitoraggio Riserva Idrica </title>");
client.println("</head>");
client.println("<body>");
client.println("<h2 align='center'><font color='gray'> CMV Sistemi </font></h2>");
client.println("<h1 align='center'> Sistema Di Monitoraggio Riserva Idrica </h1>");
client.println("
");
client.println("<p table align='center'>");
client.println("<tr><b>Autoclave: </b></tr>");
client.print("<tr>");
// Stato
if (stato == 0){
client.print ("Anomalia");
} else if (stato == 1){
client.print ("Pieno");
} else if (stato == 2){
client.print ("Medio");
} else if (stato == 3){
client.print ("Vuoto");
}
client.print("</tr>");
client.println("
");
client.println("<tr><b>Autoclave: </b></tr>");
client.print("<tr>");
client.print(liv);
client.print("%</tr>");
client.println("</p>");
client.println("</body>");
client.println("</html>");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
}