Go Down

Topic: Aide Instruction Arduino (Read 1 time) previous topic - next topic

Phoenixya34

Bonjour à tous et désolé de  déranger la communauté pour quelques questions, ^^ mais voila, j'ouvre mon premier topic car j'aurai besoin de quelques réponses :) !
(Je travaille avec une Arduino Uno r3, un shield Wifi r3 et tout les tâches sont effectué sur mon routeur en Localhost)

Une des étapes de mon projet, et de pouvoir incrémenter une cellule de ma base de donnée lorsque un panneau solaire relié à la Uno détecte de la lumière.

M'étant renseigné j'ai vu qu'il n'est pas possible pour Arduino de pouvoir effectuer une requete SQL. J'ai donc crée une page WEB qui lors de sa consultation, via du PHP, incrémente elle même la bdd. Le tout est donc de faire consulter rapidement la page a la Uno.

Je demande donc a ma Uno d'acceder a cette page lors de la détection... Sa marche bien une première fois, puis pour remarcher à nouveau il faut reset la carte >< ! J'arrive donc bien a incrémenter une fois chargement, pas plus :( ! (La consultation de la page par la Uno doit être le plus rapide possible pour des soucis de maniabilité :S )

Donc mes questions seront :) :

-> L'instruction pour faire consulter une page web a la arduino, dans mon cas est bien : "client.println("GET /http://x.x.x.x/") "?
-> Puis-je faire autrement pour incrémenter ma bdd via arduino?
-> Et enfin pourquoi cela ne marche qu'une seule ou deux fois par démarrage? :(

Je vous posterai le détail de mon code si quelqu'un veut bien m'aider :3 !!
Merci d'avance à tout ceux qui proposeraient quelque chose pour m'aider dans ma galère :D !


Phoenixya.

B@tto

Sans aucun code on risque pas de pouvoir t'aider ...
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Phoenixya34

#2
Apr 11, 2013, 07:57 pm Last Edit: Apr 11, 2013, 10:55 pm by Phoenixya34 Reason: 1
Bah le code que j'ai testé pour voir si je pouvais incrémenter ma bdd c'est le code exemple : "WifiWebClient" que j'ai configurer pour mon serveur :

Code: [Select]

/*
 Web client

This sketch connects to a website (http://www.google.com)
using a WiFi shield.

This example is written for a network using WPA encryption. For
WEP or WPA, change the Wifi.begin() call accordingly.

This example is written for a network using WPA encryption. For
WEP or WPA, change the Wifi.begin() call accordingly.

Circuit:
* WiFi shield attached

created 13 July 2010
by dlf (Metodo2 srl)
modified 31 May 2012
by Tom Igoe
*/


#include <SPI.h>
#include <WiFi.h>

char ssid[] = "ssi"; //  your network SSID (name)
char pass[] = "ssi3A";    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
IPAddress server(192,168,0,101);  // numeric IP for Google (no DNS)
//char server[] = "www.google.com";    // name address for Google (using DNS)

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
WiFiClient client;

void setup() {
 //Initialize serial and wait for port to open:
 Serial.begin(9600);
 while (!Serial) {
   ; // wait for serial port to connect. Needed for Leonardo only
 }
 
 // check for the presence of the shield:
 if (WiFi.status() == WL_NO_SHIELD) {
   Serial.println("WiFi shield not present");
   // don't continue:
   while(true);
 }
 
 // attempt to connect to Wifi network:
 while ( status != WL_CONNECTED) {
   Serial.print("Attempting to connect to SSID: ");
   Serial.println(ssid);
   // Connect to WPA/WPA2 network. Change this line if using open or WEP network:    
   status = WiFi.begin(ssid, pass);
 
   // wait 10 seconds for connection:
   delay(10000);
 }
 Serial.println("Connected to wifi");
 printWifiStatus();
 
 Serial.println("\nStarting connection to server...");
 // if you get a connection, report back via serial:
 if (client.connect(server, 80)) {
   Serial.println("connected to server");
   // Make a HTTP request:
   client.println("GET /ssi/traitement.php/");
   client.println("Host:localhost");
   client.println("Connection: close");
   client.println();
 }
}

