Ich arbeite mit einem Code für entfernte Temperatursensorknoten. Sie schalten die Debug-Schnittstelle ein und aus, je nachdem, ob etwas an die serielle Schnittstelle angeschlossen ist oder nicht.
Der Code ist auf Github hier . Zeile 111 ist die interessierende Zeile:
if (Serial) debug = 1; else debug=0; //if serial UART to USB is connected show debug O/P.
Eine einfache Frage: Wie funktioniert das auf Hardware- und Softwareebene? Ich kann in HardwareSerial oder Stream nichts sehen, was true / false zurückgeben würde, wenn etwas verbunden wäre oder nicht.
Beachten Sie, dass ich nicht sicher bin, ob es tatsächlich funktioniert. Dieser einfache Test zeigt an, dass er nicht funktioniert, da die LED unabhängig vom Vorhandensein eines seriellen Adapters oder einer seriellen Verbindung blinkt:
boolean debug;
const int toggle = 6;
void setup()
{
if (Serial) debug = 1; else debug = 0;
pinMode(toggle, OUTPUT);
digitalWrite(toggle, LOW);
if (debug)
{
Serial.begin(9600);
Serial.println("Setup");
digitalWrite(toggle, HIGH);
delay(1000);
digitalWrite(toggle, LOW);
}
}
void loop()
{
if (debug)
{
Serial.println("Loop");
digitalWrite(toggle, HIGH);
delay(1000);
digitalWrite(toggle, LOW);
delay(1000);
}
}
Antworten:
Sie haben Recht - es funktioniert in den meisten Fällen nicht und gibt fast immer true zurück. Das einzige Board, auf dem es tatsächlich funktioniert, ist das Leonardo. Laut offizieller Dokumentation :
Grundlegende serielle Verbindungen (von den meisten Arduinos verwendet) kümmern sich normalerweise nicht darum, ob tatsächlich etwas zuhört. Es ist nicht ungewöhnlich, dass eingebettete Geräte Debug-Informationen seriell senden, auch wenn sie von nichts empfangen werden. Dies hat den Vorteil, dass sich das Timing und Verhalten des Codes beim Debuggen nicht ändert. Dies kann zu allen möglichen Problemen führen, wenn Sie versuchen, ein im Feld gemeldetes Problem zu diagnostizieren.
quelle
Während möglicherweise nicht erkannt werden kann, ob ein Gerät an die serielle Arduino-Verbindung angeschlossen ist oder nicht, können die Debug-Meldungen über die serielle Verbindung basierend auf dem Vorhandensein eines Geräts in der seriellen Verbindung aktiviert werden .
Da Sie die Debug-Oberfläche Ihrer Skizze nur verwenden, wenn Sie an einen Computer angeschlossen sind, der serielle Kommunikation ermöglicht, können Sie einen einfachen Test in die Skizze integrieren, basierend darauf, welcher Debug-Modus aktiviert ist oder nicht.
Wenn die Skizze beginnt, können Sie überprüfen, ob Daten für die serielle Verbindung verfügbar sind oder nicht. Wenn dies der Fall ist, ist ein Gerät vorhanden und das Debuggen kann aktiviert werden. Auf der Computerseite senden Sie jedes Mal, wenn Sie den Debugging-Modus auf dem Arduino starten möchten, während der
setup
Phase einfach ein Byte über die serielle Verbindung und lehnen Sie sich zurück.Hier ist eine Beispielskizze, die dasselbe zeigt:
quelle