INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
4 Tasten für 4 Laufzeiten des gleichen Programms
18.07.2016, 16:32
Beitrag #9
RE: 4 Tasten für 4 Laufzeiten des gleichen Programms
Hey!

(17.07.2016 15:54)Binatone schrieb:  Also ich denke, Dein "interval = 0;" steht ein paar Zeilen zu tief.
Solange Deine LED leuchtet, läuft die Zeitschleife.
In dieser Zeit darf der Interval nicht verändert werden.
Bestenfalls durch erneutes Drücken einer der drei Tasten.

Binatone

Also der Code sollte stimmen und die Linie passt so, nichts verschieben. Ja - das Intervall kann während die LED leuchtet verändert werden, diese Funktion war mir aber nicht klar, ob es so sein soll oder nicht. Eine kleine Änderung und es sollte dann wie gewollt funktionieren:
Code:
// GLOBALE VARIABLE
#define BUTTON_PRESSED 100 // in dieser Zeit wird das Interval definiert
unsigned long tmpInterval; // für Zwischenspeicher

// IM CODE

// Wenn Taster gedrückt wurde, wird interval gesetzt, somit ist interval > 0 == true
if (interval > 0) {
    // Erster Durchlauf, LED ist noch LOW, die Startzeit wird gemerkt, und LED wird HIGH gesetzt. Bei den folgenden Durchläufen ist dieser IF falsch
    if (digitalRead(13) == LOW) {
        startTimer = millis();
        digitalWrite(13, HIGH);
    }
    // Nach BUTTON_PRESSED' Millisekunden kommt man in diesen IF und das Interval wird zwischengespeichert (danach nicht mehr veränderbar)
    // falls dieser Teil ausgelassen wird, kann es zu Problemen kommen, da alle gewünschten buttons in EINEM loop gleichzeitig gedrückt werden müssten (ziehmlich unwarscheinlich)
    // somit hat man BUTTON_PRESSED' Millisekunden Zeit, eine gewolltes Buttonposition zu haben
    else if (millis() - startTime > BUTTON_PRESSED && tmpInterval == 0) {
        tmpInterval = interval;
    }
    // nach einer Zeit (interval) wird alles wieder zurückgesetzt
    if (millis() - startTimer > tmpInterval) {
        digitalWrite(13, LOW);
        tmpInterval = 0;
        interval = 0;
    }
}

Eine weitere Verbesserung könntest du noch durch Taster entprellen machen. Google danach einmal und mach dich schlauer (falls es dich interessiert Wink ).

mfg Scheams
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Question Keine Verbindung via USB nach flashen des Programms chaoscrack 5 203 23.08.2016 14:58
Letzter Beitrag: hotsystems
  2 Tasten drücken damit licht angeht tjard 11 551 19.06.2016 12:24
Letzter Beitrag: hotsystems
  SainSmart 1602 LCD Keypad Shield Modul Display Tasten Rossy 20 3.065 08.08.2015 12:44
Letzter Beitrag: hotsystems
  Tasten prellen StephanBuerger 10 2.007 11.02.2015 10:11
Letzter Beitrag: Thorsten Pferdekämper
  Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten Marlox 42 6.598 28.12.2014 22:49
Letzter Beitrag: Marlox
  Start + Stop Tasten für Schrittmotor Dortmunder85 3 7.425 27.08.2013 17:51
Letzter Beitrag: rkuehle

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste