Serial.setTimeout() ???

Hi,

kann mir mal jemand den Befehl "Serial.setTimeout()" genauer erklären? Ich krieg das nicht in die Birne.

Mit der Erklärung in der Reference komm ich auch nicht so ganz weiter.

Serial.setTimeout() sets the maximum milliseconds to wait for serial data when using Serial.readBytesUntil() or Serial.readBytes(). It defaults to 1000 milliseconds.

Ab wann fängt die Zeit zu laufen an? Und was ist nach Ablauf der Zeit? Ist dann der Empfangspuffer geschlossen?

Danke/hk007

readBytes() und readBytesUntil() sind blockierend. Sobald du die aufrufst warten die entsprechend lange und kehren erst wieder zurück wenn die Zeit vorbei ist.

Strings bis zu einem bestimmten Zeichen einzulesen geht viel schöner per Hand ohne dass man das Programm blockiert.
Und auch binäre Bytes einzulesen könnte man selbst mit millis() nicht-blockierend machen wenn es zeit-gesteuert sein muss.

Hi Serenifly,

danke für die Erklärung. Das mit den "blockierend" hab ich verstanden. Und auch bemerkt, dass read() und readBytes() sehr unterschiedlich sind.

Serenifly:
Und auch binäre Bytes einzulesen könnte man selbst mit millis() nicht-blockierend machen wenn es zeit-gesteuert sein muss.

Das versteh ich wieder mal nicht. :confused:

Anfangen einzulesen wenn Daten da sind, die Zeit mit millis() zählen, während dessen was anderes machen und wenn die Zeit rum ist die Daten verarbeiten.

Wenn es natürlich nur ein kurzes Daten-Telegramm ist und dein Programm nicht super schnell durchlaufen muss, kann es auch sein, dass eine kurze Timeout Zeit in Ordnung ist. Der nötige Timeout nimmt auch mit höheren Baudraten ab.

Braucht man aber nicht unbedingt. Wenn man die freie Wahl über das Übertragungsprotokoll hat finde es angenehmer mit Strings zu arbeiten. Da kann man einfach bis zu einem Endzeichen einlesen und muss nichts zeitgesteuert machen.

Es hängt von der Anwendung ab, was da akzeptable Geschwindigkeit bringt. Manchmal ist es auch völlig ok wenn Code blockiert.

Nachtrag:
readBytesUntil() kehrt zurück wenn die Zeit abgelaufen ist, oder natürlich auch wenn das Endzeichen vorher eingelesen wurde.