Ciao a tutti! Vi presento questo codice che sto completando per riuscire a controllare da web il mio clima. Tuttavia nel momento in cui entro nella condizione:
if( temp == 25 && page == 2)
dove dovrebbe verificare successivamente:
if(StrContains(HTTP_req, "GET /?vel1"))
questo non accade! entra nel primo if ma nel secondo esce e riparte da zero con l'inizializzazione della SD e di tutte le variabili che quindi tornano a zero e nel passaggio successivo ovviamente non entra neanche più nel primo if...
Non capisco dov'è l'errore anche perchè la sintassi mi sembra giusta...
Riuscite a darmi una mano? Se devo chiarire qualcosa non esitate a dirmelo!
Grazie
Ecco il codice:
#include <SPI.h> //Si inizia con la dichiarazione delle librerie
#include <Ethernet.h> //utili allo scopo
#include <SD.h>
#include <IRremote.h>
#include <avr/pgmspace.h>
#define REQ_BUF_SZ 20
byte MAC[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Si dichiara il MAC address
byte IP[] = { 192, 168, 1, 20 }; //unico per ogni utente e l'IP
//che gli diamo noi
PROGMEM prog_uint16_t on_1[] ={4400,4300,550,1600,500,1600,550,1600,550,1600,550,500,550,550,500,1600,550,550,500,550,550,500,550,550,550,500,550,1600,550,1600,500,550,550,1600,550,500,550,550,500,550,550,500,550,550,550,500,550,1600,550,1600,500,1600,550,1600,550,1600,550,1600,500,1600,550,1600,550,550,500,550,550,500,550,550,500,550,550,500,550,550,550,500,550,550,500,1600,550,1600,550,500,550,550,550,500,550,550,500,500,600,500,550,550,550,500,550,1600,550,500,550,550,500,550,550,500,550,550,550,1550,550,550,550,500,550,550,500,550,550,500,550,550,550,500,550,500,550,1600,550,1600,550,500,550,550,550,500,550,550,500,550,550,500,550};
EthernetClient client; //Si definisce una variabile EthernetClient di nome client
EthernetServer server(80); //Fa si che Arduino sia in ascolto sulla porta 80
File htmlFile; //Si definisce una variabile "File" della libreria SD.h
char HTTP_req[REQ_BUF_SZ] = {0};
char req_index = 0;
boolean currentLineIsBlank;
unsigned int uSendBuff[RAWBUF];
IRsend irsend;
byte page = 0;
byte temp = 0;
int i = 0;
const int ledpin = 9;
void sendAcCommand(int index) {
uint16_t rawlen;
prog_uint16_t * pfSendBuff = getAcSendBuff(index);
if (0 != pfSendBuff) {
rawlen = pgm_read_word_near(pfSendBuff);
memcpy_P(uSendBuff, pfSendBuff+1, rawlen * sizeof(uint16_t));
for(i=0;i<3;i++){
irsend.sendRaw(uSendBuff, sizeof(uSendBuff)/sizeof(int), 38);
}
}
}
prog_uint16_t * getAcSendBuff(int index) {
if ( index == 1 ) { return on_1; }
return 0;
}
void setup()
{
Serial.begin(9600); //Scelgo di inizializzare la comunicazione seriale (facoltativo)
Serial.println("Inizializzazione SD Card..."); //Scritta di "rito"
if (!SD.begin(4)) //Inizializzo la SD card sul pin 4 (CS=Card Select)
{ //Se (SD.begin!=4) ovvero che non legge la SD sul pin 4 allora
// fallisce l'inizializzazione altrimenti riesce
Serial.println("Inizializzazione SD fallita!");
return;
}
else
{
Serial.println("Inizializzazione SD riuscita!");
}
Ethernet.begin(MAC,IP); //Inizializzo la comunicazione ethernet passando
server.begin(); //MAC e IP e avvio il server
pinMode(9,OUTPUT);
digitalWrite(ledpin, LOW);
}
void loop()
{
//Ascolto client in arrivo
client = server.available(); // memorizzi la presenza di una richiesta da
// parte di un Client Web in client, in pratica quando dal
// tuo browser ti collegherai all’interfaccia web,
// Arduino riceverà una richiesta di tipo Client che
// puoi leggere con il metodo available() della
// classe server
if(client) // leggi se la variabile client contiene una richiesta da parte di un browser
// allora esegue ciò che è indicato nelle linee successive;
{
Serial.println("Nuovo client"); //Dimmi che c'è il client
currentLineIsBlank = true; //Utilizzata dopo
while (client.connected()) // inizia un ciclo impostato sulla presenza di una connessione
// da parte di un browser web, tale verifica ti evita di far
// elaborazioni durante l’assenza di connessione;
{
if(client.available()) //verifica che la connessione oltre ad essere presente sia
// anche utilizzabile;
{
char c = client.read(); // leggi il valore inviato dal client con il metodo read()
// dell’oggetto client assegnalo ad una variabile di tipo char;
if (req_index < (REQ_BUF_SZ - 1))
{
HTTP_req[req_index] = c; // save HTTP request character
req_index++;
}
Serial.println(c); // print HTTP request character to serial monitor
if(c=='\n' && currentLineIsBlank) // verifica che il carattere c letto sia un “\n” (new line)
// e che contemporaneamente la variabile current_line_is_blank
// sia settata a true
{
// Invio header standard di risposta
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnessione: close");
client.println();
Serial.println("Caricamento pagina sul server...");
if (StrContains(HTTP_req, "GET / ") || StrContains(HTTP_req, "GET /index.htm"))
{
htmlFile = SD.open("index.htm"); // open web page file
page = 1;
Serial.println(F("Pagina assegnata 1"));
}
if (StrContains(HTTP_req, "GET /index2.htm"))
{
htmlFile = SD.open("index2.htm"); // open web page file
page = 2;
Serial.println(F("Pagina assegnata 2"));
}
if (StrContains(HTTP_req, "GET /index3.htm"))
{
htmlFile = SD.open("index3.htm"); // open web page file
page = 3;
Serial.println(F("Pagina assegnata 3"));
}
if(StrContains(HTTP_req, "GET /?25"))
{
htmlFile = SD.open("index4.htm");
Serial.println(F("Temperatura assegnata 25"));
temp = 25;
}
Serial.print("Temperatura: ");
Serial.println(temp);
Serial.print("Pagina: ");
Serial.println(page);
if( temp == 25 && page == 2)
{
Serial.println(F("INGRESSO IN PRIMA PARTE CICLO"));
if(StrContains(HTTP_req, "GET /?vel1"))
{
sendAcCommand(1);
Serial.println(F("INVIO SEGNALE ACCENSIONE"));
}
}
if (htmlFile) // Se l'apertura è riuscita...
{
Serial.println("Caricamento riuscito");
while (htmlFile.available()) //Finchè il file è disponibile...
{
client.write(htmlFile.read()); // Stampo sul server il file contenuto su SD
// tramite il metodo read (File.read())
}
htmlFile.close(); //chiudo il file su SD
Serial.println("File chiuso");
}
else
{
Serial.println("Apertura del file non riuscita");
}
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
if (c == '\n')
{
currentLineIsBlank = true;
}
else if (c != '\r')
{
currentLineIsBlank = false;
}
}
}
delay(100);
client.stop();
Serial.println("Client disconnesso");
}
}