Salve a tutti e complimenti per questo stupendo forum, è da un mesetto che smanetto con arduino, dopo aver letto una miriade di post e guide sono riuscito ad implementare uno sketch che mi permette di controllare da remoto 3 relè, mi legge la temperatura della stanza e la quantità di luce (in quest'ultimo caso in caso di buio mi attiva un'altro relè), ora volevo chiedere a voi utenti del forum se qualcuno mi può aiutare a ottimizzare il codice, a rendere più carina la parte grafica (inoltre vorrei scrivere sulla stessa pagina "stanza illuminata" o "stanza al buio" in base ai valori di luce)... per il momento rinnovo i saluti ed i complimenti.
#define WEBDUINO_AUTH_REALM "Prova Autenticazione"
#include "SPI.h"
#include "Ethernet.h"
#include "WebServer.h"
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 239 };
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
#define PREFIX ""
WebServer webserver(PREFIX, 272);
boolean Rele1 = false;
boolean Rele2 = false;
boolean Rele3 = false;
//variabili globali per misurare la temperatura
int val_Adc = 0; // pin analogico IN TMP36
float temp=0;
float tempreg = 25.0; // temperatura di controllo in celsius
//variabili globali per misurare la luce
int light; // variabile da calcolare
int ledPinlux = 2; // pin led fotoresistenza
int photoresistor = 1; // pin analogico IN fotoresistore
/*end fotoresistore*/
void defaultCmd(WebServer &server, WebServer::ConnectionType type,char *url_param, bool param_complete)
{
server.httpSuccess();
if (type != WebServer::HEAD)
{
String s = "";
if (param_complete == true)
{
s = url_param;
if ( s == "R1=ON")
{
Rele1 = true;
digitalWrite(3, HIGH);
}
else if ( s == "R1=OFF")
{
Rele1 = false;
digitalWrite(3, LOW);
}
if ( s == "R2=ON")
{
Rele2 = true;
digitalWrite(5, HIGH);
}
else if ( s == "R2=OFF")
{
Rele2 = false;
digitalWrite(5, LOW);
}
if ( s == "R3=ON")
{
Rele3 = true;
digitalWrite(6, HIGH);
}
else if ( s == "R3=OFF")
{
Rele3 = false;
digitalWrite(6, LOW);
}
}
P(helloMsg) = "<h1>Progetto Domotico Antonio</h1><a href=\"private.html\">Accesso</a>";
server.printP(helloMsg);
server.print("<h2>User = admin Password = anno di nascita Antonio</h2>");
}
}
void privateCmd(WebServer &server, WebServer::ConnectionType type,
char *url_param, bool param_complete)
{
String s = "";
if (param_complete == true)
{
s = url_param;
if ( s == "R1=ON")
{
Rele1 = true;
digitalWrite(3, HIGH);
}
else if ( s == "R1=OFF")
{
Rele1 = false;
digitalWrite(3, LOW);
}
if ( s == "R2=ON")
{
Rele2 = true;
digitalWrite(5, HIGH);
}
else if ( s == "R2=OFF")
{
Rele2 = false;
digitalWrite(5, LOW);
}
if ( s == "R3=ON")
{
Rele3 = true;
digitalWrite(6, HIGH);
}
else if ( s == "R3=OFF")
{
Rele3 = false;
digitalWrite(6, LOW);
}
}
{
if (server.checkCredentials("YWRtaW46MTk4Mw=="))
{
server.httpSuccess();
if (type != WebServer::HEAD)
{
P(helloMsg) = "<h1>Benvenuto</h1>";
server.print("<table border=\"1\">");
server.print("<tr><td>Stato Rele</td><td>Comandi</td></tr>");
if(Rele1 == true)
server.print("<tr><td style=\"color: red;\">RELE 1 ON</td><td>");
else
server.print("<tr><td style=\"color: black;\">RELE 1 OFF</td><td>");
if(Rele1 == false)
server.print("<input type= button value='Accendi'onclick=\"location.href='private.html?R1=ON'\">");
else
server.print("<input type= button value='Spegni'onclick=\"location.href='private.html?R1=OFF'\">");
server.print("</td></tr>");
if(Rele2 == true)
server.print("<tr><td style=\"color: red;\">RELE 2 ON</td><td>");
else
server.print("<tr><td style=\"color: black;\">RELE 2 OFF</td><td>");
if(Rele2 == false)
server.print("<input type= button value='Accendi'onclick=\"location.href='private.html?R2=ON'\">");
else
server.print("<input type= button value='Spegni'onclick=\"location.href='private.html?R2=OFF'\">");
server.print("</td></tr>");
if(Rele3 == true)
server.print("<tr><td style=\"color: red;\">RELE 3 ON</td><td>");
else
server.print("<tr><td style=\"color: black;\">RELE 3 OFF</td><td>");
if(Rele3 == false)
server.print("<input type= button value='Accendi'onclick=\"location.href='private.html?R3=ON'\">");
else
server.print("<input type= button value='Spegni'onclick=\"location.href='private.html?R3=OFF'\">");
server.print("</td></tr>");
server.printP(helloMsg);
server.println("<p>Temperatura Salotto = ");
server.print(temp);
server.println(" °C
</p>");
server.println("<p>Illuminazione = ");
server.print(analogRead(light));
server.println("
</p>");
{
if (temp < tempreg) {
// scrive sul web freddo se il valore del termistore è basso
server.print("<p><strong>FREDDO</strong></p>");
}
else {
// scrive sul web caldo se il valore del termistore è alto
server.print(" <p><strong>CALDO</strong></p>");
}
}
server.print("</td></tr>");
}
}
else {
/* send a 401 error back causing the web browser to prompt the user for credentials */
server.httpUnauthorized();
}
}
}
void setup()
{
Ethernet.begin(mac, ip);
webserver.setDefaultCommand(&defaultCmd);
webserver.addCommand("index.html", &defaultCmd);
webserver.addCommand("private.html", &privateCmd);
webserver.begin();
delay(100);
//definisci i pin 2 3 4 in uscita
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(ledPinlux, OUTPUT);
//inizializza i le uscite
digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
void loop()
{
char buff[64];
int len = 64;
/* process incoming connections one at a time forever */
webserver.processConnection(buff, &len);
//calcolo temperatura
val_Adc = analogRead(0);
//converto il segnale acquisito in un valore
//espresso in gradi centigradi
temp = ((val_Adc * 0.00488) - 0.5) / 0.01;
delay(500);
//calcolo illuminazione
light = analogRead(photoresistor);
light = constrain(light, 0, 1023); // limiti dei valori tra 0 e 100
light = map(light, 0, 150, 255, 0);
/*fine luce*/
if (light < 150) { // accende o spengo un led se la c'è luce
digitalWrite(ledPinlux, LOW); // accendo
}
else {
digitalWrite(ledPinlux, HIGH); //spengo
}
}