Ciao,
volevo implementare una specie di login che mi abiliti o meno a accedere all' applicazione stessa che carico sul mio Arduino + ETH shield. Copiando uno sketch di un post precedente avevo pensato di fare questo:
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 0, 4 }; // ip in lan
byte gateway[] = { 192, 168, 0, 1 }; // ip in lan
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(80); //server port
String readString; //string
boolean LED1ON = false; //LED1 status flag
boolean LED2ON = false; //LED2 status flag
boolean LED3ON = false; //LED3 status flag
boolean login=false;
void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
Serial.begin(9600);
}
void loop(){
Client client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
readString.concat(c);
if (c == '\n' && currentLineIsBlank) {
Serial.print(readString);
if(readString.indexOf("Nome=pippo&Pwd=pluto") > 0) {
login=true;
} else {
login=false;
}
if(login=true){
if(readString.indexOf("L=1") > 0) {
digitalWrite(6, HIGH); // set the LED on
LED1ON = true;
}else
if(readString.indexOf("L=01") > 0)
{
//led has to be turned OFF
digitalWrite(6, LOW); // set the LED OFF
LED1ON = false;
}
if(readString.indexOf("L=2") > 0) {//lets check if LED should be lighted
//led has to be turned ON
digitalWrite(7, HIGH); // set the LED on
LED2ON = true;
}else
if(readString.indexOf("L=02") > 0)
{
//led has to be turned OFF
digitalWrite(7, LOW); // set the LED OFF
LED2ON = false;
}
if(readString.indexOf("L=3") > 0) {//lets check if LED should be lighted
//led has to be turned ON
digitalWrite(8, HIGH); // set the LED on
LED3ON = true;
}else
if(readString.indexOf("L=03") > 0)
{
//led has to be turned OFF
digitalWrite(8, LOW); // set the LED OFF
LED3ON = false;
}
}
// INIZIO DICHIARAZIONE PAGINA HTML
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
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>");
// Finestra di login
client.print("<form action='http://192.168.0.4/'>");
client.print("Nome");
client.print("utente: <input name='Nome' value=''>");
client.print("Password: <input type='Password' name='Pwd' value=''>");
client.print("<input type='submit' value=' OK '>");
client.print("</form>");
if (login=true) {
//Primo led
client.println("<hr />");
client.println("<h1>LED1</h1>");
client.println("
");
//printing LED status
client.print("<span>STATO LED: </span>");
if (LED1ON) {
client.println("<span style='color:green'>ON</span>");
}
else
{
client.println("<span style='color:grey'>OFF</span>");
}
client.print("<h2><a href='/?L=1'>ON</a> | <a href='/?L=01'>OFF</a></h2>");
client.println("<hr />");
//Secondo led
client.println("<h1>LED2</h1>");
client.println("
");
//printing LED status
client.print("<span>STATO LED: </span>");
if (LED2ON) {
client.println("<span style='color:green'>ON</span>");
}
else
{
client.println("<span style='color:grey'>OFF</span>");
}
client.print("<h2><a href='/?L=2'>ON</a> | <a href='/?L=02'>OFF</a></h2>");
client.println("<hr />");
//terzo led
client.println("<h1>LED3</h1>");
client.println("
");
//printing LED status
client.print("<span>STATO LED: </span>");
if (LED3ON) {
client.println("<span style='color:green'>ON</span>");
}
else
{
client.println("<span style='color:grey'>OFF</span>");
}
client.print("<h2><a href='/?L=3'>ON</a> | <a href='/?L=03'>OFF</a></h2>");
} //chiude if login=true
client.println("</body></html>");
//clearing string for next read
readString="";
//stopping client
client.stop();
}
}
}
}
}
Con la verifica del login (es.: ho messo nome utente:pippo, psw:pluto) pensavo di visualizzare il resto della pagina ma è come se il programma se ne fregasse altamente di come è settata la variabile e non filtra niente. Dove sbaglio? C' è eventualmente un modo migliore per avere un mini log-in?
Grazie.