wenn gedrückt Zeit merken (millis) und Statusvariable setzen
Wenn nicht gedrückt, Zeit merken.
Wenn Zeit länger als 3 Sec, tuwas().
Denn so braucht es keinen Status.
Den brauchts erst, um tuwas() Wiederholungen zu unterbinden.
delay() ist in einem solchen Fall immer schlecht. Versuche es mit einer Funktion, die den gedrückt - Status des buttons in einer statischen Variablen speichert. Diese Funktion rufst du aus loop() auf und reagierst entsprechend.
bool dreiSekundenGedrueckt() {
// Diese Variable wird nur beim ersten Durchgang auf 0 gesetzt, danach bleibt ihr Wert erhalten
static unsigned long startZeit = 0;
// Wenn die Taste in diesem Moment nicht gedrückt ist, kann sie auch nicht seit 3 Sekunden gedrückt sein
// Die startZeit wird in diesem Fall auf 0 zurück gesetzt
if (!digitalRead(8)) {
startZeit = 0;
return false;
}
// Wenn die Startzeit 0 ist, war die Taste vorher noch nicht gedrückt
// Wir setzten die Startzeit und geben false zurück
if (startZeit == 0) {
startZeit = millis();
return false;
}
// Die Taste ist schon längere Zeit gedrückt
// Gib zurück, ob schon 3 Sekunden vergangen sind
return (millis() - startZeit >= 3000);
}
clickbutton und oneklick muss ich mir noch anschaun.
dreiSekundenGedrueckt() gibt 1 zurück wenn der button länger als 3 sek gedrückt war,
ansonsten 0 wenn ich das richtig sehe.
ich hänge irgendwie daran wie ich mit dem einen status einmal an und einmal auschalten kann.
bei:
int statusAN =0
loop()
if (digitalRead(buttonPin1)=HIGH)
{
statusAN = 1
}
if (digitalRead(buttonPin2)=HIGH)
{
statusAN = 0
}
kann ich das programm ja einfach solange durch eine while schleife lauen lassen bis der andere knopf gedrückt wird.
wie ich das mit einem knopf hinbekomme versteh ich im moment noch nicht.
Statusvariablen(Boolean) sind Taste und Unterprogramm
loop
{
Wenn keine Taste gedrückt speichere aktuelle millis() in altmillis und Taste=false
Wenn millis()-altmillis>3000 und Taste=false dann Taste=true, Unterprogramm=!Unterprogramm (!=logisches nicht)
Wenn Unterprogramm=true dann Aufruf Unterorogramm
}
Taste sorgt dafür, dass zwischen an und abschalten des Unterprogramms einmal der Taster losgelassen werden muss. Unterprogramm schaltet zwischen an und aus um, bei jedem Tastendruck länger als 3sec…
combie:
Wenn nicht gedrückt, Zeit merken.
Wenn Zeit länger als 3 Sec, tuwas().
Denn so braucht es keinen Status.
Den brauchts erst, um tuwas() Wiederholungen zu unterbinden.
Da unsere Beiträge gerne übersehen werden, hier ein weiterer zum Übersehen: