sto cercando di realizzare un piccolo impianto domotico e gestire un paio di led utilizzando arduino uno + arduino ethernet shield.
Sono riuscito a fare il tutto e ora sto cercando di fare un passo in più ed è dove mi sono bloccato. Voglio accendere/spegnere
i led tramite pulsante e la cosa mi riesce. Il problema è che non so come faccio a cambiare lo stato del led sul pc! Facendo l' accensione/spegnimento da pc non ci sono problemi invece utilizzando il bottone(quello classico che si trova negli starter kit) non capisco come si faccia. Cercando in rete ho trovato qualcosa con ajax ma non capivo molto bene il codice.
Come posso risolvere questo problema?
Stai aprendo thread in lingua italiana nella sezione internazionale ma, soprattutto, thread doppi perché non trovi esaurienti le risposte che ricevi e pensi che domandare 2 volte la stessa cosa possa aiutare. Forse sarebbe il caso di chiedersi se, come da regolamento, sei tu che non hai fornito tutte le informazioni circa il problema da risolvere e gli altri non possono aiutarti perché non sanno cosa vuoi fare.
@Munna94, vediamo se ho capito cosa vuoi fare.
Hai una pagina web per accendere/spegnere un led dalla pagina, però vuoi avere anche fisicamente un pulsante.
Naturalmente il pulsante se cambia stato del led, deve anche "modificare" lo stato del led sulla pagina web.
Ho capito quello che vuoi fare?
Questo è il codice che utilizzo. E' la gestione di 2 led da web, ma appena il tutto funziona li aumenterò.
E solo un led ha il bottone perchè finchè non va non ha senso metterlo anche all' altro.
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDD, 0xAB, 0xCE, 0xFF, 0xEE, 0xED }; // MAC ADDRESS della scheda ethernet arduino
byte ip[] = { 192, 168, 1, 9};
EthernetServer server(80); // la porta 80 è quella comune per la comunicazione
const int pin_uno = 2;
const int pin_due = 7;
int bottone = 8;
int statoLed = LOW;
void setup()
{
Serial.begin(9600);
pinMode(pin_uno, OUTPUT);
pinMode(pin_due, OUTPUT);
// Connetto la shield e attivo il server su arduino per la comunicazione
Ethernet.begin(mac, ip);
server.begin();
digitalWrite(pin_uno, LOW);
digitalWrite(pin_due, LOW);
}
void loop()
{
// Controllo se un client sta inviando richieste al server
EthernetClient client = server.available();
//gestione del bottone di un led
int leggiBottone=digitalRead(bottone);
if (leggiBottone == 1)
{
if (statoLed == LOW)
{
statoLed = HIGH;
digitalWrite(pin_uno, statoLed);
delay(500);
} else {
statoLed = LOW;
digitalWrite(pin_uno, statoLed);
delay(500);
}
}
//fine gestione led
// Se esiste il client di arduino
if (client)
{
// ed è connesso
while (client.connected())
{
// ed è raggiungibile
if (client.available())
{
// vado a vedere se sono stati inserite delle richieste
if ( client.find("GET /") )
{
if(client.findUntil("?", "\n\r")){ // finduntil è una funzione che mi permette di vedere quel che c'è tra il ? e la fine riga indentificata da \n\r
char carattere = client.read();
if ( carattere == 'u' ) { onoff( pin_uno ); }
if ( carattere == 'd' ) { onoff( pin_due ); }
}
// html
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
int uno = digitalRead(pin_uno);
int due = digitalRead(pin_due);
client.print("
");
client.print("<a href='http://192.168.1.9");
client.print("?u'>");
client.print("LUCE UNO: ");
client.print("</a>");
if (uno==0) { client.print("<span style='color:red'><b>SPENTO</b></span>"); }
else { client.println("<span style='color:green'><b>ACCESO</b></span>"); }
client.print("
");
client.print("<a href='http://192.168.1.9");
client.print("?d'>");
client.print("LUCE DUE: ");
client.print(
if (due==0) { client.print("<span style='color:red'><b>SPENTO</b></span>"); }
else { client.println("<span style='color:green'><b>ACCESO</b></span>"); }
break; //mi evita un loop e che si blocchi.. ? non ho ben capito perchè ci vada..
}
}
}
// finita la richiesta fermo il client
delay(1);
client.stop();
}
}
//funzione per aggiornare le luci
void onoff(int pin_acc)
{
int stato_led = digitalRead(pin_acc);
if ( stato_led == LOW ) { digitalWrite(pin_acc, HIGH); }
else if ( stato_led == HIGH ) { digitalWrite(pin_acc, LOW); }
}
Non conosco la programmazione web, leggendo qualche post, credo che o si usi Ajax oppure JQeury per poter modificare solo una parte della pagina quando premi il pulsante. E' solo una indicazione generica.
Attendi un parere mooolto più attendibile e utile del mio. Sorry.