Bonjour,
Le résultat est très dépendant de la façon que la question est posée. Des corrections sont possibles également exemple :
peux tu écrire un programme Arduino qui quand j'appuie et maintiens un bouton A et puis appuie sur un bouton B allume une led mais qui n'allume pas la led si j'appuie sur B en premier ?
Oui, voici un exemple de code Arduino qui répond à ce critère :
scss
Copy code
const int buttonA = 2;
const int buttonB = 3;
const int led = 13;
bool buttonBPressed = false;
void setup() {
pinMode(buttonA, INPUT_PULLUP);
pinMode(buttonB, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop() {
if (digitalRead(buttonA) == LOW) {
while (digitalRead(buttonA) == LOW);
if (digitalRead(buttonB) == LOW) {
buttonBPressed = true;
while (digitalRead(buttonB) == LOW);
}
} else if (digitalRead(buttonB) == LOW && buttonBPressed) {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
buttonBPressed = false;
}
}
Ce code utilise les constantes buttonA, buttonB et led pour définir les broches reliées aux boutons et à la LED. La variable buttonBPressed est utilisée pour mémoriser si le bouton B a déjà été appuyé pendant que le bouton A est enfoncé. La fonction setup configure les broches en entrée ou en sortie, avec une résistance de pull-up pour les boutons. La fonction loop contrôle l'état des boutons et allume la LED en conséquence.
Papy Blue
peux-tu refaire le programme sans l'instruction "while" ?
Oui, voici un exemple de code sans utiliser la boucle while :
csharp
Copy code
const int buttonA = 2;
const int buttonB = 3;
const int led = 13;
bool buttonBPressed = false;
bool buttonAReleased = true;
void setup() {
pinMode(buttonA, INPUT_PULLUP);
pinMode(buttonB, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop() {
if (digitalRead(buttonA) == LOW && buttonAReleased) {
buttonAReleased = false;
if (digitalRead(buttonB) == LOW) {
buttonBPressed = true;
}
} else if (digitalRead(buttonA) == HIGH) {
buttonAReleased = true;
} else if (digitalRead(buttonB) == LOW && buttonBPressed) {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
buttonBPressed = false;
}
}
Dans ce code, la variable buttonAReleased est utilisée pour mémoriser l'état du bouton A, et la condition buttonAReleased est vérifiée pour déterminer si le bouton A vient d'être appuyé. La boucle while a été remplacée par une vérification de l'état du bouton A à chaque tour de boucle.