Salut Salut,
je viens finalement demander votre aide, car je me suis servis de plein de codes sur ce forum et d'autre site pour créer le code que j'ai aujourd"hui. Mais J'ai un soucis et ça fais 2 jours que je suis bloqué dessus!
Le principe de mon application:
Avec mon arduino mega, et shieldwifi, je possède un LCD. Grace à une page web du style: http://192.168.1.90/scene1/1/0 par exemple, ça active une action dans l'arduino (exemple afficher un message).
Ca marche nickel lors du premier envoie!
Mais pour les suivantes ça ne fonctionne pas! Il faut que je relance l'arduino!
Je vous joins mon code, puis les valeurs des variables! J'ai l'impression que mon histoire de slash se décale! Mais je ne vois pas ou! Help me please ami arduinoyein!
// mise en place des fichier externe
#include <SPI.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiServer.h>
#include "LiquidCrystal.h"
#include <string.h>
// Info pour connection au routeur
char ssid[] = "SFR_C0E8"; // your network SSID (name)
char pass[] = "llaxwelliativ6estura"; // your network password
int status = WL_IDLE_STATUS; // the Wifi radio's status
WiFiServer server(80); // Port 80 is http.
// Infos sur les costantes (entrées et sorties)
LiquidCrystal lcd(6,5,28,26,24,22);
//-- Definition des variables. Commands and parameters (sent by browser) --
char cmd[30]; // Nothing magical about 15, increase these if you need longer commands/parameters
char param1[30];
char param2[30];
char ALIM[30];
// definition des entrées ou sortie. Et valeurs si c'est le cas.
void SetupES() {
pinMode(2,OUTPUT); digitalWrite(2,LOW); // I use this pin as GND for the LED.
pinMode(53,OUTPUT); // Sample output, unable to use built-in LED at pin 13 because Ethernet Shield uses pins 10,11,12,13.
}
void messagedebut() {
lcd.setCursor(2,0);
lcd.print("Bienvenue au");
lcd.setCursor(5,1);
lcd.print("Theatre");
lcd.setCursor(0,0);
}
void setup() {
lcd.begin(16,2);
messagedebut();
WiFi.begin(ssid, pass);
server.begin();
Serial.begin(9600);
SetupES();
}
#define bufferMax 128
int bufferSize;
char buffer[bufferMax];
void loop() // Sa verifie les nouvelles donnée
{
WiFiClient client = server.available();
if (client)
{
WaitForRequest(client);
ParseReceivedRequest();
PerformRequestedCommands();
client.stop();
}
}
void WaitForRequest(WiFiClient client) // Est ce que le client bouge quelque chose?
{
bufferSize = 0;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n')
break;
else
if (bufferSize < bufferMax)
buffer[bufferSize++] = c;
else
break;
}
}
PrintNumber("bufferSize", bufferSize);
}
void ParseReceivedRequest() // C'est bon j'ai un mouvement! je récupere les données.
{
//Received buffer contains "GET /cmd/param1/param2 HTTP/1.1". Break it up.
char* slash1;
char* slash2;
char* slash3;
char* space2;
slash1 = strstr(buffer, "/") + 1; // Look for first slash
slash2 = strstr(slash1, "/") + 1; // second slash
slash3 = strstr(slash2, "/") + 1; // third slash
space2 = strstr(slash2, " ") + 1; // space after second slash (in case there is no third slash)
if (slash3 > space2) slash3=slash2;
PrintString("slash1",slash1);
PrintString("slash2",slash2);
PrintString("slash3",slash3);
PrintString("space2",space2);
// strncpy does not automatically add terminating zero, but strncat does! So start with blank string and concatenate.
cmd[0] = 0;
strncat(cmd, slash1, slash2-slash1-1);
PrintString("cmd",cmd);
}
void PerformRequestedCommands()
{
if ( strcmp(cmd,"welcome") == 0 ) Bienvenue();
if ( strcmp(cmd,"noir") == 0 ) Noir();
if ( strcmp(cmd,"scene1") == 0 ) Scene1();
if ( strcmp(cmd,"scene2") == 0 ) Scene2();
if ( strcmp(cmd,"scene3") == 0 ) Scene3();
if ( strcmp(cmd,"scene4") == 0 ) Scene4();
if ( strcmp(cmd,"scene5") == 0 ) Scene5();
if ( strcmp(cmd,"scene6") == 0 ) Scene6();
}
void Bienvenue() // Modifie la valeur d'une PIN sur la carte arduino
{}
void Noir() // Modifie la valeur d'une PIN sur la carte arduino
{}
void Scene1() // Modifie la valeur d'une PIN sur la carte arduino
{
}
void Scene2() // Lit la valeur d'une des PIN sur la page web
{
}
void Scene3() // Modifie la valeur d'une PIN sur la carte arduino
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Scene 3 en cours");
}
void Scene4() // Modifie la valeur d'une PIN sur la carte arduino
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Scene 4 en cours");
}
void Scene5() // Modifie la valeur d'une PIN sur la carte arduino
{}
void Scene6() // Modifie la valeur d'une PIN sur la carte arduino
{}
void PrintString(char* label, char* str)
{
Serial.print(label);
Serial.print("=");
Serial.println(str);
}
void PrintNumber(char* label, int number)
{
Serial.print(label);
Serial.print("=");
Serial.println(number, DEC);
Le premier passage:
bufferSize=25
slash1=scene3/7/0 HTTP/1.1
slash2=7/0 HTTP/1.1
slash3=0 HTTP/1.1
space2=HTTP/1.1
cmd=scene3
Le deuxième passage:
bufferSize=19
slash1=1.1
slash2=
slash3=
space2=
cmd=1.1
Le troisième passage:
bufferSize=128
slash1=5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29W
slash2=536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29W
slash3=536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29W
space2=(KHTML, like Gecko) Version/6.0.4 Safari/536.29W
cmd=5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit
Le cinquième passage:
bufferSize=3
slash1=5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29W
slash2=536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29W
slash3=536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29W
space2=(KHTML, like Gecko) Version/6.0.4 Safari/536.29W
cmd=5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit
Le sixième passage:
bufferSize=72
slash1=html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
36.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29W
slash2=xhtml+xml,application/xml;q=0.9,/;q=0.8
36.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29W
slash3=xml;q=0.9,/;q=0.8
36.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29W
space2=(KHTML, like Gecko) Version/6.0.4 Safari/536.29W
cmd=html,application
Bref je comprend pas pourquoi ça part en vrille comme ça!
Merci de votre éclaircissement