fonction "répéter jusqu'à"

Bonjour à tous, je me demandais si il existait un code qui aurais pour fonction de “répéter jusqu’à”.
Le code dans lequel je voudrais appliquer cette fonction :

    #include <SoftwareSerial.h>

    SoftwareSerial HC06(11,10);
    const char DOUT_LED = 2;
    String messageRecu;

    void setup() {
      Serial.begin(9600);
      HC06.begin(9600);  
      pinMode(DOUT_LED, OUTPUT);
      digitalWrite(DOUT_LED, LOW);
    }
     
    void loop()
    {
      
        while(HC06.available())
        {
          delay(3);
          char c = HC06.read();
          messageRecu += c;
        }
        if (messageRecu.length() >0)
        {
          Serial.println(messageRecu);
          if (messageRecu == "VNO")
            {
             messageRecu="";
             //répéter jusqu'à ce que le message ne soit pas égale à une lettre

            }
          messageRecu="";         
        }
   }

Merci beaucoup de votre aide !

Bonjour

http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.Dowhile
https://www.arduino.cc/reference/en/language/structure/control-structure/dowhile/

Merci beaucoup !

Re,
Après plusieurs essayes je n’arrive pas à faire fonctionner mon code.

Voici le code que j’ai un peut modifier :

    #include <Stepper.h>
    #include <SoftwareSerial.h>
    
    SoftwareSerial HC06(11,10);
    const char DOUT_LED = 2;
    String messageRecu;
    int pas = 0 ;
    Stepper myStepper(2048, 2, 4, 3, 5);
    
    void setup() {
      Serial.begin(9600);
      HC06.begin(9600);  
      pinMode(DOUT_LED, OUTPUT);
      digitalWrite(DOUT_LED, LOW);
      myStepper.setSpeed(9);
      myStepper.step(500);
    }
     
    void loop()
    {
      
        while(HC06.available())
        {
          delay(3);
          char c = HC06.read();
          messageRecu += c;
        }
        if (messageRecu.length() >0)
        {
          Serial.println(messageRecu);
          if (messageRecu == "VNO")
            {
              messageRecu=""; 
              do
              {
              pas= 0;
              pas = HC06.read();
              Serial.println(pas);
              delay(3);
              }while(pas <= 0);
              Serial.println(pas);
              myStepper.step(pas);
              pas = 0;

            }
          messageRecu="";         
        }
   }

Le problème est le suivant : deux messages sont envoyés successivement avec ± 0.2s de décalage. Le premier est “VNO” et le deuxième est un nombre entier compris entre 11 et 149.
Le but est que quand l’Arduino reçois “VNO” elle sait que c’est pour le moteur Z (à terme il y en auras 3 pas visible sur le code pour l’instant). Puis elle reçois le nombre de pas que celui-ci doit faire. Seulement, avec le code ci-dessus, voici ce qui s’affiche dans le moniteur quand j’envoie successivement “VNO” puis “149”

VNO
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
49
49
50

Le moteur fait alors 49 pas au lieux de 149.

Merci d’avance, votre aide me serais très utile !

Bonjour,
peu de réponse ici, demande au modérateur de le déplacer dans la rubrique principale

Organise ton code différemment. Par exemple :
Tu initialises 2 variables booléennes à false : VNOrecu, et Pasrecu

Dans ta loop tu fais des tests (voici un pseudocode) :

si pas VNOrecu : tu mets les lignes qui écoutent le HC06 et reçoivent "VNO" et VNOrecu = true
sinon :
si pas Pasrecu : tu écoutes le HC06 jusqu'à recevoir le nombre de pas, et Pasrecu = true
sinon :
tant que le nombre de pas n'est pas atteint : ajouter un pas

Pour écouter le HC06, tu as déjà les lignes :

        while(HC06.available())
        {
          delay(3);
          char c = HC06.read();
          messageRecu += c;
        }

Bonjour, merci beaucoup pour votre réponse ! Suite à celle-ci j’ai crée ce programme :

#include <Stepper.h>
#include <SoftwareSerial.h>

SoftwareSerial HC06(11,10);
const char DOUT_LED = 13;
String messageRecu;
int messageRecu2;
int pas = 0 ;
int action = 0 ;
boolean VNO = false;

Stepper myStepper(2048, 2, 4, 3, 5);
    
void setup() {
 Serial.begin(9600);
 HC06.begin(9600);  
 pinMode(DOUT_LED, OUTPUT);
 digitalWrite(DOUT_LED, LOW);
 myStepper.setSpeed(9);
 myStepper.step(500);
}

void loop(){
  while(HC06.available())
  {
    delay(3);
    char c = HC06.read();
    if (VNO == true)
    {
      messageRecu2 += c;
      Serial.println(messageRecu2);
    }
    else{
    messageRecu += c; 
    }
  }
  if(messageRecu.length() >0 or messageRecu2 != "")
  {
    Serial.println(messageRecu);
    if(VNO == true)
    {
      Serial.println("okok");
      myStepper.step(messageRecu2);
      Serial.println(messageRecu2);
      VNO == false;
    }
    if(messageRecu == "VNO")
    {
      Serial.println("ok");
      VNO = true;
    }
  }
 
messageRecu = "";
messageRecu2 = "";
 
}

Mais j’ai encor un problème :’(

Au moment de dire au moteur de faire “X pas” en fonction du message il fait un nombre de pas incorrecte.

L’endroit en question :

    if(VNO == true)
    {
      Serial.println("okok");
      myStepper.step(messageRecu2);
      Serial.println(messageRecu2);
      VNO == false;
    }

J’ai réussi à localisé le problème, il se trouve à l’endroit où la variable “c” passe le relais à la variable “messageRecu2”.

if (VNO == true)
    {
      messageRecu2 += c;
      Serial.println(c);
    }

En effet, le message qui est reçus si on prend pour exemple le nombre 90 est “9” puis “0”. J’ai cependant l’impression que cette commande “+=” ne s’applique pas pour les variables INT (que je suis obligé pour commander mon moteur) car au lieux d’afficher 90 elle affiche 799 dans le terminal. Cependant j’ai testé la variable c et elle affiche dans le terminal “9” puis “0”.

Merci beaucoup pour votre aide !

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.