Projet lanceur de balles

Bonjour a tous et toutes
je me permet e sollicite votre aide car je sèche, les subtilité entre les boucle while et les conditions de sortie par message reçu bluetooth m'échappe.

je vous explique ce que je veux faire:
j'ai une application qui envoi un message a la carte HC06
ex: "LIFT101", ou autre chiffre derrière LIFT71 (18 messages en tout)
il fonctionne bien et je recois bien dans le port série les bon messages

le pb c'est que LIFT101 doit faire une action unique (envoyé une balle)
LIFT71 doit envoyé toute les balles (30 dans le pot)
et quand j'appuie sur stop le message stop est envoyé et doit arreté la machine

l'arret c'est la commande de deux servo moteur qui pilote des potar pour des variateur de vitesse des moteurs

je simplifie le code avec 2 messages si ca fonctionne je copie colle

merci infiniment de votre aide
j'ai un fichier config .H avec toute les variables qui fonctionne bien

 
#include <SoftwareSerial.h>
#include <Servo.h>
#include "config.h"
    SoftwareSerial HC06(PinTxD,PinRxD);
    
    String MessageRecu;
    
/* Créer un objet Servo pour contrôler le servomoteur */
Servo monServomoteur1;
Servo monServomoteur2;

int V1Chop2;
int V2Chop2;
int V3Chop2;
int V1Lift2;
int V2Lift2;
int V3Lift2;
int V1Plat2;
int V2Plat2;
int V3Plat2;

void setup() {
      Serial.begin(9600);
      Serial.println("Message recu BT:");
      HC06.begin(9600);  

monServomoteur1.attach(PinMoteur1);
monServomoteur2.attach(PinMoteur2);
    
    // definition Pin nema
  pinMode(StepPin, OUTPUT);
  pinMode(DirPin, OUTPUT);

  // arret des moteurs
   
 STOP();   
    
    }
     
void loop()
    {
        while(HC06.available())
        {
          delay(3);
          char EnvoiBT = HC06.read();
          MessageRecu += EnvoiBT;
        }
    
    
        if (MessageRecu.length() >0)
        {
          Serial.println(MessageRecu);
      
//////////////////////////////////CHOP 1 balle vitesse 1//////////////////////////          
             if (MessageRecu == "LIFT101")     
             {
        CHOPSPEED1();
      
       LancerBall();
       
       STOP();
       } 
//////////////////////////////////CHOP cont balle vitesse 1//////////////////////////     
             if (MessageRecu == "LIFT71")     
             {
       CHOPSPEED1();
       
       while (MessageRecu == "LIFT71")
       {
       LancerBall();
       }
       STOP();
       }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void LancerBall()
{

// Definition du sense de rotation
  digitalWrite(DirPin, LOW);   

  // SPR definie pour le nb tours complete
  for(int x = 0; x < SPR; x++)
  {
    digitalWrite(StepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(StepPin, LOW);
    delayMicroseconds(1000);
  }
  delay(DelayBall); // Variable délayball temps entre chaque ball

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void STOP ()
{

while (MessageRecu="STOP")
{
monServomoteur1.write(0);


//Moteur 2
monServomoteur2.write(0);
delay (1000);  
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CHOPSPEED1 ()
{
  
//MOTEUR 1
monServomoteur1.write(V1Chop1);
delay(2000);
//Moteur 2
V1Chop2 = V1Chop1 - 10;
monServomoteur2.write(V1Chop2);
delay (2000);  
   
} `Preformatted text`

vous devez écouter en permanence les messages donc vous ne pouvez pas vous permettre une boucle qui lance les 30 balles d'un coup. Si vous recevez le message LIFT71 vous devez passer dans un état lancer des balles, mais sans bloquer la boucle de façon à continuer à écouter.

c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

Merci de ta réponse je vais lire ca tranquillement et je vous tiens au courant si je m'e sort, bonne fin week end.

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