void loop() {
 // if there are incoming bytes available
 // from the server, read them and print them:
 while (client.available()) {
   char c = client.read();
   Serial.write(c);
 }

 // if the server's disconnected, stop the client:
 if (!client.connected()) {
   Serial.println();
   Serial.println("disconnecting from server.");
   client.stop();

   // do nothing forevermore:
   while(true);
 }
}


void printWifiStatus() {
 // print the SSID of the network you're attached to:
 Serial.print("SSID: ");
 Serial.println(WiFi.SSID());

 // print your WiFi shield's IP address:
 IPAddress ip = WiFi.localIP();
 Serial.print("IP Address: ");
 Serial.println(ip);

 // print the received signal strength:
 long rssi = WiFi.RSSI();
 Serial.print("signal strength (RSSI):");
 Serial.print(rssi);
 Serial.println(" dBm");
}







Phoenixya34

#3
Apr 11, 2013, 07:58 pm Last Edit: Apr 11, 2013, 10:55 pm by Phoenixya34 Reason: 1
Et après le code que j'ai qui fait tourner mes moteurs et tout le reste sur lequel j'aimerai bien pouvoir réussir a implanter l'exemple c'est celui la :
Code: [Select]
/*
Allumage d'une LED sur Site Internet via Shield Wifi Arduino (R3 pour nous)

Le Shield Wifi est nécessaire, la lED est connecté sur le PIN 9 de la carte Arduino.

*/
#include <SPI.h>
#include <WiFi.h>


char ssid[] = "ssi";      //  Nom du Réseau
char pass[] = "3Assi";   // Mot de passe du Réseau
int keyIndex = 0;                 // Clé d'index  (demandé uniquement pour clé WEP).
int laser=A2;
int tare;
int status = WL_IDLE_STATUS;
WiFiServer server(80);


void setup() {
 Serial.begin(9600);      // Initialisation de la communication sur 9600 Bauds.
           pinMode(5, OUTPUT); //Moteur 1 Sens 1
           pinMode(6, OUTPUT); //Moteur 1 Sens 2
           pinMode(8, OUTPUT); // ON/OFF 1
           pinMode(3, OUTPUT); //Moteur 2 Sens 1
           pinMode(9, OUTPUT); //Moteur 2 Sens 2
           pinMode(2, OUTPUT); // ON/OFF 2
           pinMode(laser, OUTPUT); // Laser
           pinMode(A3, OUTPUT); // LED
           tare= analogRead(0);
 

 // check for the presence of the shield:
 if (WiFi.status() == WL_NO_SHIELD) {
   Serial.println("Le Shield Wifi n'est pas present !");
   while(true);        // Ne pas continuer?
 }

 // Tentative de connexion au réseau :
 while ( status != WL_CONNECTED) {
   Serial.print("Tentative de connexion au reseau nomme: ");
   Serial.println(ssid);                   // Affiche le nom de réseau

   // Ligne pour connexion par WAP WPA  (A changé si utilisation du WEP).    
   status = WiFi.begin(ssid, pass);
   // Attendre 10 seconde pour la connexion.
   delay(10000);
 }
 server.begin();                           // démarrer le serveur WEB sur le port 80
 printWifiStatus();                        // la connexion est crée, affiché le statut
}


