[Non réglé]2 boutons simultanés

Bonjour a tous , je suis nouveau et je lis assidûment les cours de Eskimon mais j'ai des questions sur un projet que j’essaye de faire entièrement moi même car on m'a dit " c'est en pratiquant qu'on apprend " donc j’évite de prendre des codes tout fait , donc j'essai de créer un petit projet simple :

un buzzer , 2 boutons et 2 led :
J'appuis sur le premier bouton , la led 1 s'allume et le buzzer sonne par intermittence .
Sans relâcher le bouton 1 j'appuis sur le bouton 2 , la led 1 reste allumer , la led 2 s'allume et le buzzer bip par intervalle plus cour , c'est la que ça déraille , les consignes du bouton 1 reste active alors que les consignes résultant de pour l'appuis des deux boutons s'active également donc le buzzer n'as pas la régularité souhaité puisqu'il travail sur deux intervalles différents .

J'ai essayé de travailler avec le "switch" mais ça na pas fonctionné , je vais peut être trop vite par rapport a mon niveau :grinning:

Quelle serait la solution pour stopper les consignes du bouton1 au moment ou le bouton2 entre en jeu ?

Voici mon code ( j'essaie qu'il soit propre et agréable a lire )

// Pin des LED
 int PIN_LED1 = 1;
 int PIN_LED2 = 2;

// pin des entrees recepteur
 int PIN_RF1 = 3;
 int PIN_RF2 = 4;
 
//Pin du buzzer
 int PIN_BUZZER = 5;

// ----- DECLARATION ENTREES ET SORTIES ------
void setup()
{
 //On indique les entrees et les sorties
  pinMode(PIN_LED1, OUTPUT);
  pinMode(PIN_LED2, OUTPUT);
  pinMode(PIN_RF1, INPUT);
  pinMode(PIN_RF2, INPUT);
  pinMode(PIN_BUZZER, OUTPUT);
 
 //on impose l'etat des leds , du buzzer et des boutons
  digitalWrite(PIN_RF1, HIGH);
  digitalWrite(PIN_RF2, HIGH),
  digitalWrite(PIN_LED1, LOW);
  digitalWrite(PIN_LED2, LOW);
  noTone(PIN_BUZZER);
}
  
// ----- ACTIONS A EFFECTUER ------
void loop()
{
 {
  int etatBouton1;
  int etatBouton2;
  
  etatBouton1 = digitalRead(PIN_RF1);
  etatBouton2 = digitalRead(PIN_RF2);
  
  if (etatBouton1 == LOW)
  { 
     digitalWrite(PIN_LED1, HIGH);
     tone(PIN_BUZZER, 50, 100);
     delay(500);
     noTone(PIN_BUZZER);
     delay(500);
  }
  if (etatBouton2 == LOW && etatBouton1 == LOW)
  {
    digitalWrite(PIN_LED1, HIGH);
    digitalWrite(PIN_LED2, HIGH);
    tone(PIN_BUZZER, 100, 150);
    delay(250);
    noTone(PIN_BUZZER);
    delay(250);
  }
  else
  {
   digitalWrite(PIN_LED1, LOW);
   digitalWrite(PIN_LED2, LOW);
   noTone(PIN_BUZZER);
  }
  }
}

Si vous avez des remarques a faire sur ma façon de coder je suis également preneur et merci d'avance pour votre aide.

c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

de plus vous ne pouvez pas avoir de "delay(500);" dans le code sinon ça ne va pas être super réactif. Il faut utiliser millis() --> cf Introduire le temps dans les tutos d'eskimon par exemple

Merci beaucoup J_M_L , j’ai passé l’après midi sur ton tuto et la fonction millis mais j’ai pas réussi :smiley: mais je ne lâche rien et je reviens vers vous quand j’aurais réussi .

postez votre diagramme d'états