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`