void loop() {


 WiFiClient client = server.available();   // Attente des client connecté
 
               
       
 
 
 if (client) {   // S'il y a un client
   Serial.println("Nouveau Client");           // Afficher un message sur le port série
   String currentLine = "";                // Crée un string pour le client
   while (client.connected()) {      // boucle pour voir si le client est connecté
   
     if (client.available()) {             // Si les bytes sont lues par le client
       char c = client.read();             // Lecture des bytes, et
       Serial.write(c);                    // afficher la sortie sur le moniteur
       if (c == '\n') {                    // Si la byte est une nouvelle ligne de character

         // if the current line is blank, you got two newline characters in a row.
         // that's the end of the client HTTP request, so send a response:
         if (currentLine.length() == 0) {  
           // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
           // and a content-type so the client knows what's coming, then a blank line:    
           client.println("HTTP/1.1 200 OK");
           client.println("Content-type:text/html");
           client.println();

           

           //La réponse en HTTP sur une ligne blanche
           client.println();
           //On sort de la boucle while loop :
           break;        
         }
         else {      // Si on demande une nouvelle ligne sa initialise le CurrentLine
           currentLine = "";
         }
       }    
       else if (c != '\r') {    // if you got anything else but a carriage return character,
         currentLine += c;      // add it to the end of the currentLine
       }
       
        if (analogRead(0)> tare + 100) {
         client.println("GET /http://192.168.0.101/ssi/traitement.php/"); [b]// C'est ici qu'il faudrait incrémenter la bdd :D ![/b]
        }
        else {
 
       // Check to see if the client request was "GET /H" or "GET /L":
       if (currentLine.endsWith("GET /Z")) {
                 
                 digitalWrite(5, HIGH);
                 digitalWrite(6, LOW);
                 digitalWrite(3, HIGH);
                 digitalWrite(9, LOW);
                 digitalWrite(8, HIGH);
                 digitalWrite(2, HIGH);
                 
                 
         }
                             
       
       else if (currentLine.endsWith("GET /Q")) {
                 
                 digitalWrite(5, HIGH);
                 digitalWrite(6, LOW);
                 digitalWrite(3, LOW);
                 digitalWrite(9, HIGH);
                 digitalWrite(8, HIGH);
                 digitalWrite(2, HIGH);
               
       }
       else if (currentLine.endsWith("GET /D")){  // GET /J allume la led pendant 1 seconde
                 
                 digitalWrite(5, LOW);
                 digitalWrite(6, HIGH);
                 digitalWrite(3, HIGH);
                 digitalWrite(9, LOW);
                 digitalWrite(8, HIGH);
                 digitalWrite(2, HIGH);
                 
       }
       else if(currentLine.endsWith("GET /S")){
                 
                 digitalWrite(5, LOW);
                 digitalWrite(6, HIGH);
                 digitalWrite(3, LOW);
                 digitalWrite(9, HIGH);
                 digitalWrite(8, HIGH);
                 digitalWrite(2, HIGH);
                 
       }
       else if(currentLine.endsWith("GET /P")){
                 
                 digitalWrite(5,LOW);
                 digitalWrite(6, LOW);
                 digitalWrite(3, LOW);
                 digitalWrite(9, LOW);
                 digitalWrite(8, LOW);
                 digitalWrite(2, LOW);
                 
         }
         
       else if (currentLine.endsWith("GET /T")){    // Allume le laser pendant une seconde.
                 digitalWrite(laser, HIGH);
                 delay(1000);
                 digitalWrite(laser, LOW);
       }
       
       else if (currentLine.endsWith("GET /O")){     // Eteint le laser
                 digitalWrite(laser, LOW);
       }
       
     
        }
   }
   // Fermer la connexion
   client.stop();
   Serial.println("client disonnected");
 }
}
}

void printWifiStatus() {
 // Afficher le nom du réseau :
 Serial.print("SSID: ");
 Serial.println(WiFi.SSID());

 // Afficher l'adresse IP du shiel :
 IPAddress ip = WiFi.localIP();
 Serial.print("IP Address: ");
 Serial.println(ip);

 // print the received signal strength:
 long rssi = WiFi.RSSI();
 Serial.print("signal strength (RSSI):");
 Serial.print(rssi);
 Serial.println(" dBm");
 // print where to go in a browser:
 Serial.print("To see this page in action, open a browser to http://");
 Serial.println(ip);
}

void efface(){                 // Cette fonction éteint tout les moteurs.
           digitalWrite(5, LOW);
           digitalWrite(6, LOW);
           digitalWrite(3, LOW);
           digitalWrite(9, LOW);
           digitalWrite(8, LOW);
           digitalWrite(2, LOW);
     }



Voila ^^ ! Désolé et merci d'avance :D !
(Et désolé pour le double poste mais tout ne rentrer pas en un seul message :S ) !

B@tto

T'es sûr que ton programme boucle bien ?
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Phoenixya34

Oui il me semble :S ! Mais je n'en suis pas sur :( ! Vous auriez une idée pour vérifier ou pour corriger cela? :3

B@tto

Un Serial.print() placé dans la loop tout simplement ;)
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Phoenixya34

Non il ne boucle pas :( ! Le Serial.println("Test") ne s'affiche que quelques fois :S ... Je peut faire quelque chose pour résoudre ça? J'ai essayé de revérifier mes boucles mais n'étant pas très doué je n'y arrive pas x)  !

B@tto

