Frage:
Was bedeutet die Zeile "while (! Serial)"? in einem Arduino-Programm tun?
Brendan
2014-10-11 21:44:55 UTC
view on stackexchange narkive permalink

Ich bin neu in Arduino und probiere ein paar Tutorials aus. Was macht diese Zeile in einem Programm?

  while (! Serial);  
Dies wird unter http://arduino.cc/en/Serial/IfSerial vollständig beantwortet und ist online in Ihrer Arduino IDEs-Hilfe verfügbar. Es ist also kein Thema für dieses Forum.
Diese Frage scheint nicht zum Thema zu gehören, da es sich um die Arduino-Bibliothek handelt. Die Frage wird in der Hilfe der Arduino IDE vollständig beantwortet. Vielleicht sollte es auf dem Arduino Stackexchange sein.
Einer antworten:
Majenko
2014-10-11 21:52:27 UTC
view on stackexchange narkive permalink

Auf Karten mit einem FT232-Chip oder einem anderen USB-> Serial Bridge-Chip (Uno, Mega usw.) macht es absolut nichts.

Auf Karten mit einer direkten USB-Verbindung wie dem Leonardo oder dem Yùn wartet darauf, dass eine aktive serielle Verbindung vom PC hergestellt wird (dh dass die serielle Schnittstelle von einer Software geöffnet wird).

Wenn Sie die serielle Schnittstelle einer Karte wie der Uno öffnen oder Mega setzt die gesamte Karte normalerweise * sup> zurück. Wenn Sie also die serielle Schnittstelle öffnen, können Sie die ersten Bits der seriellen Daten sehen. Auf dem Leonardo usw. wird es nicht zurückgesetzt, wenn Sie die serielle Ausgabe öffnen, sodass jede serielle Ausgabe während der Funktion setup () übersehen wird. Durch Hinzufügen dieser Zeile wird die Karte angehalten, bis Sie die serielle Schnittstelle öffnen, sodass Sie das erste Datenbit sehen können.

*) Es sei denn, Sie schreiben speziell eine Software, die DTR nicht bestätigt, wenn Sie öffnen den Port sup>

Streng genommen "Wenn Sie die serielle Schnittstelle einer Karte wie Uno oder Mega öffnen, wird die gesamte Karte zurückgesetzt" ist nicht korrekt. Die IDE des Arduino erledigt dies standardmäßig. Durch einfaches Öffnen der seriellen Schnittstelle vom USB-Host-PC wird der ATmega jedoch nicht zurückgesetzt. Ich habe Code geschrieben, der eine serielle Verbindung über USB vom Host her öffnet und den ATmega nicht zurücksetzt.
Tatsächlich ist es sowohl vom Betriebssystem als auch vom Treiber abhängig, nicht nur von der Software, die den Port öffnet.
Das Arduino wird zurückgesetzt, wenn es das DTR-Signal empfängt. Es wird standardmäßig übertragen, wenn ich eine Verbindung von einem beliebigen Ort aus öffne, nicht nur von der IDE von Arduino.
In einigen Betriebssystemen ist es möglich, die Seriennummer zu öffnen, ohne DTR zu aktivieren. In anderen Fällen kann ein Port so konfiguriert werden, dass beim Öffnen kein DTR aktiviert wird, sondern erst, nachdem er einmal geöffnet wurde. Wie bereits erwähnt, bestätigt die IDE standardmäßig immer explizit DTR.
Ich glaube, es ist möglich, eine FTDI SUB / Serial zu öffnen, ohne DTR unter Windows, OS X und Linux zu aktivieren, weil ich es getan habe. Es ist optional. Bitte aktualisieren Sie die Antwort. * Entweder * sagen Sie, wenn die * IDE * die serielle Schnittstelle öffnet, wird die Karte zurückgesetzt, * oder * das Öffnen des * seriellen Monitors * setzt sie zurück * oder * das Öffnen der seriellen Schnittstelle * wird normalerweise * zurückgesetzt Die Tafel. Es macht mir nichts aus, welche gewählt wird. Die aktuelle Antwort ist jedoch nicht korrekt.
@BrettM - welches Betriebssystem?
Unter Linux müssen Sie zuerst den Port öffnen, um den Port so einzustellen, dass DTR nicht aktiviert wird. Diese erste Öffnung setzt die Karte unabhängig davon immer zurück.
Beachten Sie, dass wenn diese Zeile in Ihrer Skizze enthalten ist, Sie einen 32u4- oder M0-Chip oder einen ähnlichen Chip mit integrierter USB-Unterstützung verwenden und versuchen, ohne Verbindung über USB mit einem Host verbunden zu werden, Ihre Skizze für immer auf Serial wartet bereit sein. Dies ist ein häufiges Problem: "Sketch wird ausgeführt, wenn eine Verbindung zum PC besteht, jedoch nicht, wenn keine Verbindung besteht".


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...