Bien le bonjour à tous.
J'ai écrit un code Arduino que j'ai essayé de simuler via le logiciel "PROTEUS", mais malheureusement pour moi, ça ne fonctionne pas comme je le souhaite.
Lors de la simulation sous Proteus, lorsque j'appuis sur le bouton trois (Btn3), le système ne répond plus (même lorsque j'appuis sur un autre bouton ) et seule la ledB clignote.
J'aimerai comprendre pourquoi le système ne répond plus lorque j'appuis sur le bouton 3 (Btn3).
Quelqu'un peut-il m'aider à comprendre pourquoi ?
Voici le code source ci-dessous :
/* instructions de pré-compilation pour définir les variables ledR,....,Btn2*/
#define ledR 6
#define ledB 7
#define piezo 8
#define Btn1 10 // boutons pour le piezo
#define Btn2 11 // boutons pour led rouge
#define Btn3 12 // boutons pour led bleue
#define INPUT_MODE 0 // Mode pull-UP pour les boutons
/* instructions de pré-compilation pour définir les variables ledR,....,Btn2*/
/*Variable globales*/
char statebtn1; // Variable pour garder l'etat du bouton 1
char statebtn2; // Variable pour garder l'etat du bouton 2
char statebtn3; // Variable pour garder l'etat du bouton 3
long int timenextledR;
long int timenextledB;
long int timeBtn = millis();
/*Variable globales*/
/*Etats du système*/
char LedRL=2;
char LedRI=7;
char LedBH=3;
char LedBI=8;
char LedBL=4;
char LedBF=9;
char pieH=5;
char pieL=6;
char stateledR=2;
char stateledB=4;
char statepie=6;
char act;
/*Etats du système*/
/*Déclaration des fonctions*/
void event(int a,int b,int c); // fonction pour scructer les evènements
char condition(); // fonction pour vérifier les conditions
void action(char a); // fonction pour faire les actions
/*Déclaration des fonctions*/
void setup() {
for(int i=6;i<9;i++){ // boucle pour configurer les variables ledR,...,piezo en sortie
pinMode(i,OUTPUT);
}
for(int j=10;j<13;j++){ // boucle pour configurer les variables Btn1, Btn2 et Btn3 en entrée
pinMode(j,INPUT_PULLUP);
}
}
void loop() {
event(Btn1,Btn2,Btn3);
condition();
action(act);
}
void event(int a,int b,int c){ // fonction pour scructer les evènements
if(digitalRead(a) == INPUT_MODE && millis() - timeBtn > 500){
timeBtn = millis();
statebtn1=1; //variable pour dire bouton 1 appuyé
}
if(digitalRead(b) == INPUT_MODE && millis() - timeBtn > 500){
timeBtn = millis();
statebtn2=1; //variable pour dire bouton 2 appuyé
}
if(digitalRead(c) == INPUT_MODE && millis() - timeBtn > 500){
timeBtn = millis();
statebtn3=1; //variable pour dire bouton 2 appuyé
}
}
char condition(){
if(statebtn1==1){
if(statepie==pieL){
act=1;
}
else if(statepie==pieH){
act=2;
}
statebtn1=0;
}
if(statebtn2==1){
if(stateledR==LedRL){
act=3;
}
statebtn2=0;
}
if(stateledR==LedRI){
act=4;
}
if(statebtn3==1){
if(stateledB==LedBL){
act=5;
}
else{
act=8;
}
statebtn3=0;
}
if(stateledB==LedBH){
act=6;
}
if(stateledB==LedBI){
act=7;
}
if(stateledB==LedBF){
act=5;
}
return act;
}
void action(char a){
switch(a){
case 1:
digitalWrite(piezo,HIGH);
statepie=pieH;
act=0;
break;
case 2:
digitalWrite(piezo,LOW);
statepie=pieL;
act=0;
break;
case 3:
digitalWrite(ledR,HIGH);
timenextledR=millis();
stateledR=LedRI;
act=0;
break;
case 4:
if(millis()-timenextledR>=1500){
digitalWrite(ledR,LOW);
stateledR=LedRL;
}
act=0;
break;
case 5:
digitalWrite(ledB,HIGH);
timenextledB=millis();
stateledB=LedBH;
act=0;
break;
case 6:
if(millis()-timenextledB>=1000){
digitalWrite(ledB,LOW);
stateledB=LedBI;
}
act=0;
break;
case 7:
if(millis()-timenextledB>=2000){
stateledB=LedBF;
}
act=0;
break;
case 8:
digitalWrite(ledB,LOW);
stateledB=LedBL;
act=0;
break;
}
}