C'est peut-être ta RAM qui sature aussi. Première étape donc, l'économiser : utilise la fonction F() pour stocker tes chaîne dans la flash. Exemple :

Code: [Select]
client.println(F("GET /ssi/traitement.php/"));

L'ethernet et wifi sont des gros consommateur de RAM donc il faut faire gaffe. Après si ça ne suffit pas il faut chercher où ça bloque : commenter des parties du programme, toujours en debuguant avec des Serial.print(), et voir ce qui fait planter.
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Phoenixya34

Effectivement maintenant il boucle bien c'était donc bien un problème de RAM :D !
Si je met un
Code: [Select]
Serial.println("Test"); dans le loop, il l'affiche bien en boucle ! :D
Mais cela crée un nouveau problème, c'est que du coup, les moteurs s'arrête tout le temps, vu qu'il boucle en continu..
Je voudrais que lorsque l'utilisateur accède a 192.168.0.100/X il continu d'exécuter ce qui est dedans jusqu'à ce qu'on lui demande une autre url... :(
Donc je ne sais plus quoi faire :( !
En plus je dois laisser en parallèle la boucle de détection du panneau solaire, j'ai donc essayé de faire une fonction (detection) qui s'en occupe, mais je ne sais pas ou l'appelle pour qu'il cherche en boucle...
Je désespère ! Mais en tout cas merci beaucoup pour tes réponses déjà ! :)

Code: [Select]

#include <SPI.h>
#include <WiFi.h>


char ssid[] = "ssi";      //  Nom du Réseau
char pass[] = "ssississi";   // Mot de passe du Réseau
int keyIndex = 0;                 // Clé d'index  (demandé uniquement pour clé WEP).
int laser=A2;
int tare;
int status = WL_IDLE_STATUS;
WiFiServer server(80);
IPAddress bddserver (192,168,0,101);
int z = 1;


void setup() {
  Serial.begin(9600);      // Initialisation de la communication sur 9600 Bauds.
            pinMode(5, OUTPUT); //Moteur 1 Sens 1
            pinMode(6, OUTPUT); //Moteur 1 Sens 2
            pinMode(8, OUTPUT); // ON/OFF 1
            pinMode(3, OUTPUT); //Moteur 2 Sens 1
            pinMode(9, OUTPUT); //Moteur 2 Sens 2
            pinMode(2, OUTPUT); // ON/OFF 2
            pinMode(laser, OUTPUT); // Laser
            pinMode(A3, OUTPUT); // LED
            tare= analogRead(0);
 
   

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println(F("Le Shield Wifi n'est pas present !"));
    while(true);        // Ne pas continuer?
  }

  // Tentative de connexion au réseau :
  while ( status != WL_CONNECTED) {
    Serial.print(F("Tentative de connexion au reseau nomme: "));
    Serial.println(ssid);                   // Affiche le nom de réseau

    // Ligne pour connexion par WAP WPA  (A changé si utilisation du WEP).   
    status = WiFi.begin(ssid, pass);
    // Attendre 10 seconde pour la connexion.
    delay(10000);
  }
  server.begin();                           // démarrer le serveur WEB sur le port 80
 
Serial.println(F("Connecté"));
}


