Étape 4: Le programme
L’esquisse de l’arduino est basé sur l’exemple de webserver.pde avec quelques modifications. Une copie de mon croquis est post ci-dessus pour le téléchargement facile.J’ai utiliser quelques trucs pour charger une page web avec plus d’informations. Le code HTML est stocké dans la mémoire de programme, donc, nous avons assez de RAM pour les autres choses. Des questions sur le code il suffit de demander.
Astuce : après avoir Télécharger le fichier, renommez-le de .tmp .ino si nécessaire
Voici le code :
#include < Ethernet.h >
#include < SPI.h >
#include < avr/pgmspace.h >
prog_char string_0 [] PROGMEM = "< html >< corps >< h2 > Controle de LED pela Internet < / h2 >< taille de la police = 4 >< former méthode achete = >" ;
prog_char string_1 [] PROGMEM = "< br >< input type = soumettre nom = valeur b1 = Led1 >" ;
prog_char string_2 [] PROGMEM = "< br >< input type = soumettre nom = valeur b2 = Led2 >" ;
prog_char string_3 [] PROGMEM = "< br >< input type = soumettre nom = valeur b3 = DEL3 >" ;
prog_char string_4 [] PROGMEM = "< br >< input type = soumettre nom = valeur b4 = Led4 >" ;
prog_char string_5 [] PROGMEM = "" ; "< br > insérer votre nom ici:" ;
prog_char string_6 [] PROGMEM = "" ; « < nom d’entrée = valeur msg = no_name MAXLENGTH = 20 > » ;
prog_char string_7 [] PROGMEM = "< / form >< body / >< / html >" ;
prog_char string_8 [] PROGMEM = "Ligada (ON)" ;
prog_char string_9 [] PROGMEM = "Desligada" (arrêt) ;
prog_char string_10 [] PROGMEM = "< meta http-equiv = content de rafraîchissement = 30 > » ; pour l’actualisation automatique
Les const char PROGMEM * [] string_table = / / changer le nom de "string_table" en fonction de
{
string_0,
string_1,
string_2,
string_3,
string_4,
String_5,
string_6,
string_7,
string_8,
string_9,
string_10
};
tampon de char [85] ; Assurez-vous que c’est assez grand pour la plus grande chaîne qu'il doit détenir
la mac de Byte [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED} ;
la propriété intellectuelle de Byte [] = {192, 168, 1, 134} ;
la passerelle de Byte [] = {192, 168, 1, 1} ;
sous-réseau Byte = {255, 255, 255, 0} ;
String inString = String(35) ;
EthernetServer server(8246) ;
led1 booléen = false ;
led2 booléen = false ;
led3 booléen = false ;
led4 booléen = false ;
String msg = "" ;
tam int = 0 ;
int st1 = 9, st2 = 9, st3 = 9, st4 = 9 ;
void setup()
{
Serial.Begin(9600) ;
Ethernet.Begin (mac, ip, passerelle, sous-réseau) ;
Server.Begin() ;
Serial.println ("Serial READY") ;
Serial.println ("Ethernet READY") ;
Serial.println ("Server READY") ;
pinMode(4,OUTPUT) ;
pinMode(5,OUTPUT) ;
pinMode(6,OUTPUT) ;
pinMode(7,OUTPUT) ;
pinMode(8,INPUT) ;
pinMode(9,INPUT) ;
}
void loop()
{
EthernetClient client = server.available() ;
int mené = 0 ;
Si {(client)
une requête http se termine par une ligne vide
Boolean current_line_is_blank = true ;
tandis que (client.connected()) {}
Si (client.available()) {}
char c = client.read() ;
Si nous avons appris à la fin de la ligne (a reçu un saut de ligne
caractère) et la ligne est vide, la requête http est terminée,
afin que nous puissions envoyer une réponse
Si (inString.length() < 35) {}
inString.concat(c) ;
}
Si (c == « \n » & & current_line_is_blank) {}
if(inString.IndexOf("B1") > 0) {}
{if(LED1==false)}
ST1 = 8 ;
LED1 = true ;
digitalWrite(4,HIGH) ;
}
else {}
ST1 = 9 ;
LED1 = false ;
digitalWrite(4,LOW) ;
}
a = 1 ;
}
if(inString.IndexOf("B2") > 0) {}
{if(LED2==false)}
ST2 = 8 ;
LED2 = true ;
digitalWrite(5,HIGH) ;
}
else {}
ST2 = 9 ;
LED2 = false ;
digitalWrite(5,LOW) ;
}
a = 2 ;
}
if(inString.IndexOf("B3") > 0) {}
{if(LED3==false)}
ST3 = 8 ;
LED3 = true ;
digitalWrite(6,HIGH) ;
}
else {}
ST3 = 9 ;
LED3 = false ;
digitalWrite(6,LOW) ;
}
a = 3 ;
}
if(inString.IndexOf("B4") > 0) {}
{if(LED4==false)}
ST4 = 8 ;
LED4 = true ;
digitalWrite(7,HIGH) ;
}
else {}
ST4 = 9 ;
LED4 = false ;
digitalWrite(7,LOW) ;
}
a = 4 ;
}
/*
if(inString.IndexOf("MSG") > 0) {}
char charBuf1 [50] ;
char charBuf2 [50] ;
strcpy (msg,(char*) inString.substring (inString.indexOf ("g") +2,inString.indexOf ("H"))) ;
Serial.Print ("msg:") ;
Serial.println(MSG) ;
}
*/
Envoyer un en-tête de réponse http standard
client.println ("HTTP/1.1 200 OK") ;
client.println ("Content-Type : text/html") ;
client.println() ;
strcpy_P (tampon, (char *) pgm_read_word (&(string_table[0]))); Moulages nécessaires et déréférencement, il suffit de copier.
client.println (buffer) ;
pour (int i = 1; i < 8; i ++)
{
strcpy_P (tampon, (char *) pgm_read_word (&(string_table[i]))); Moulages nécessaires et déréférencement, il suffit de copier.
client.println (buffer) ;
{Switch(i)}
cas 1: strcpy_P (tampon, (char *) pgm_read_word (&(string_table[st1]))); client.println (buffer) ; rupture ;
cas 2: strcpy_P (tampon, (char *) pgm_read_word (&(string_table[st2]))); client.println (buffer) ; rupture ;
case 3: strcpy_P (tampon, (char *) pgm_read_word (&(string_table[st3]))); client.println (buffer) ; rupture ;
case 4: strcpy_P (tampon, (char *) pgm_read_word (&(string_table[st4]))); client.println (buffer) ; rupture ;
}
Delay(30) ;
}
{if(digitalRead(8)==High)}
client.println ("< br > Alexandre 1, ON") ;
} else {}
client.println ("< br > Alexandre 1, OFF") ;
}
{if(digitalRead(9)==High)}
client.println ("< br > Alexandre 2, ON") ;
} else {}
client.println ("< br > Alexandre 2, OFF") ;
}
strcpy_P (tampon, (char *) pgm_read_word (&(string_table[10]))); client.println (buffer) ;
rupture ;
}
Si (c == « \n ») {}
Nous commençons une nouvelle ligne
current_line_is_blank = true ;
} ElseIf (c! = « \r ») {}
Nous avons obtenu un personnage sur la ligne courante
current_line_is_blank = false ;
}
}
}
donner le temps de navigateur web pour recevoir les données
Delay(1) ;
inString = "" ;
client.Stop() ;
}
}