[Programmation] [arduino] boucles, attente d'un évenement
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

[arduino] boucles, attente d'un évenement



  1. #1
    Shantorian

    [arduino] boucles, attente d'un évenement


    ------

    Bonjour à tous !

    Je suis en train de faire un petit programme pour arduino et je rencontre un problème. Je suis vraiment pas doué en programmation et donc je ne vois pas comment faire.
    En fait, depuis mon téléphone j'envoie un 0 ou un 1 en bluetooth à mon arduino via un module, selon si elle reçoit "1" ou "0" elle fait une action.

    Mais comment faire pour que cette action se produise en boucle tant qu'un autre chiffe n'est été envoyé ?

    Voici mon programme, la boucle "if" ne s'execute qu'une seule fois, et si je mets "while" impossible de l’arrêter J'avoue que je ne comprends pas trop :


    Code:
    void setup()
    {
      pinMode(13, OUTPUT);    
      Serial.begin(9600); 
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      
      
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(12, OUTPUT);
      pinMode(13, OUTPUT);
    }
    
    void loop()
    {
      
      while (Serial.available() == 0); 
       char c = Serial.read();
       if(c =='0') {
        
      digitalWrite(2, HIGH);   
      delay(10);              
      digitalWrite(2, LOW);    
      delay(10);
      digitalWrite(3, HIGH);   
      delay(10);              
      digitalWrite(3, LOW);    
      delay(10);  
    
       }
       if(c == '1'){
       
         
         digitalWrite(9, HIGH);
      delay(50);  
      digitalWrite(10, HIGH); 
      delay(50);
      digitalWrite(11, HIGH);
      delay(50);  
      digitalWrite(12, HIGH);
      delay(50);  
      digitalWrite(13, HIGH);
      delay(300);
      digitalWrite(13, LOW);
      delay(50);  
      digitalWrite(12, LOW);
      delay(50);
      digitalWrite(11, LOW);
      delay(50);  
      digitalWrite(10, LOW); 
      delay(50);  
      digitalWrite(9, LOW);
      delay(300);  }
         
         
       
       delay(500);
       
       }

    Merci d'avance !

    -----

  2. #2
    sandrecarpe

    Re : Besoin aide petit programme arduino :)

    Salut,
    créer une variable globale dont tu modifieras la valeur a chaque fois que tu feras l'acquisition d'une donnée
    Code:
    setup()
    {
         //....
    }
    
    bool etat = false;
    void loop()
    {
         if(Serial.available() > 0) 
        {
              char c = Serial.read();
              if(c == '1')
                   etat = true;
              else etat = false;
        }
        
        if(etat)
               action1();
        else
               action2();
    
    }
    Dernière modification par sandrecarpe ; 11/01/2016 à 20h26.

  3. #3
    Shantorian

    Re : Besoin aide petit programme arduino :)

    Merci beaucoup de m'avoir répondu, malheureusement tout cela n'est pas très clair pour moi, je dois definir "état" ?

    Comment modifier mon code exactement ?

    J'essaie de comprendre mais tout cela n'est pas facile pour moi :')

  4. #4
    Shantorian

    Re : Besoin aide petit programme arduino :)

    J'ai modifié mon programme comme ça : mais le problème persiste, j'ai beau envoyer '0' apres avoir envoyé '1' et rien ne se passe

  5. A voir en vidéo sur Futura
  6. #5
    Shantorian

    Re : Besoin aide petit programme arduino :)

    Citation Envoyé par Shantorian Voir le message
    J'ai modifié mon programme comme ça : mais le problème persiste, j'ai beau envoyer '0' apres avoir envoyé '1' et rien ne se passe
    J'ai l'impression que mon message à bugué, j'avais joint ce code : ( désolé pour les multi-messages )

    Code:
    void setup()
    {
      pinMode(13, OUTPUT);    
      Serial.begin(9600); 
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      
      
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(12, OUTPUT);
      pinMode(13, OUTPUT);
      
      
    }
    
    boolean etat = false;
    
    void loop()
    {
      
      
      while (Serial.available() > 0); 
       char c = Serial.read();
       if(c == '1'){
       etat = true; }
       else {
       etat = false;
       }
       
       if(etat = false) {
      
        
      digitalWrite(2, HIGH);   
      delay(10);              
      digitalWrite(2, LOW);    
      delay(10);
      digitalWrite(3, HIGH);   
      delay(10);              
      digitalWrite(3, LOW);    
      delay(10); 
          
    
       }
      else {
       
         
         digitalWrite(9, HIGH);
      delay(50);  
      digitalWrite(10, HIGH); 
      delay(50);
      digitalWrite(11, HIGH);
      delay(50);  
      digitalWrite(12, HIGH);
      delay(50);  
      digitalWrite(13, HIGH);
      delay(300);
      digitalWrite(13, LOW);
      delay(50);  
      digitalWrite(12, LOW);
      delay(50);
      digitalWrite(11, LOW);
      delay(50);  
      digitalWrite(10, LOW); 
      delay(50);  
      digitalWrite(9, LOW);
      delay(300);  }
         
         
       
       delay(500);
       
       }
    Dernière modification par Jack ; 11/01/2016 à 22h08. Motif: remplacement balises quote par balises code

  7. #6
    Shantorian

    Re : Besoin aide petit programme arduino :)

    Bonsoir,

    Je suis désole de up mais je suis vraiment embêté

    J'ai essayé de faire des boucles while en vérifiant la condition, mais sans résultats...

    Code:
    void setup()
    {
      
      Serial.begin(9600); 
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      
      
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(12, OUTPUT);
      pinMode(13, OUTPUT);
    }
    
    void loop()
    {
      
      while (Serial.available() == 0); 
       char c = Serial.read();
       while ( c == '0'); {
       
         if(c =='0') {
         char c = Serial.read();
      digitalWrite(2, HIGH);   
      delay(10);              
      digitalWrite(2, LOW);    
      delay(10);
      digitalWrite(3, HIGH);   
      delay(10);              
      digitalWrite(3, LOW);    
      delay(10);  
    }
       }
       
       while ( c == '1'); {
       
         if(c =='1') {
         char c = Serial.read();{
       
         
         digitalWrite(9, HIGH);
      delay(50);  
      digitalWrite(10, HIGH); 
      delay(50);
      digitalWrite(11, HIGH);
      delay(50);  
      digitalWrite(12, HIGH);
      delay(50);  
      digitalWrite(13, HIGH);
      delay(300);
      digitalWrite(13, LOW);
      delay(50);  
      digitalWrite(12, LOW);
      delay(50);
      digitalWrite(11, LOW);
      delay(50);  
      digitalWrite(10, LOW); 
      delay(50);  
      digitalWrite(9, LOW);
      delay(300);  }
      }
      }
         
         
       
       delay(500);
       
       }

    Personne n'a d'idées ?

  8. #7
    sandrecarpe

    Re : Besoin aide petit programme arduino :)

    Salut !
    Dans ton code poste 5, le probleme est que quand tu fais :
    if(etat = false)
    En mettant un simple "=", tu affectes à "etat" la valeur false et seulement ensuite le test est effectué. Mais du coup il renverra faux puisque tu fais un test équivalent à :
    if(false == true)


    Toi, le test que tu veux faire c'est :
    if(etat == false)

    PS : Pour chacune de tes actions, tu peux coder ça plus proprement avec une boucle for






    Dans ton code du post 6, il y a un petit soucis :
    while ( c == '1'); {...
    Le point virgule après le while créer une boucle vide : "tant que c==1, je ne fais rien, j'attends"
    Dernière modification par sandrecarpe ; 12/01/2016 à 21h45.

  9. #8
    Shantorian

    Re : [arduino] boucles, attente d'un évenement

    Salut !

    Merci !

    J'ai donc corrigé mes erreurs, cependant l'action ne s'exécute qu'une fois, de plus, quand j'envoie '1', si j'ai envoyé un '0' avant, l'action if(c == '0') se re-exécute

    Voici le code :
    Code:
    void setup()
    {
          
      Serial.begin(9600); 
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      
      
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(12, OUTPUT);
      pinMode(13, OUTPUT);
      
      
    }
    
    boolean etat = false;
    
    void loop()
    {
      
      
      while (Serial.available() > 0); 
       char c = Serial.read();
       if(c == '1')
       {
       etat = true; 
       }
       else if(c == '0')
       {
       etat = false;
       }
       
       if(etat == false) 
       {
      
      char c = Serial.read();  
      digitalWrite(2, HIGH);   
      delay(10);              
      digitalWrite(2, LOW);    
      delay(10);
      digitalWrite(3, HIGH);   
      delay(10);              
      digitalWrite(3, LOW);    
      delay(10); 
          
       }
       
      if(etat == true) 
      {
      
      char c = Serial.read();   
      for(int i = 8; i <= 13; i++){
        int j = i+1 ;
        digitalWrite(i, LOW);
        digitalWrite(j , HIGH);
        delay(300); 
      
    }
         
         
       
       delay(10);
       
       }
    }

  10. #9
    sandrecarpe

    Re : [arduino] boucles, attente d'un évenement

    Salut,

    Dans ton loop(), tu appelles deux fois :
    char c = Serial.read();
    Mais ça ne sert pas dans ton programme.

    Ensuite, la ligne :
    while (Serial.available() > 0);
    Tu veux attendre que des données arrive n'est-ce pas ? Si on traduit ça en français, ça serait quelque chose comme : "tant qu'il y a des données, je fais rien". Il semble avoir un problème de condition

Discussions similaires

  1. Carte Arduino UNO R3 ou Arduino Mega 2560 R3 ?
    Par theoze dans le forum Électronique
    Réponses: 10
    Dernier message: 11/03/2015, 15h36
  2. Arduino anti rebond avec arduino
    Par sari12 dans le forum Électronique
    Réponses: 13
    Dernier message: 23/10/2014, 17h04
  3. Communication arduino-arduino avec module Xbee
    Par TPESI22012 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 17h24
  4. Les boucles ......
    Par frequi1 dans le forum Programmation et langages, Algorithmique
    Réponses: 41
    Dernier message: 10/10/2012, 13h41
  5. Boucles médiévales
    Par invite7c6f49ee dans le forum Archéologie
    Réponses: 5
    Dernier message: 17/04/2011, 08h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.