void loop() {


  WiFiClient client = server.available();   // Attente des client connecté
 
           
             
           
       
 
 
  if (client) {   // S'il y a un client
   
           
    Serial.println(F("Nouveau Client"));           // Afficher un message sur le port série
    String currentLine = "";                // Crée un string pour le client
    while (client.connected()) {      // boucle pour voir si le client est connecté
   
      if (client.available()) {             // Si les bytes sont lues par le client
        char c = client.read();             // Lecture des bytes, et
        Serial.write(c);                    // afficher la sortie sur le moniteur
        if (c == '\n') {                    // Si la byte est une nouvelle ligne de character

          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) { 
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:   
            client.println(F("HTTP/1.1 200 OK"));
            client.println(F("Content-type:text/html"));
            client.println();

           

            //La réponse en HTTP sur une ligne blanche
            client.println();
            //On sort de la boucle while loop :
            break;         
          }
          else {      // Si on demande une nouvelle ligne sa initialise le CurrentLine
            currentLine = "";
          }
        }     
        else if (c != '\r') {    // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
       
         
       
        // Check to see if the client request was "GET /H" or "GET /L":
        if (currentLine.endsWith("GET /Z")) {
                 
                  digitalWrite(5, HIGH);
                  digitalWrite(6, LOW);
                  digitalWrite(3, HIGH);
                  digitalWrite(9, LOW);
                  digitalWrite(8, HIGH);
                  digitalWrite(2, HIGH);
                 
                 
                 
          }
                               
       
        else if (currentLine.endsWith("GET /Q")) {
                 
                  digitalWrite(5, HIGH);
                  digitalWrite(6, LOW);
                  digitalWrite(3, LOW);
                  digitalWrite(9, HIGH);
                  digitalWrite(8, HIGH);
                  digitalWrite(2, HIGH);
                 
        }
        else if (currentLine.endsWith("GET /D")){  // GET /J allume la led pendant 1 seconde
                 
                  digitalWrite(5, LOW);
                  digitalWrite(6, HIGH);
                  digitalWrite(3, HIGH);
                  digitalWrite(9, LOW);
                  digitalWrite(8, HIGH);
                  digitalWrite(2, HIGH);
                 
        }
        else if(currentLine.endsWith("GET /S")){
                 
                  digitalWrite(5, LOW);
                  digitalWrite(6, HIGH);
                  digitalWrite(3, LOW);
                  digitalWrite(9, HIGH);
                  digitalWrite(8, HIGH);
                  digitalWrite(2, HIGH);
                 
        }
        else if(currentLine.endsWith("GET /P")){
                 
                  digitalWrite(5,LOW);
                  digitalWrite(6, LOW);
                  digitalWrite(3, LOW);
                  digitalWrite(9, LOW);
                  digitalWrite(8, LOW);
                  digitalWrite(2, LOW);
                 
          }
         
        else if (currentLine.endsWith("GET /T")){    // Allume le laser pendant une seconde.
                  digitalWrite(laser, HIGH);
                  delay(1000);
                  digitalWrite(laser, LOW);
        }
       
        else if (currentLine.endsWith("GET /O")){     // Eteint le laser
                  digitalWrite(laser, LOW);
                  detection();
        }
       
        else if (currentLine.endsWith("GET /W")){
         
                      client.connect(bddserver, 80);
                      Serial.println(F("Connecte !"));
                      client.println("GET /ssi/traitement.php/");
                     
                     
                  }
                 
           
         
         
       
         }
         
    }
    client.stop();
    Serial.println("Déconnecté");
    // Fermer la connexion
   
   
 
  }
}




void efface(){                 // Cette fonction éteint tout les moteurs.
            digitalWrite(5, LOW);
            digitalWrite(6, LOW);
            digitalWrite(3, LOW);
            digitalWrite(9, LOW);
            digitalWrite(8, LOW);
            digitalWrite(2, LOW);
      }
     
void detection(){
  WiFiClient client = server.available();
 
  if (analogRead(0) > tare + 50 ) {
   
    client.connect(bddserver, 80);
    client.println(F("GET /ssi/traitement.php/"));
    Serial.println(F("Touché"));
   
  }
  else {
    Serial.println(F("Pas touché")) ;
  }
}

Phoenixya34


B@tto

Laisse nous notre week-end un peu :p

Je suis pas sûr de comprendre à 100% mais je te propose toujours : il te faut une variable supplémentaire et un switch/case pour gérer la partie du code à gérer en boucle. Grosso modo faire çà :

Code: [Select]


byte State;

...

if(client) TraitementInstructionWifi(); // cette fonction rassemblerait toute la gestion du wifi, et modifie State suivant la requête

switch (State) {

case 0:
...  // comportement 1
break;

case 1:
... // comportement 2
break;

........

}



Ainsi à chaque boucle c'est la partie qui correspond à la valeur de State qui se lance.
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Phoenixya34

Houla oui je suis désolé et je mettais pas rendu compte :( ! Mais je suis trop presser de finir ce projet x) ! Donc pardon et merci de passer déjà du temps sur mon cas x) !

Alors je vais essayer de m'expliquer mieux :) !

Je veux allumer depuis une interface Web des moteurs branché sur la Uno, par exemple que telle ou telle URL allume tel ou tel moteur dans tel ou tel sens, et qu'ils ne changent pas de direction jusqu'à ce qu'on leur envoi une autre instruction,   et que en parallèle, la carte prenne en continue les valeurs d'un panneau solaire et que dés qu'une de celle ci dépasse la valeur de Tare, la Uno accède à une page Web qui contient elle un script PHP qui rajoute un dans une BDD. (Comme un compte de score :) ) !

