Arduino - éteindre 3 diode quand j’appuie sur un bouton et en laisseé une seul allumé

a marqué ce sujet comme résolu.
Auteur du sujet

Salut tout le monde voila je souhaite réalisé un petit projet pas du tout compliqué mais je ne sais pas comment le faire! Je vous explique un peux le principe on dispose de quatre bouton avec chacun une led et quans un des quatre bouton es allumé cela eteind les 3 autre led pendant 5 seconde, au bous de c’est 5 seconde tout repart normalement aussi peut etre rajouté un mode qui permet d’allumé une led aleatoirement . J’ai deja réaliser un petit code mais il y a quelqu’que chose que je ne comprend pas c’est que quand je le fait avec un seul bouton de programé ca fonctionne mais des que j’ajoute un bouton (pour une autre couleur) quand j’apuie sur le premier bouton j’ai la premiere couleur AINSI que la seconde couleur..

Merci d’avance

  const int bouton1 = 1;                                         
  const int ledBleu = 2;                                         
    int etatBouton1;                                               
  
  const int bouton2 = 3;                                      
  const int ledVert = 4;                                     
    int etatBouton2;                                           
     
  const int bouton3 = 5;                                    
  const int ledJaune = 6;                                       
    int etatBouton3;                                              

  const int bouton4 = 7;                                        
  const int ledRouge = 8;                                      
    int etatBouton4;                                               
 


void setup() {

  pinMode(bouton1, INPUT);                                     
  pinMode(ledBleu, OUTPUT);                                    
  etatBouton1 = HIGH;                                        
  
  pinMode(bouton2, INPUT);                               
  pinMode(ledVert, OUTPUT);                                
  etatBouton2 = HIGH;                                           

  pinMode(bouton3, INPUT);                                    
  pinMode(ledJaune, OUTPUT);                                 
  etatBouton3 = HIGH;                                           

  pinMode(bouton4, INPUT);                                      
  pinMode(ledRouge, OUTPUT);                                   
  etatBouton4 = HIGH;                                           

}

void loop() {
    etatBouton1 = digitalRead(bouton1);                      
      if(etatBouton1 == LOW)                                 
    {
      digitalWrite(ledBleu, HIGH);                           
      digitalWrite(ledVert, LOW);                                
      digitalWrite(ledJaune, LOW);                              
      digitalWrite(ledRouge,LOW);                               
    }
  else                                                           
    {
      digitalWrite(ledBleu, HIGH);                            
      digitalWrite(ledVert, HIGH);                             
      digitalWrite(ledJaune, HIGH);                           
      digitalWrite(ledRouge, HIGH);                              
   
    }
    
    etatBouton2 = digitalRead(bouton2);                            
     if(etatBouton2 == LOW)                                         
    {
      digitalWrite(ledBleu, LOW);                             
      digitalWrite(ledVert, HIGH);                               
      digitalWrite(ledJaune, LOW);                               
      digitalWrite(ledRouge,LOW);                                
    }
  else                                                           
    {
      digitalWrite(ledBleu, HIGH);                               
      digitalWrite(ledVert, HIGH);                               
      digitalWrite(ledJaune, HIGH);                              
      digitalWrite(ledRouge, HIGH);                              
   
    }
etatBouton3 = digitalRead(bouton3);                            
     if(etatBouton3 == LOW)                                         
    {
      digitalWrite(ledBleu, LOW);                             
      digitalWrite(ledVert, LOW);                               
      digitalWrite(ledJaune, HIGH);                               
      digitalWrite(ledRouge,LOW);                                
    }
  else                                                           
    {
      digitalWrite(ledBleu, HIGH);                               
      digitalWrite(ledVert, HIGH);                               
      digitalWrite(ledJaune, HIGH);                              
      digitalWrite(ledRouge, HIGH);                              
   
    }

etatBouton4 = digitalRead(bouton4);                            
     if(etatBouton4 == LOW)                                         
    {
      digitalWrite(ledBleu, LOW);                             
      digitalWrite(ledVert, LOW);                               
      digitalWrite(ledJaune, LOW);                               
      digitalWrite(ledRouge,HIGH);                                
    }
  else                                                           
    {
      digitalWrite(ledBleu, HIGH);                               
      digitalWrite(ledVert, HIGH);                               
      digitalWrite(ledJaune, HIGH);                              
      digitalWrite(ledRouge, HIGH);                              
   
    }
}

