Nous avons trouvé comment faire un flag.
Mais nous avons toujours le même problème, c'est a dire que lorsque l'on appuie sur une autre touche de "Z" pour avancer par exemple, les moteurs continuent à avancer et on reste dans la boucle qui a mémoriser la valeur de la variable binaire sans pouvoir changer la valeur de la variable binaire (on a une boucle infini :~ )
Je vous remet le code avec la variable:
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"
boolean flag=false;
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *moteurGauche = AFMS.getMotor(1);
Adafruit_DCMotor *moteurDroit = AFMS.getMotor(3);
char touche;
void setup()
{
Serial.begin(9600);
Serial.println("Robot curiosity TS6 SI");
AFMS.begin();
moteurGauche->setSpeed(250);
moteurDroit->setSpeed(250);
moteurGauche->run(FORWARD);
moteurDroit->run(BACKWARD);
moteurGauche->run(RELEASE);
moteurDroit->run(RELEASE);
}
void loop()
{
uint8_t i;
if (Serial.available() > 0) // On detecte un appui sur une touche
{
touche = Serial.read(); // On lit la valeur de la touche appuyée
if (touche == 'Z')
{ flag= true;
while (flag=true)
{
Serial.print("Avancer");
moteurGauche->run(FORWARD);
moteurDroit->run(FORWARD);
for (i=0; i<255; i++)
{
moteurGauche->setSpeed(i);
moteurDroit->setSpeed(i);
}
for (i=255; i!=0; i--)
{
moteurGauche->setSpeed(i);
moteurDroit->setSpeed(i);
}
if (touche=='S'|| touche=='Q' || touche=='D'|| touche=='W')
{
flag=false;
}
}
}
}
if (touche == 'S')
{ flag=false;
delay(10);
flag=true;
while(flag=true){
Serial.print("Reculer");
moteurGauche->run(BACKWARD);
moteurDroit->run(BACKWARD);
for (i=0; i<255; i++) {
moteurGauche->setSpeed(i);
moteurDroit->setSpeed(i);
}
for (i=255; i!=0; i--)
{
moteurGauche->setSpeed(i);
moteurDroit->setSpeed(i);
}
}
}
if (touche == 'Q')
{
Serial.print("Tourner a gauche");
moteurGauche->run(BACKWARD);
moteurDroit->run(FORWARD);
for (i=0; i<255; i++)
{
moteurGauche->setSpeed(i);
moteurDroit->setSpeed(i);
}
for (i=255; i!=0; i--)
{
moteurGauche->setSpeed(i);
moteurDroit->setSpeed(i);
}
}
if (touche == 'D')
{
Serial.print("Tourner a droite");
moteurGauche->run(FORWARD);
moteurDroit->run(BACKWARD);
for (i=0; i<255; i++)
{
moteurGauche->setSpeed(i);
moteurDroit->setSpeed(i);
}
for (i=255; i!=0; i--)
{
moteurGauche->setSpeed(i);
moteurDroit->setSpeed(i);
}
if (touche == 'W')
{
Serial.print("Pause");
moteurGauche->run(RELEASE);
moteurDroit->run(RELEASE);
delay(1000);
}
if (touche==0)
{
moteurGauche->run(RELEASE);
moteurDroit->run(RELEASE);
}
}
}