Voila j'espère avoir réussis être plus clair x) !
J'ai essayé d'adapter mon code a celui que tu m'as donné mais je ne sais même pas si je m'y suis pris correctement donc je te le poste pour que tu me dise si tu  veux bien si je m'approche dans le bon sens ou pas x)  !
(J'ai essayé de mieux instrumenter :) )
Code: [Select]

#include <SPI.h>
#include <WiFi.h>


char ssid[] = "ssi";      //  Nom du Réseau
char pass[] = "ssississi";   // Mot de passe du Réseau
int keyIndex = 0;                 // Clé d'index  (demandé uniquement pour clé WEP).
int laser=A2;
int tare;
int status = WL_IDLE_STATUS;
WiFiServer server(80);
IPAddress bddserver (192,168,0,101);
int z = 1;
byte State;


void setup() {
  Serial.begin(9600);      // Initialisation de la communication sur 9600 Bauds.
            pinMode(5, OUTPUT); //Moteur 1 Sens 1
            pinMode(6, OUTPUT); //Moteur 1 Sens 2
            pinMode(8, OUTPUT); // ON/OFF 1
            pinMode(3, OUTPUT); //Moteur 2 Sens 1
            pinMode(9, OUTPUT); //Moteur 2 Sens 2
            pinMode(2, OUTPUT); // ON/OFF 2
            pinMode(laser, OUTPUT); // Laser
            pinMode(A3, OUTPUT); // LED
            tare= analogRead(0);
 
   

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println(F("Le Shield Wifi n'est pas present !"));
    while(true);        // Ne pas continuer?
  }

  // Tentative de connexion au réseau :
  while ( status != WL_CONNECTED) {
    Serial.print(F("Tentative de connexion au reseau nomme: "));
    Serial.println(ssid);                   // Affiche le nom de réseau

    // Ligne pour connexion par WAP WPA  (A changé si utilisation du WEP).   
    status = WiFi.begin(ssid, pass);
    // Attendre 10 seconde pour la connexion.
    delay(10000);
  }
  server.begin();                           // démarrer le serveur WEB sur le port 80
 
Serial.println(F("Connecté"));
}


