Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

5.4 Intervall

Manchmal müssen Sie zwei Dinge gleichzeitig tun. Zum Beispiel möchten Sie vielleicht eine LED blinken lassen, während Sie einen Tastendruck lesen. In diesem Fall können Sie nicht delay() verwenden, weil Arduino Ihr Programm während des delay() anhält. Wenn die Taste gedrückt wird, während Arduino auf das Ende des delay() wartet, wird Ihr Programm den Tastendruck übersehen.

Ein Vergleich wäre, eine Pizza in Ihrer Mikrowelle aufzuwärmen und gleichzeitig auf eine wichtige E-Mail zu warten. Sie legen die Pizza in die Mikrowelle und stellen sie auf 10 Minuten. Das Analogon zur Verwendung von delay() wäre, vor der Mikrowelle zu sitzen und den Timer von 10 Minuten herunterzählen zu sehen, bis der Timer null erreicht. Wenn die wichtige E-Mail in dieser Zeit ankommt, werden Sie sie verpassen.

Was Sie im wirklichen Leben tun würden, wäre die Pizza einzuschalten, dann Ihre E-Mails zu überprüfen und dann vielleicht etwas anderes zu tun (das nicht zu lange dauert!) und von Zeit zu Zeit würden Sie zur Mikrowelle zurückkommen, um zu sehen, ob der Timer null erreicht hat, was bedeutet, dass Ihre Pizza fertig ist.

Dieses Sketch zeigt, wie man einen Summer ohne Verwendung von delay() tönt. Es schaltet den Summer ein und notiert dann die Zeit. Dann überprüft es bei jedem Durchlauf durch loop(), ob das gewünschte Intervall vergangen ist. Wenn dies der Fall ist, tönt es den Summer und notiert die neue Zeit. Auf diese Weise tönt der Summer kontinuierlich, während die Sketch-Ausführung nie an einer einzigen Anweisung hängen bleibt.

Aufgrund dieses Zustands können wir den Code der Taste hinzufügen, um die LED zu steuern, sie wird nicht durch den Summer, der Musik spielt, gestört.

Erforderliche Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENVORSTELLUNG

KAUF-LINK

SunFounder R3 Platine

KAUFEN

Breadboard

KAUFEN

Jumper-Kabel

KAUFEN

Widerstand

KAUFEN

LED

KAUFEN

Knopf

KAUFEN

Summer

KAUFEN

Schaltplan

../_images/circuit_8.5_interval.png

Verdrahtung

../_images/interval_bb.jpg

Code

Bemerkung

  • Öffnen Sie die Datei 5.4.interval.ino unter dem Pfad 3in1-kit\basic_project\5.4.interval.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

  • Oder laden Sie den Code über den Arduino Web Editor hoch.

Nachdem der Code erfolgreich hochgeladen wurde, wird der Summer Musik abspielen; jedes Mal, wenn Sie den Knopf drücken, leuchtet die LED auf. Die Funktion von LED und Summer stört sich nicht gegenseitig.

Wie funktioniert es?

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

unsigned long previousMillis = 0;

Markieren Sie, welche Note gespielt wird.

int thisNote=0;

Das Intervall jeder Note.

long interval = 1000;

In loop(), deklarieren Sie 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. Aktualisieren Sie gleichzeitig die previousMillis auf die aktuelle Zeit für das nächste Auslösen, das 1 Sekunde später erfolgen soll.

if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;// speichern Sie die letzte Zeit des letzten Tons
    //...
}

Spielen Sie die Noten der Melodie nacheinander ab.

tone(buzzerPin,melody[thisNote],100);
interval=1000/noteDurations[thisNote]; // Intervall zum Tönen
thisNote=(thisNote+1)%(sizeof(melody)/2); // Iterieren über die Noten der Melodie

Der Knopf steuert die LED.

// Knopf & LED steuern
digitalWrite(ledPin,digitalRead(buttonPin));