Last Updated on 7. Januar 2021 by sfambach
Ein beliebtes Beispiel in der Arduino Umgebung ist Blink. Hier wird eine LED mit einer kurzen Pause an und aus geschaltet. Zu Gpio Aktionen kommen wir im nächsten Kapitel, um das Blinken kümmern wir uns hier. Auch in der Arduino Umgebung wird immer geraten Codeunterbrechungen mit Delay zu vermeiden. Dort gibt es einige Konstrukte mit sebst gestrickte Timer oder ganzen Bibliotheken. In der IDF gibt es als Bestandeteil des RTOS Timerfunktionen, diese ermöglichen Funktionsaufrufe zu terminieren. Es gibt zwei Optionen periodisch und das einmalig.
Was benötigt man für einen IDF Timer?
Eine Funktion welche die folgende Signatur haben muss:
static void timer_callback(void* arg){
}
Die Timerargumente, welche die einen Pointer auf die Timerfunktion (s.o.) und einen frei wählbaren Namen enthalten.
const esp_timer_create_args_t periodic_timer_args = {
/* Pointer auf die Funktion */
.callback = &timer_callback,
/* Der name ist optional*/
.name = "periodic"
};
Jetzt noch den Timer erstellen.
esp_timer_handle_t periodic_timer;
ESP_ERROR_CHECK(
esp_timer_create(&periodic_timer_args, &periodic_timer)
);
Dann noch entscheiden ob dieser periodisch oder nur einmal gestarte werden soll. Der zweite Parameter ist die Auslösezeit in Microsekunden (Millisekunden * 1000)
//** periodisch
ESP_ERROR_CHECK(
esp_timer_start_periodic(periodic_timer, 5000000)
);
//** Nur einmal
ESP_ERROR_CHECK(
esp_timer_start_single(periodic_timer, 5000000)
);
Im Beipiel wird die periodische Ausgabe des Textes aus der Übung 1, alle 5 Sekunden realisiert.
Fazit
Es gibt noch viele weitere Optionen in der IDF um Timer zu nutzen. Hier habe ich nur die Oberfläche der Thematik angekratzt. Für weitere Informationen sei deshalb auf die IDF Dokumentation verwiesen.