Hallo,
ich habe irgendwie eine Verständnissfrage oder stehe auf dem Schlauch.
Wollte eigentlich nur mal das entdeckte Wokwi mit dem Button_SL testen.
ich sehe aber seit 2 Tagen den Fehler nicht. Ich in noch Anfänger und ich weis, das mein Code
sehr "unelegant" ist, aber mir geht es um die Funktion.
Erklärung:
Drücke ich den Taster kurz, soll LED 1 kurz aufleuchten (das klappt)
Drücke ich den Taster länger (3s) soll LED2 blinken, solange ich auf dem Taster bleibe,
das Ding blinkt einmal und das wars. Ich habe schon alles Mögliche probiert aber irgendwie fällt der immer wieder aus der IF-Schleife raus ??
Kann mir jemand helfen, mich vom "Schlauch" runterzuschubbsen?
Danke.
Code:
// Blink...BlinkBlink
#include <Button_SL.hpp>
// Globale Variable
constexpr uint8_t Taster{2};
constexpr uint8_t LED1{4};
constexpr uint8_t LED2{6};
using namespace Btn;
ButtonSL btn{Taster, 3000}; // 3s für langes Drücken
int var,x=0;
//////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(115200);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
btn.begin();
btn.setDebounceTime_ms(20);
btn.releaseOn();
}
//////////////////////////////////////////////////////////////////////////////
void loop() {
switch (btn.tick()) {
case ButtonState::shortPressed:
if (digitalRead(LED1) == LOW && x==0) {
digitalWrite(LED1,HIGH);
x=1;
Serial.println("> X=1, LED an");
}
if (digitalRead(LED1) == HIGH && x==1) {
digitalWrite(LED1,LOW);
x=0;
Serial.println("> X=0, LED aus");
}
Serial.println("Tastzeit: ");
Serial.print(btn.getDuration_ms());
Serial.println(" ms");
break;
case ButtonState::longPressed:
if (digitalRead (Taster) == LOW) {
if (digitalRead(LED2) == LOW && x==0) {
digitalWrite(LED2,HIGH);
x=1;
}
delay(100);
if (digitalRead(LED2) == HIGH && x==1) {
digitalWrite(LED2,LOW);
x=0;
}
delay(100);
}
Serial.print("Tastzeit: ");
Serial.print(btn.getDuration_ms());
Serial.println(" ms");
break;
default: break;
}
}