Merci d’avance

+0 -0

Le problème est que tu n’as pas de période d’attente dans ton code. Ta boucle infinie s’exécute très rapidement. Trop rapidement, en fait ton œil ne voit pas quand tes LEDs sont éteintes.

De plus ton code est faux dans l’ensemble. L’état de chaque bouton va affecter toutes tes LEDs. Soit tu dois associer un bouton à une LED uniquement, soit tu dois temporiser avant de lire l’état du bouton suivant. Sinon ça n’a pas grand intérêt.

Amateur de Logiciel Libre et de la distribution GNU/Linux Fedora. #JeSuisArius

+0 -0
Auteur du sujet

Renault meme en ajoutant des delay cela ne fonctionne pas j’ai modifier de facon a ce que un bouton eteind les trois autre led mais j’ai l’impression que cela ne fonctionne a la suite mais pas en "ou" Eskimon je pensasi pas que les 5 secondes etait si importante je penser les rajouté a la fin

+0 -0

Elles sont super importantes. Comme l’a dit Renault, le programme de la boucle tourne a une vitesse super rapide. Du coup, systematiquement tu vas passer dans au moins un else sauf si tu appuies sur les 4 boutons (et dans ce cas tu passeras dans tout les if). Du coup forcément les leds ont plus de chances d’êtres à HIGH que à LOW.

ZdS, le best du Zeste ! | Tuto Arduino, blog, etc

+0 -0

Oui dans le fonctionnement ca va. Pour être encore plus propre tu pourrais faire des else if pour avoir un comportement exclusif comme ca :

if(button1...)
{
}
else if(button2...)
{
}
else if(button3...)
{
}
else if(button4...)
{
}

Mais avec simplement des if ca marchera aussi.

(enchainer des if fera un OU et enchainer des else if fera un OU Exclusif)

Édité par Eskimon

ZdS, le best du Zeste ! | Tuto Arduino, blog, etc

+0 -0

Tu sembles en effet en difficulté, dans quel cadre tu souhaites réaliser ce projet ? Pour le fun ? Pour l’école ? Comment tu t’es formé jusque là ?

Car il me semble que pour l’instant tu fais quelque chose de trop compliqué pour toi à ce stade. Je te conseille de relire tranquillement les bases du langage C et de réfléchir ensuite calmement sur papier à ton code. Pour ne pas être distrait par l’implémentation.

Car pour que tu fasses tu projet à bien tu dois te poser les questions suivantes.

Tout d’abord, tuu parles de période d’attente de 5 secondes mais cela n’est pas visible dans ton code.

Ensuite tu souhaites qu’un bouton actionné puisse piloter les LEDs de manière exclusive. Or tes if en cascade font que chaque bouton qu’il soit actif ou non affecte toutes les LEDs dans ta boucle. Cela ne colle pas avec ce que tu veux faire. Tu dois réfléchir pour que seulement un bouton par tour de boucle puisse modifier la valeur de tes LEDs.

Amateur de Logiciel Libre et de la distribution GNU/Linux Fedora. #JeSuisArius

+0 -0
Auteur du sujet

Ce projet étais pour un usage perso lors de blind test avec des amis.Je me suis formé avec diferent tuto a droite a gauche en plus du blog d' eskimon. Comme je l’ai dit plus haut je ne penser pas que les 5 seconde etais importante au debut. Je vais essayer d’autre façon mais on es d’accord que c’est réalisable ?

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte