fonctionnalité:bascule à partir de l'état du bouton arduino HIGH à l'état bas après une période
utilisateur appuie sur le bouton dôme rouge (n'est pas un bouton d'état 2), d'où il doit basculer sur la première presse " 0 "->" 1 "& lorsque vous appuyez à nouveau sur" 1 "->" 0 ". Par conséquent, lorsque vous appuyez sur cette touche, le moniteur série imprime des "1" à partir de "0" toutes les 100 ms. Le comportement signale que le bouton button est basculé de LOW à HIGH
En outre, une bande de LED est également connectée à Arduino. Par conséquent, lorsque le buttonstate affiche une valeur HIGH dans le moniteur série, l'état des voyants passe à HIGH après un délai de 10 secondes et reste à l'état HIGH pendant 10 secondes avant de passer à l'état LOW. Enfin, buttonState devrait passer de HIGH à LOW après un délai (25s), sans que l'utilisateur appuie physiquement sur le bouton.
Problème:
A ce moment, l'utilisateur doit appuyer sur la touche dôme rouge pour basculer entre LOW & état haut. Par conséquent, lorsque l'état initial du bouton est LOW, il affiche "0" dans le moniteur série et lorsqu'il est pressé, le bouton bascule à HIGH, affiche "1" dans le moniteur série et lorsque le bouton est pressé à nouveau, il bascule HIGH to LOW, indiquant "0" dans le moniteur série.
Par conséquent, je voudrais demander de l'aide sur la façon de permettre à l'état butt de basculer de HIGH à LOW sans que l'utilisateur n'appuie sur le bouton.
donc correctBehaviour:
état initial « 0 » sont représentées sur le moniteur en série et lorsque le bouton utilisateur appuie ButtonState représente des « 1 » dans le moniteur de série et après un nombre de 25s, le buttonstate bascule à LOW sans que l'utilisateur appuie de nouveau sur le bouton.
code:
const int buttonPin = 2; //the number of the pushbutton pin
const int Relay = 4; //the number of the LED relay pin
uint8_t stateLED = LOW;
uint8_t btnCnt = 1;
int buttonState = 0; //variable for reading the pushbutton status
int buttonLastState = 0;
int outputState = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// Check if there is a change from LOW to HIGH
if (buttonLastState == LOW && buttonState == HIGH)
{
outputState = !outputState; // Change outputState
}
buttonLastState = buttonState; //Set the button's last state
// Print the output
if (outputState)
{
switch (btnCnt++) {
case 100:
stateLED = LOW;
digitalWrite(Relay, HIGH); // after 10s turn on
break;
case 200:
digitalWrite(Relay, LOW); // after 20s turn off
break;
case 202: // small loop at the end, to do not repeat the LED cycle
btnCnt--;
break;
}
Serial.println("1");
}else{
Serial.println("0");
if (btnCnt > 0) {
// disable all:
stateLED = LOW;
digitalWrite(Relay, LOW);
}
btnCnt = 0;
}
delay(100);
}
que voulez-vous dire par « mais sans le faire en utilisant correctement si (millis() - lastpressed> 20000) {... ", j'utilise le delay (100) pour vérifier chaque appui sur un bouton. Désolé, je ne comprends pas vraiment votre sens – Luke
lire, exercer et comprendre l'exemple BlinkWithoutDelay à https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay.Il ne s'agit pas seulement de cligner des yeux, mais de chaque attente non bloquante. – datafiddler