Re,
J'ai testé et débuggé ton code, il est désormais 100% fonctionnel ![]()
Deux petites remarques :
- Les valeurs constantes sont par convention déclaré en const, cela permet au compilateur d'optimisé un peu derrière
- Une valeur < 255 tient dans un byte (1 octet) pas la peine d'utiliser un int (2 octets) pour si peu
Tu avais aussi fait une erreur d'inattention :
if(str == "1")
(...)
else if(str == "2") // tu avais oublié le else ![]()
(...)
else
(...)
Ps: C'est un sujet intéréssant ce systéme de XML, j'en ferais bien un article sur mon blog (si ça te dérange pas bien sur, je voudrai pas que cela puisse nuire à ton sujet), d'accord / pas d'accord ?
#include <SPI.h> // Librairie SPI pour la communication hardware
#include <Ethernet.h> // Librairie Ethernet
byte mac[] = { // Adresse MAC (n'importe quelle adresse fait l'affaire)
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(213, 186, 33, 4); // Adresse IP du serveur distant (ici mon serveur web local)
EthernetClient client; // Création d'un objet EthernetClient
const byte ledPin = 5; // LED connectée à la LED de monter
const byte ledPin2 = 6; // LED connectée à la LED de descente
const byte ledPin3 = 7; // LED connectée à la LED d'erreur
// setup()
void setup() {
pinMode(ledPin, OUTPUT); // Met la broche numérique en sortie
pinMode(ledPin2, OUTPUT); // Met la broche numérique en sortie
pinMode(ledPin3, OUTPUT); // Met la broche numérique en sortie
Serial.begin(9600); // Initialisation du port série
if (!Ethernet.begin(mac)) { // Obtention d'une adresse IP par DHCP
Serial.println("Erreur DHCP");
for(;;); // En cas d'erreur on bloque le programme dans une boucle infini
}
Serial.println("DHCP OK");
}
// loop()
void loop()
{
String str; // Chaine de char contenant une ligne de la réponse HTTP
char c;
delay(10000); // Delai entre deux requétes
if (client.connect(server, 80)) { // Connexion au serveur web
client.println("GET /flux.xml HTTP/1.0"); // Demande de flux.xml en HTTP 1.1
client.println("Host: www.e-wok.fr"); // Virtual Host
client.println("Accept: */*"); // */
// A cause d'un bug de l'ide arduino tout /* d'ou avoir son */ même dans une chaine de char
client.println();
client.println();
}
else {
Serial.println("Erreur TCP"); // Si erreur lors de la connexion
return; // Quitte loop()
}
for(;;) { // Boucle infini
if(client.available()) { // Si des données son disponible sur l'objet EthernetClient
c = client.read(); // Lecture d'un octet
if(c == '\n') { // Si fin de ligne atteinte
// (Pensez à mettre une ligne vide à la fin de flux.xml)
if(str.startsWith("<action>")) { // Si la ligne commence par <action>
Serial.println(str);
str.replace("<action>", ""); //
str.replace("</action>", ""); // Enléve les balises XML
if(str == "1") // Si le flux contient "1" on ouvre le volet. (allumage de la LED du pin 5)
{
digitalWrite(ledPin, HIGH); // Allume la LED
delay(1000); // Attend une seconde
}
else if(str == "2") // Si le flux contient "2" on ferme le volet. (allumage de la LED du pin 6)
{
digitalWrite(ledPin2, HIGH); // Allume la LED
delay(1000); // Attend une seconde
}
else // Si le flux contient autre chose il ya un un probleme, on fait clignoter la LED de probleme. (LED du pin 7)
{
digitalWrite(ledPin3, HIGH); // Allume la LED
delay(1000); // Attend une seconde
digitalWrite(ledPin3, LOW); // Eteint la LED
delay(1000); // Attend une seconde
}
break; // Sort de la boucle infini
}
str = ""; // Vidage de la ligne
}
else
str += c; // Concaténation de l'octet recu dans la chaine de char
}
if(!client.connected()) // Si la connexion a été perdu
break; // Sorti de la boucle infini
}
client.stop(); // Fermeture de la connexion avec le serveur
}