Bonjour,
Le programme est fait. Mais j'ai un problème. Tant que je n'active pas le capteur de neutre entre la 1ère et la 2ème, l'afficheur indique le bon rapport. Mais si je suis en 1ère et que ensuite j'active la neutre pour passer en 2ème, le compteur est remis à 0 et donc je suis en 1ère au lieu d'être en 2ème. En plus, il y a des rebonds à chaque impulsions. Voici le programme :
const int DIGIT_e=2;
const int DIGIT_d=3;
const int DIGIT_c=4;
const int DIGIT_g=5;
const int DIGIT_f=6;
const int DIGIT_a=7;
const int DIGIT_b=8;
volatile long neutre=0;
volatile long compteur=0;
void setup(){
int valDIGIT_e = 0;
int valDIGIT_d = 0;
int valDIGIT_c = 0;
int valDIGIT_g = 0;
int valDIGIT_f = 0;
int valDIGIT_a = 0;
int valDIGIT_b = 0;
pinMode(DIGIT_e, OUTPUT);
pinMode(DIGIT_d, OUTPUT);
pinMode(DIGIT_c, OUTPUT);
pinMode(DIGIT_g, OUTPUT);
pinMode(DIGIT_f, OUTPUT);
pinMode(DIGIT_a, OUTPUT);
pinMode(DIGIT_b, OUTPUT);
attachInterrupt(2,gestionINT0,RISING);
attachInterrupt(3,gestionINT1,RISING);
attachInterrupt(4,gestionINT2,RISING);
}
void gestionINT2(){ //capteur neutre
neutre=1;}
void gestionINT1(){ //capteur 1
if(compteur<=5 && neutre==0) {compteur++;}
else {neutre=0;};}
void gestionINT0(){ //capteur 2
if(compteur>=2 && neutre==0) {compteur--;}
else {neutre=0;};}
void loop(){
if (compteur==1){digitalWrite (DIGIT_e,LOW);digitalWrite (DIGIT_a,LOW);digitalWrite (DIGIT_f,LOW);digitalWrite (DIGIT_g,LOW);digitalWrite (DIGIT_d,LOW);digitalWrite (DIGIT_b,HIGH);digitalWrite (DIGIT_c,HIGH);};
if (compteur==2){digitalWrite (DIGIT_e,HIGH);digitalWrite (DIGIT_a,HIGH);digitalWrite (DIGIT_f,LOW);digitalWrite (DIGIT_g,HIGH);digitalWrite (DIGIT_d,HIGH);digitalWrite (DIGIT_b,HIGH);digitalWrite (DIGIT_c,LOW);};
if (compteur==3){digitalWrite (DIGIT_e,LOW);digitalWrite (DIGIT_a,HIGH);digitalWrite (DIGIT_f,LOW);digitalWrite (DIGIT_g,HIGH);digitalWrite (DIGIT_d,HIGH);digitalWrite (DIGIT_b,HIGH);digitalWrite (DIGIT_c,HIGH);};
if (compteur==4){digitalWrite (DIGIT_e,LOW);digitalWrite (DIGIT_a,LOW);digitalWrite (DIGIT_f,HIGH);digitalWrite (DIGIT_g,HIGH);digitalWrite (DIGIT_d,LOW);digitalWrite (DIGIT_b,HIGH);digitalWrite (DIGIT_c,HIGH);};
if (compteur==5){digitalWrite (DIGIT_e,LOW);digitalWrite (DIGIT_a,HIGH);digitalWrite (DIGIT_f,HIGH);digitalWrite (DIGIT_g,HIGH);digitalWrite (DIGIT_d,HIGH);digitalWrite (DIGIT_b,LOW);digitalWrite (DIGIT_c,HIGH);};
if (compteur==6){digitalWrite (DIGIT_e,HIGH);digitalWrite (DIGIT_a,HIGH);digitalWrite (DIGIT_f,HIGH);digitalWrite (DIGIT_g,HIGH);digitalWrite (DIGIT_d,HIGH);digitalWrite (DIGIT_b,LOW);digitalWrite (DIGIT_c,HIGH);};
if (neutre==1){digitalWrite(DIGIT_e,HIGH);digitalWrite(DIGIT_d,HIGH);digitalWrite(DIGIT_c,HIGH);digitalWrite(DIGIT_g,LOW);digitalWrite(DIGIT_f,HIGH);digitalWrite(DIGIT_a,HIGH);digitalWrite(DIGIT_b,HIGH);};
}
Avez vous des solutions ?, Merci d'avance