void loop() {


  WiFiClient client = server.available();   // Attente des client connecté
 
           
  if (client) {  // S'il y a un client
   detection(); // On vérifie si le panneau solaire est touché ou pas.
   InstructionWifi();
 
  else {
   client.stop();
  }
 

switch (State) {

      case 'Z':
                  digitalWrite(5, HIGH);
                  digitalWrite(6, LOW);
                  digitalWrite(3, HIGH);
                  digitalWrite(9, LOW);
                  digitalWrite(8, HIGH);
                  digitalWrite(2, HIGH);
      break;

      case 'Q':
                  digitalWrite(5, HIGH);
                  digitalWrite(6, LOW);
                  digitalWrite(3, LOW);
                  digitalWrite(9, HIGH);
                  digitalWrite(8, HIGH);
                  digitalWrite(2, HIGH);
                 
       break;
       
       case'D':
                   digitalWrite(5, LOW);
                  digitalWrite(6, HIGH);
                  digitalWrite(3, HIGH);
                  digitalWrite(9, LOW);
                  digitalWrite(8, HIGH);
                  digitalWrite(2, HIGH);
       
       break;
       
       case'S' :

                  digitalWrite(5, LOW);
                  digitalWrite(6, HIGH);
                  digitalWrite(3, LOW);
                  digitalWrite(9, HIGH);
                  digitalWrite(8, HIGH);
                  digitalWrite(2, HIGH);
       break ;
       
       case'P':
                 digitalWrite(5,LOW);
                  digitalWrite(6, LOW);
                  digitalWrite(3, LOW);
                  digitalWrite(9, LOW);
                  digitalWrite(8, LOW);
                  digitalWrite(2, LOW);
       break;
       
       case't' :
       
                  digitalWrite(laser, HIGH);
                  delay(1000);
                  digitalWrite(laser, LOW);
       break;
       
       case'o' :
                  digitalWrite(laser, LOW);
       break;
       
       case 'W' :
       
                       client.connect(bddserver, 80);
                      Serial.println(F("Connecte !"));
                      client.println("GET /ssi/traitement.php/");
                     
       break;
                 

void InstructionWifi(){   // Toute cette portion de code est basé sur l'Expemple "SimpleServerWifi"
  Serial.println(F("Nouveau Client"));           // Afficher un message sur le port série
    String currentLine = "";                // Crée un string pour le client
    while (client.connected()) {      // boucle pour voir si le client est connecté
   
      if (client.available()) {             // Si les bytes sont lues par le client
        char c = client.read();             // Lecture des bytes, et
        Serial.write(c);                    // afficher la sortie sur le moniteur
        if (c == '\n') {                    // Si la byte est une nouvelle ligne de character

          //
         
          if (currentLine.length() == 0) { 
           
            client.println(F("HTTP/1.1 200 OK"));
            client.println(F("Content-type:text/html"));
            client.println();

           

            //La réponse en HTTP sur une ligne blanche
            client.println();
           
                     
          }
          else {      // Si on demande une nouvelle ligne sa initialise le CurrentLine
            currentLine = "";
          }
        }     
        else if (c != '\r') {   
          currentLine += c;     
        }
       
         
       
        // En fonction de l'URL que le client demande a la carte Arduino on fait bouger les moteurs différemment.
        if (currentLine.endsWith("GET /Z")) {
                 
                 State = Z;
                 
                 
                 
          }
                               
       
        else if (currentLine.endsWith("GET /Q")) {
                 
                 
                 State = Q;
        }
        else if (currentLine.endsWith("GET /D")){ 
                 
                  State =  D ;
                 
        }
        else if(currentLine.endsWith("GET /S")){
                 
          State = S;
                 
                 
        }
        else if(currentLine.endsWith("GET /P")){
                 
                  State = P ;
                 
          }
         
        else if (currentLine.endsWith("GET /T")){    // Allume le laser pendant une seconde.
                 
                  State = T;
        }
       
        else if (currentLine.endsWith("GET /O")){     // Eteint le laser
                 
                  State = O
        }
       
        else if (currentLine.endsWith("GET /W")){  // Rajoute un point dans une base de donnée. (Uniquement pour testé ^_^ )
         
                     
                     State = W;
                     
                  }
                 
           
         
         
       
         }
         
    }
   





void efface(){                 // Cette fonction éteint tout les moteurs. // Fonction qui met les deux moteurs a 0.
            digitalWrite(5, LOW);
            digitalWrite(6, LOW);
            digitalWrite(3, LOW);
            digitalWrite(9, LOW);
            digitalWrite(8, LOW);
            digitalWrite(2, LOW);
      }
void detection(){  // On détecte si le panneau solaire est touché ou pas.
  WiFiClient client = server.available();
 
  if (analogRead(0) > tare + 50 ) {  // Si la valeur que le panneau solaire renvoi est supérieur à la valeur de tare + 50 il est touché.
   
    client.connect(bddserver, 80); // On se connecte alors au serveur.
    client.println(F("GET /ssi/traitement.php/"));  // Et on accede à l'URL qui avec un script PHP rajoute un point dans une bdd.
    Serial.println(F("Touché")); // On affiche touché dans le moniteur.
   
  }
  else { // Il n'est pas touché on ne fait donc rien.
    Serial.println(F("Pas touché")) ; // On affiche pas touché.
  }
}

B@tto

Attention State est un byte et tu compares à des char.

Mais en fait d'après ta description tu n'as pas besoin de switch/case dans la loop : il te suffit de modifier les états des sorties suivant ta réception wifi et que ça n'écrase que ce que ça doit. Par contre autre remarque : évite la classe String, c'est un piège à con, mieux vaut utiliser une chaîne de caractère. Mais je vois pas où currentLine est remplie ? Y'a juste une ligne avec l'ajout de c mais je vois pas plus

Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Phoenixya34

Et comment est ce que je peut faire telle ou telle condition en fonction de la reception Wifi? Quelle instruction me permet de récupérer ou d'envoyer un order via une page Web a la carte arduino? :O
D'accord je vais essayer de faire avec des chaines de caractères :) !

Et pour la currentLine il me semble que c'est ici non?
Code: [Select]
}     
        else if (c != '\r') {    // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }


Merci d'avance :)

Go Up