Pages: [1] 2   Go Down
Author Topic: Aide Instruction Arduino  (Read 1477 times)
0 Members and 1 Guest are viewing this topic.
France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley !
(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 smiley-sad ! (La consultation de la page par la Uno doit être le plus rapide possible pour des soucis de maniabilité :S )

Donc mes questions seront smiley :

-> 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? smiley-sad

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 smiley-grin !


Phoenixya.
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3844
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sans aucun code on risque pas de pouvoir t'aider ...
Logged


France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/*
  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");
}





« Last Edit: April 11, 2013, 03:55:04 pm by Phoenixya34 » Logged

France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/*
 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 smiley-grin !
(Et désolé pour le double poste mais tout ne rentrer pas en un seul message :S ) !
« Last Edit: April 11, 2013, 03:55:40 pm by Phoenixya34 » Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3844
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

T'es sûr que ton programme boucle bien ?
Logged


France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3844
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un Serial.print() placé dans la loop tout simplement smiley-wink
Logged


France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non il ne boucle pas smiley-sad ! 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)  !
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3844
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
Logged


France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Effectivement maintenant il boucle bien c'était donc bien un problème de RAM smiley-grin !
Si je met un
Code:
Serial.println("Test");
dans le loop, il l'affiche bien en boucle ! smiley-grin
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... smiley-sad
Donc je ne sais plus quoi faire smiley-sad !
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à ! smiley

Code:
#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é")) ;
  }
}
Logged

France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Personne alors? smiley-sad
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3844
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

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.
Logged


France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Houla oui je suis désolé et je mettais pas rendu compte smiley-sad ! 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 smiley !

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 smiley ) !

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 smiley )
Code:
#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é.
  }
}
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3844
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged


France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley !

Et pour la currentLine il me semble que c'est ici non?
Code:
}     
        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 smiley
Logged

Pages: [1] 2   Go Up
Jump to: