1.11 Intervall

Überblick

Manchmal müssen Sie zwei Dinge auf einmal tun. Zum Beispiel könnten Sie eine LED blinken lassen und gleichzeitig einen Tastendruck lesen. In diesem Fall können Sie nicht delay() verwenden, da Arduino das Programm während delay() anhält. Wenn Taste gedrückt wird, während Arduino pausiert und auf den Ablauf von delay() durchläuft, verpasst Ihr Programm den Tastendruck.

Dieser Sketch demonstriert, wie man eine LED ohne delay() zum Blinken bringt. Er schaltet die LED ein und notiert dann die Zeit. Dann, jedes Mal durch loop(), um zu sehen, ob die gewünschte Blinkzeit verstrichen ist. Ist dies der Fall, wird die LED ein- oder ausgeschaltet und die neue Zeit notiert. Auf diese Weise blinkt die LED kontinuierlich, während die Ausführung des Sketches nie einer einzigen Anweisung verzögert.

Eine Analogie wäre das Aufwärmen einer Pizza in der Mikrowelle und das eine wichtige E-Mail warten. Sie legen die Pizza in die Mikrowelle und stellen sie für 10 Minuten. Die Analogie zur Verwendung von delay() wäre, sich vor die Mikrowelle zu setzen vor der Mikrowelle zu sitzen und zuzusehen, wie der Timer von 10 Minuten herunterzählt, bis er Timer Null erreicht. Wenn die wichtige E-Mail in dieser Zeit eintrifft, werden Sie wird man sie verpassen.

Im wirklichen Leben würde man erst die Pizza anmachen und dann und dann Ihre E-Mails abrufen, dann vielleicht etwas anderes tun (das nicht zu lange dauert!) (das dauert zu lange!), und ab und zu kommen Sie zur Mikrowelle zurück, um zu sehen um zu sehen, ob der Timer Null erreicht hat, was bedeutet, dass die Pizza fertig ist.

Erforderliche Komponenten

../_images/list_1.11.png

Fritzing-Schaltung

In diesem Beispiel verwenden wir den digitalen Pin 9, um die LED anzusteuern, und wir verbinden eine Seite des Widerstands an die entsprechenden digitalen Pins. Der längere Pin der LED (eine positive Elektrode, Anode genannt) ist mit der anderen der anderen Seite des Widerstands verbunden. Der kürzere Stift (eine negative Elektrode, bezeichnet als Kathode) der LED ist mit GND verbunden.

../_images/image30.png

Schematische Darstellung

../_images/image466.png

Code

Bemerkung

  • Sie können die Datei 1.11_interval.ino unter dem Pfad sunfounder_vincent_kit_for_arduino\code\1.11_interval direkt öffnen.

  • Oder kopieren Sie diesen Code in Arduino IDE.

Wenn Sie das Hochladen der Codes auf das Mega2560-Board abgeschlossen haben, sehen Sie, wie die LED hochgeladen wird.

Code-Analyse

Deklarieren Sie den digitalen Pin 9 als ledPin.

const int ledPin = 9;

Setze den Zustand von ledState auf LOW, um die LED auszuschalten.

int ledState = LOW;

Initialisiere eine Variable namens previousMillis, um die vorherige Betriebszeit des Mikrocontrollers zu speichern.

unsigned long previousMillis = 0;

Setzt die Intervallzeit auf 1000ms (Millisekunden).

const long intervall = 1000;

Setze ledPin in den OUTPUT-Modus.

pinMode(ledPin, OUTPUT);

In loop() deklarieren wir currentMillis, um die aktuelle Zeit zu speichern.

unsigned long currentMillis = millis();

Wenn das Intervall zwischen der aktuellen Betriebszeit und der letzten Aktualisierungszeit größer als 1000ms ist, werden bestimmte Funktionen ausgelöst. In der Zwischenzeit wird previousMillis auf die aktuelle Zeit für die nächste Auslösung aktualisiert, die 1 Sekunde später erfolgen soll.

if (currentMillis - previousMillis >= Intervall) {
    previousMillis = currentMillis;// speichere das letzte Mal, als die LED blinkte
//..
}

Hier werden bestimmte Funktionen in Intervallen ausgeführt, um den Zustand der LED zu ändern.

if (ledState == LOW)
{ledState = HIGH;}
else
{ledState = LOW;}
digitalWrite(ledPin, ledState);

Phänomen Bild

../_images/image36.jpeg