superveloci qui ... :%
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
/* ***
controllare un attuatore via web
con sensori di temperatura e luce
ARDUINO UNO
ETHERNET SHIELD
by GianniFavilli.it - www.giannifavilli.it
*** */
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address
byte ip[] = { 192, 168, ***, *** }; // ip arduino internet in
byte gateway[] = { 192, 168, ***, *** }; // internet access via router
byte subnet[] = { 255, 255, ***, *** }; //subnet mask
Server server(80); //server port
int outPin = 9; // pin attuatore
//char link[]="http://www.giannifavilli.it"; //link
String readString; //string
boolean LEDON = false; // flag status attuatore
/*termistore*/ //variabili della prova con sensore MCP9700A
float temp; // variabile da calcolare
float volt; // variabile da calcolare sul sensore di temperatura
float tempPin = 1; // pin analogico IN temperature sensor
int ledPintemp = 13; // pin led termistore
float tempreg = 25.0; // temperatura di controllo in celsius
//variabili della prova con sensore TMP 36GZ
float sensortemp = 0;
float voltage = 0;
float celsius = 0;
/*end termistore*/
/*fotoresistore*/
int light; // variabile da calcolare
int ledPinlux = 12; // pin led fotoresistenza
int photoresistor = 0; // pin analogico IN fotoresistore
/*end fotoresistore*/
void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(outPin, OUTPUT);
pinMode(ledPinlux, OUTPUT);
Serial.begin(9600);
}
void loop(){
/*inizio calcolo temperatura*/
//Temp = ((5 * analogRead(inTemp) * 100.0 ) / 1024) - 50; // Codice ottimizzato
/*inizio calcolo temperatura*/
// prova 1 dati non validi
//temp = ((5 * analogRead(inTemp) * 100.0 ) / 1024) - 50; // Codice ottimizzato
// altra possibilità ( ( 5 * analogRead(PIN) * 100.0 ) / 1024 ) * 0.325;
// prova con sensor temp 36gz
sensortemp = analogRead(inTemp); //lettura dei dati nel pin analogico 1
voltage = (sensortemp*5000)/1024; // Conversione in millivolt
voltage = voltage-500; //elimino offset
celsius = voltage/10; // converto da millivolt a celsius
temp = celsius; // assegno il valore alla variabile intemp
/*
(grazie giulio400 e jumpjack)
volt = ( analogRead(tempPin) * 5) / 1024; // calcolo il valore letto e lo trasformo in valore di tensione
temp = (volt - 0.5) * 100; // conversione MCP9700A
*/
/*fine calcolo temperatura*/
/*inizio luce*/
light = analogRead(photoresistor);
light = constrain(light, 0, 1023); // limiti dei valori tra 0 e 100
light = map(light, 0, 150, 255, 0);
/*fine luce*/
/*inizio client*/
Client client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
readString.concat(c); //store characters to string
//if HTTP request has ended
if (c == '\n' && currentLineIsBlank) {
Serial.print(readString);
if(readString.indexOf("L=1") > 0) {// lettura del valore se il LED si deve accendere
// il led sarà acceso
digitalWrite(outPin, HIGH); // accendo il led
LEDON = true;
Serial.print("ON pin ");
Serial.println(outPin);
}
else
{
//il led sarà spento
digitalWrite(outPin, LOW); //sengo il led
LEDON = false;
Serial.print("OFF pin ");
Serial.println(outPin);
}
// COSTRUZIONE PAGINA HTML
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
// inizializzo pagina (da togliere se uso ajax)
client.print("<html><head><title>ARDUINO Controllo Led via WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
//inizai il body
client.println("<div style='width:360px; height:640px;'>"); //risoluzione per nokia 5800 640x360
client.println("<h1>STATUS SENSORI</h1><hr />");
//Scrive sul browser il valore del termistore
client.println("<p>TEMPERATURA = ");
client.print(temp);
client.println(" C
</p>");
if (temp < tempreg) {
// scrive sul web freddo se il valore del termistore è basso
client.print("<p><strong>FREDDO</strong></p>");
}
else {
// scrive sul web caldo se il valore del termistore è alto
client.print(" <p><strong>CALDO</strong></p>");
}
//Scrive sul browser il valore della fotoresistenza
client.println("<p>LUCE = ");
client.print(analogRead(light));
client.println("
</p>");
if (light < 150) {
// scrive sul web luce se il valore della fotoresistenza è alto
client.print("<p><strong>LUCE</strong></p>");
}
else {
// scrive sul web buio se il valore della fotoresistenza è basso
client.print(" <p><strong>BUIO</strong></p>");
}
// link per aggiornare pagina e valori
client.print("<h2>AGGIORNA SENSORI: <a href=''>CHECK</a></h2><hr />");
client.println("<h1>CONTROLLO ATTUATORI via internet</h1>");
client.println("<hr />");
client.print("<h1>PIN control n. ");
client.print(outPin);
client.println("</h1>");
client.println("
");
//scrivo il LED status
client.print("<font size='5'>PIN status: ");
if (LEDON) {
client.println("<span style='color:green; font-weight:bold;'>ON</span></font>");
}
else
{
client.println("<span style='color:grey; font-weight:bold;'>OFF</span></font>");
}
client.print("<h2><a href='/?L=1'>ACCENDI</a> | <a href='/?L=0'>SPEGNI</a></h2>");
// firma
client.println("<hr />");
client.print("<h4>Visita <a href='http://www.giannifavilli.it' target='_blank' />www.giannifavilli.it</a></h4>");
client.println("<hr />");
// chiudo il div
client.println("</div>");
// chiudo pagina da togliere se uso ajax
client.println("</body></html>");
// pulisco la stringa per la successiva lettura
readString="";
//fermo il client
client.stop();
} //if c == /n
} // if client available
} // while client connesso
} // FINE if client
if (temp < tempreg) { // accende o spengo un led se la temperatura è più bassa di quella di controllo
digitalWrite(ledPintemp, HIGH); //accendo
Serial.print("ON pin "); //scrivo in console
Serial.println(ledPintemp); //scrivo in console
}
else {
digitalWrite(ledPintemp, LOW); //spengo
Serial.print("OFF pin "); //scrivo in console
Serial.println(ledPintemp); //scrivo in console
}
if (light < 150) { // accende o spengo un led se la c'è luce
digitalWrite(ledPinlux, HIGH); // accendo
Serial.print("ON pin "); //scrivo in console
Serial.println(ledPinlux); //scrivo in console
}
else {
digitalWrite(ledPinlux, LOW); //spengo
Serial.print("OFF pin "); //scrivo in console
Serial.println(ledPinlux); //scrivo in console
}
} // fine loop