Dans le cadre d'un projet qui consiste (en gros) à répondre à un QCM à l'aide d'un bouton poussoir, d'incrémenter un nombre en fonction des réponses choisies, et d'afficher le résultat en direct, je suis bloqué par mais faibles connaissances.
En effet mon code actuel me permet d'afficher mon résultat mais seulement si je reste appuyé sur le bouton. Afin d'avoir le résultat total après avoir répondu à 4 questions, il faudrait donc que je reste appuyé sur 4 boutons en même temps (pas du tout pratique...).
J'aurais donc besoin de votre aide pour améliorer mon code et créer une sorte de mémoire de l'état du bouton pour juste avoir à appuyer chaque bouton une seule fois.
const int L1 = 30;
const int L2 = 31;
const int L3 = 32;
const int L4 = 33;
const int L5 = 34;
const int L6 = 35;
const int L7 = 36;
const int L8 = 37;
//////Question a : 4 réponses possibles///////
const int a1 = 9;
const int a2 = 8;
const int a3 = 7;
const int a4 = 6;
//////Question b : 4 réponses possibles///////
const int b1 = 5;
const int b2 = 4;
const int b3 = 3;
const int b4 = 2;
int nombre_points = 0; // nombre incrémenté
int points_q1; //nombre de points à la question 1
int points_q2; //nombre de points à la question 2
byte etat1; // etat du bouton Question a : réponse 1
byte etat2; // etat du bouton Question a : réponse 2
byte etat3; // ...
byte etat4; // ...
byte etat5; // etat du bouton Question b : réponse 1
byte etat6; // etat du bouton Question b : réponse 2
byte etat7; // ...
byte etat8; // ...
//////////////////////////////////////////////////////Fonction Setup/////////////////////////////////////////////
void setup()
{
for (int n=2; n<=9; n++){
pinMode(n, INPUT);}
for (int n=30; n<=37;n++) {
pinMode(n, OUTPUT);}
}
/////////////////////////////Déclaration des différents segments à allumer pour afficher les chiffres////////////
void zero(){
digitalWrite(L1,LOW);
digitalWrite(L2,HIGH);
digitalWrite(L3,HIGH);
digitalWrite(L4,HIGH);
digitalWrite(L5,LOW);
digitalWrite(L6,HIGH);
digitalWrite(L7,HIGH);
digitalWrite(L8,HIGH);}
void un(){
digitalWrite(L1,LOW);
digitalWrite(L2,LOW);
digitalWrite(L3,LOW);
digitalWrite(L4,HIGH);
digitalWrite(L5,LOW);
digitalWrite(L6,HIGH);
digitalWrite(L7,LOW);
digitalWrite(L8,LOW);}
void deux(){
digitalWrite(L1,HIGH);
digitalWrite(L2,LOW);
digitalWrite(L3,HIGH);
digitalWrite(L4,HIGH);
digitalWrite(L5,LOW);
digitalWrite(L6,LOW);
digitalWrite(L7,HIGH);
digitalWrite(L8,HIGH);}
void trois(){
digitalWrite(L1,HIGH);
digitalWrite(L2,LOW);
digitalWrite(L3,HIGH);
digitalWrite(L4,HIGH);
digitalWrite(L5, LOW);
digitalWrite(L6,HIGH);
digitalWrite(L7,HIGH);
digitalWrite(L8,LOW);}
void quatre(){
digitalWrite(L1,HIGH);
digitalWrite(L2,HIGH);
digitalWrite(L3, LOW);
digitalWrite(L4,HIGH);
digitalWrite(L5, LOW);
digitalWrite(L6,HIGH);
digitalWrite(L7, LOW);
digitalWrite(L8, LOW);}
void cinq(){
digitalWrite(L1,HIGH);
digitalWrite(L2,HIGH);
digitalWrite(L3,HIGH);
digitalWrite(L4, LOW);
digitalWrite(L5,HIGH);
digitalWrite(L6,HIGH);
digitalWrite(L7,HIGH);
digitalWrite(L8, LOW);}
void six(){
digitalWrite(L1,HIGH);
digitalWrite(L2,HIGH);
digitalWrite(L3,HIGH);
digitalWrite(L4,LOW);
digitalWrite(L5,LOW);
digitalWrite(L6,HIGH);
digitalWrite(L7,HIGH);
digitalWrite(L8,HIGH);}
void sept(){
digitalWrite(L1,LOW);
digitalWrite(L2,LOW);
digitalWrite(L3,HIGH);
digitalWrite(L4,HIGH);
digitalWrite(L5,HIGH);
digitalWrite(L6,HIGH);
digitalWrite(L7,LOW);
digitalWrite(L8,LOW);}
void huit(){
digitalWrite(L1,HIGH);
digitalWrite(L2,HIGH);
digitalWrite(L3,HIGH);
digitalWrite(L4,HIGH);
digitalWrite(L5,HIGH);
digitalWrite(L6,HIGH);
digitalWrite(L7,HIGH);
digitalWrite(L8,HIGH);}
/////////////////////////////////////////////////////Fonction boucle principale loop//////////////////////////////////
void loop() {
int etat1 = digitalRead(a1);
int etat2 = digitalRead(a2);
int etat3 = digitalRead(a3);
int etat4 = digitalRead(a4);
int etat5 = digitalRead(b1);
int etat6 = digitalRead(b2);
int etat7 = digitalRead(b3);
int etat8 = digitalRead(b4);
///Nombre de points à incrémenter en fonction du bouton appuyé
if (etat1==HIGH) {
points_q1=1;}
else if (etat2==HIGH) {
points_q1 = 2;}
else if (etat3==HIGH) {
points_q1 = 3;}
else if (etat4==HIGH) {
points_q1 = 4;}
else points_q1 = 0;
if (etat5==HIGH) {
points_q2 = 1;}
else if (etat6==HIGH) {
points_q2 = 2;}
else if (etat7==HIGH) {
points_q2 = 3;}
else if (etat8==HIGH) {
points_q2 = 4;}
else points_q2 = 0;
nombre_points = points_q1 + points_q2 ;
/////////////////////////////////Affichages en fonction du résultat de nombre_points/////////////////////////////////:
if (nombre_points == 0){
zero();} // chiffre 0
if (nombre_points == 1){
un();} // chiffre 1
if (nombre_points == 2){
deux();} // chiffre 2
if (nombre_points == 3){
trois();} // chiffre 3
if (nombre_points == 4){
quatre();} // chiffre 4
if (nombre_points == 5){
cinq();} // chiffre 5
if (nombre_points == 6){
six();} // chiffre 6
if (nombre_points == 7){
sept();} // chiffre 7
if (nombre_points == 8){
huit();} // chiffre 8
}