Go Down

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

B@tto

Ah ok jviens de piger en trouvant un autre code sur le net : j'avais zappé le while(client.connected) donc c'est bon ça boucle bien et ta String se remplit.

Pour les ordres bin je vois pas où tu bloques ! Reprenons :
1) pour virer la string, il faut ajouter une variable pour mesurer la longueur dans la fameuse boucle while(client.connected). Donc ça fait :

Code: [Select]


char currentLine[20];
byte i;
while (client.connected()) {
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 (i == 0) {  
           
           client.println(F("HTTP/1.1 200 OK"));
           client.println(F("Content-type:text/html"));
           client.println();                  
                   
         }
         else {      // Si on demande une nouvelle ligne sa initialise le CurrentLine
           for(int y=0;y<20;y++) currentLine[y]='\0'; // effacement de la chaîne
         }
       }    
       else if (c != '\r') {    
         currentLine[i++] = c;      
       }
}


2) et ensuite sélection de l'ordre suivant le caractère qui suit "GET", normalement situé en dernière place :

Code: [Select]


switch(currentLine[i-1]) {
case 'O':   // moteur 1 en marche mais je ne touche pas au moteur 2 donc il n'y a que le moteur 1 qui bouge
digitalWrite(6,HIGH);
digitalWrite(5,LOW);
digitalWrite(8,HIGH);
break;
case 'Z': // moteur 2 en marche mais je ne touche pas au moteur 1 donc il n'y a que le moteur 2 qui bouge
digitalWrite(3,HIGH);
digitalWrite(9,LOW);
digitalWrite(2,HIGH);
break;
...
default:

}



J'ai pris un peu des valeurs au pif mais jte laisse adapter ;)

Après tu peux cumuler avec un switch/case dans la loop si tu veux un comportement spécifique.

Phoenixya34

J'ai essayé d'adapter mon code avec ce que tu m'as donné, et je t'en remercie déjà :) ! J'ai simplifié en branchant juste deux led pour tester déjà,
mais je n'arrive pas a le faire fonctionner, la page Web de l'Arduino est innacessible et la Led ne s'allume pas quand je lui demande, la boucle du panneau solaire en revanche s'exécute bien déjà donc je t'en remercie :D !
Peut tu me dire ce que j'ai mal fais? :(

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(6, OUTPUT); //LED Sur PIN 6
            pinMode(9, OUTPUT);
            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() {

  detection();
  WiFiClient client = server.available();   // Attente des client connecté
 
   
    char currentLine[20];
    byte i;
    while (client.connected()) {
     
    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 (i == 0) { 
           
            client.println(F("HTTP/1.1 200 OK"));
            client.println(F("Content-type:text/html"));
            client.println();                 
                     
          }
          else {      // Si on demande une nouvelle ligne sa initialise le CurrentLine
            for(int y=0;y<20;y++) currentLine[y]='\0'; // effacement de la chaîne
          }
        }     
        else if (c != '\r') {   
          currentLine[i++] = c;     
        }
       
        switch(currentLine[i-1]) {
        case 'O':   // Fais clignoter la led 3 seconde
        digitalWrite(6,HIGH);
        delay(1000);
        digitalWrite(6,LOW);
        delay(1000);
        digitalWrite(6,HIGH);
        delay(1000);
        digitalWrite(6,LOW);
        break;
       
        case 'Z': // Pareil mais en sens inverse
        digitalWrite(6,LOW);
        delay(1000);
        digitalWrite(6,HIGH);
        delay(1000);
        digitalWrite(6,LOW);
        delay(1000);
        digitalWrite(6,HIGH);
        break;

        default:
        digitalWrite(6, 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é.
   
    analogWrite(9, HIGH);
   
  }
  else { // Il n'est pas touché on ne fait donc rien.
   
    analogWrite(9, LOW);
  }
}


Merci encore à toi de ton aide ^^ !

B@tto

J'avoue que j'ai jamais touché au wifi ou à l'ethernet donc c'est loin d'être ma spécialité ^^'

Tu avais quoi qui s'affichait avant ?


Phoenixya34

Oui mais même comme ça tu dois quand même être meilleur que moi x) !
J'avais une page blanche en "192.168.0.101" et quand j'accèder a "192.168.0.101/X" il faisait l'instruction demandé, mais j'arrivais pas a rajouter sur ce code la boucle du panneau solaire x) ! Donc je suis venu sur le fofo :) !
Mais la plus rien ne marche :( ! En revanche le loop boucle bien maintenant chose qui ne se faisait pas avant ^^! Mais l'url 192.168.0.101 n'est plus accessible et n'importe que /X n'ont plus :S...

B@tto

Essaye :

Code: [Select]


void loop() {

  detection();

WiFiClient client = server.available();

  if (client) {

    boolean currentLineIsBlank = true;
char currentLine[20];
byte i;

    while (client.connected()) {
      if (client.available()) {

        char c = client.read();
        Serial.write(c);
      currentLine[i++] = c;

       if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
           client.println();
         
           break;
        }
        if (c == '\n') {
                 currentLineIsBlank = true;
        }
        else if (c != '\r') {
             currentLineIsBlank = false;
        }
      }
    }
   
    delay(1);
     client.stop();

      Serial.println(currentLine[i-1]); // pas sûr du 3, à vérifier

        switch(currentLine[i-1]) {

        case 'O':   // Fais clignoter la led 3 seconde
        digitalWrite(6,HIGH);
        delay(1000);
        digitalWrite(6,LOW);
        delay(1000);
        digitalWrite(6,HIGH);
        delay(1000);
        digitalWrite(6,LOW);
        break;
       
        case 'Z': // Pareil mais en sens inverse
        digitalWrite(6,LOW);
        delay(1000);
        digitalWrite(6,HIGH);
        delay(1000);
        digitalWrite(6,LOW);
        delay(1000);
        digitalWrite(6,HIGH);
        break;

        default:
        digitalWrite(6, LOW);
       
            }
}
  }


Phoenixya34

#20
Apr 15, 2013, 04:22 pm Last Edit: Apr 15, 2013, 04:25 pm by Phoenixya34 Reason: 1
Non ça ne marche toujours pas, je te donne ce que renvois le moniteur série au cas z'ou ^^ !

Code: [Select]
Connecté
GET / HTTP/1.1
Host: 192.168.0.100
Connection: keep-alive
User-Agent: Mozilla/5.°¢?¹Ñ?Ñ¥Ù?de connexion au reseau nomme: ssi
Connecté


J'ai juste essayé d'acceder a 192.168.0.100 .. :( Je suis paumé la x) ! (Et le moniteur n'affiche plus l'état du panneau solaire :( )

B@tto

La j'avoue déjà que je suis pas du tout calé sur le sujet, en plus j'ai pas le montage sous la main donc très dur à débuguer :s

Phoenixya34

Bon bah tant pis.. Merci quand même pour ton aide :) ! Je vais essayer de me débrouiller avec mon code :) !
Merci quand même a la communauté et a toi en particulier pour l'aide. :)

Go Up