Un de mes projets

bd39001@gmail.com
ven, 08/31/2018 - 21:14
Bonjour,
Je suis à la recherche du programme qui me servira à effectuer un système on/off avec un bouton poussoir à rebond :
Pour mieux vous l'expliquer, je programme un robot et mon but est de commencer ma boucle par l'attente du pressage du bouton. Une fois que le bouton est appuyer, j'attend cinq secondes et je suis en combat (pour le combat, mon écran affiche un texte). Pour stopper le combat, il faut que j'appuie sur le bouton et je retourne en attente et ainsi de suite..
Je n'y arrive pas et je vous demande donc de l'aide.
Pour que vous y voyer plus clair, voici mon programme le plus récent :
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_I2C.h>
#define RED 3
#define BLUE 4
#define GREEN 5
#define BLUE 4
#define GREEN 5
#define DIP_1 A0
#define DIP_2 A1
#define DIP_3 A2
#define DIP_2 A1
#define DIP_3 A2
#define START A3
#define RESET_ENTREE 12
#define RESET_SORTIE 11
#define RESET_ENTREE 12
#define RESET_SORTIE 11
LiquidCrystal_I2C lcd(0x27, 20, 4);
int directionrbt;
int rotation;
int rotation;
void directionrobot()
{
directionrbt = analogRead(DIP_1);
{
directionrbt = analogRead(DIP_1);
if (directionrbt > 511) // 1
{
lcd.setCursor(0, 0);
lcd.print("TOURNER A ");
}
if (directionrbt < 511) // 0
{
lcd.setCursor(0, 0);
lcd.print("AVANCER | ");
}
}
{
lcd.setCursor(0, 0);
lcd.print("TOURNER A ");
}
if (directionrbt < 511) // 0
{
lcd.setCursor(0, 0);
lcd.print("AVANCER | ");
}
}
void rotationrobot()
{
rotation = analogRead(DIP_2);
{
rotation = analogRead(DIP_2);
if (rotation > 511) // 1
{
lcd.setCursor(10, 0);
lcd.print("DROITE");
}
if (rotation < 511) // 0
{
lcd.setCursor(10, 0);
lcd.print("GAUCHE");
}
}
{
lcd.setCursor(10, 0);
lcd.print("DROITE");
}
if (rotation < 511) // 0
{
lcd.setCursor(10, 0);
lcd.print("GAUCHE");
}
}
void leds()
{
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(RED, LOW);
{
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(RED, LOW);
delay(1000);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(RED, HIGH);
delay(2000);
digitalWrite(BLUE, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(RED, LOW);
delay(1000);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(RED, LOW);
delay(500);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(RED, LOW);
delay(500);
digitalWrite(BLUE, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(RED, LOW);
}
digitalWrite(GREEN, HIGH);
digitalWrite(RED, LOW);
}
void leds2()
{
bool led = false; // On cr�er une variable pour l'�tat des leds
{
bool led = false; // On cr�er une variable pour l'�tat des leds
while (digitalRead(START) == HIGH) // Tant que le bouton poussoir est � l'�tat haut (gr�ce � la fonction PULLUP)
{
if (led) // On fait clignoter les 2 leds pour montrer qu'on attend le go
{
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
}
else
{
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
}
{
if (led) // On fait clignoter les 2 leds pour montrer qu'on attend le go
{
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
}
else
{
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
}
led = !led; // on inverse la variable pour inverser l'�tat des leds
delay(200); // On r�p�te l'op�ration toutes les 200ms, c'est ce qui cr�er le clignotement
}
}
while (digitalRead(START) == LOW)
{
digitalWrite(BLUE, LOW);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
}
}
{
digitalWrite(BLUE, LOW);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
}
}
void combatencours()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Combat en");
lcd.setCursor(7, 1);
lcd.print("cours...");
}
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Combat en");
lcd.setCursor(7, 1);
lcd.print("cours...");
}
void attente_go()
{
bool combat = false;
{
bool combat = false;
lcd.setCursor(0, 1);
lcd.print(combat);
lcd.print(combat);
while (digitalRead(START) <= 50)
{
combat = !combat;
}
{
combat = !combat;
}
if (combat)
{
leds2();
combatencours();
}
}
{
leds2();
combatencours();
}
}
void attente()
{
rotationrobot();
directionrobot();
}
{
rotationrobot();
directionrobot();
}
void setup()
{
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
{
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
lcd.init();
Serial.begin(9600);
bool a = false;
}
}
void loop()
{
bool a;
lcd.backlight();
{
bool a;
lcd.backlight();
if(START == HIGH)
{
a = !a;
delay(50);
}
{
a = !a;
delay(50);
}
if (a == false) // On attend
{
attente();
}
if (a == true) // On est en combat
leds();
{
combatencours();
}
}
{
attente();
}
if (a == true) // On est en combat
leds();
{
combatencours();
}
}
bd39001@gmail.com
sam, 09/01/2018 - 10:31
Merci, je vais essayer d'adapter le programme et de le tester.
bd39001@gmail.com
sam, 09/01/2018 - 10:53
En fait, ce n'est pas tout à fait ce qu'il me faut. Je vais vous expliquer maintenant plus brièvement le programme :
Ma boucle commence avec la fonction attente() ; et ma LED RGB clignote vert, rouge vert, rouge (….) toute les 200 millisecondes (grâce à leds2(); ) tant que je n’ai pas appuyer sur le bouton.
Lorsque j’appui, ma fonction leds(); s’active mais une seule fois. Après ça, la fonction combatencours() ; se met en route tant que je n’ai pas réappuyer sur le bouton.
Et si j’appui sur le bouton, la boucle retourne au début.
Si vous voulez, j’ai arrangé le programme pour vous. Ma dernière modification ce trouve en .zip.
bd39001@gmail.com
sam, 09/01/2018 - 14:18
C’est bon, j’ai réussi à avoir le résultat que je voulais. Vous m’avez aider à comprendre et j’ai réussi. Le programme fonctionne.
Je vous dit donc à la prochaine fois !
bd39001@gmail.com
sam, 09/01/2018 - 14:18
C’est bon, j’ai réussi à avoir le résultat que je voulais. Vous m’avez aider à comprendre et j’ai réussi. Le programme fonctionne.
Je vous dit donc à la prochaine fois !