2017-07-23 9 views
0

Ich denke, mein Problem würde am besten mit einem Beispiel erklärt werden. Hier einige Arduino Code:Arduino sendet alte Daten über die serielle

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 
    Serial.println(millis()); 
    delay(1); 
} 

... und hier ist die Ausgabe:

Arduino Output

nun diese Zahlen am Anfang sind nicht nur Ihre regelmäßigen alten First-Byte-of - Serial-Data - sind immer vermasselte Nummern. Diese Nummern bleiben vom letzten Öffnen des seriellen Monitors übrig. Woher weiß ich das? Weil ich gezählt habe, wie viele Sekunden vergangen sind, seit ich den seriellen Monitor zum letzten Mal geöffnet habe.

Also hier ist die große questioroonie,

Wie kann ich das verhindern? Es bricht mein Java-Programm, das Daten aus der aktuellen "run instance" von Arduino lesen soll (ich kenne den richtigen Begriff nicht), und nicht die letzte.

Antwort

1

Es ist nichts falsch mit Ihrem Arduino. Denken Sie daran, dass die USB-Verbindung keine echte serielle RS-232-Schnittstelle ist, sondern über USB simuliert wird. Und diese USB-Verbindung wird von einem Chip mit eigenem Puffer gesteuert.

Schlechte Nachrichten sind, nichts, was Sie tun können, wenn Sie das USB-Kabel verwenden, um Ihre RS-232-Signale zu tragen, außer einige Füllzeichen zu senden, um den Puffer zu löschen. Zu viele Puffer überall :) Senden Sie einige Terminalemulationsbefehle wie "Löschen Sie den Bildschirm" und "Form Feed" usw., um die Pipeline von Zeug im Puffer zu leeren.

Das erinnert mich - wir sollten alle mit dem kränklichen Arduino seriellen Monitor aufhören und laut darüber sein. Verwenden Sie stattdessen TeraTerm oder Putty oder einen anderen Terminalemulator Ihrer Wahl in guter Qualität.

Oder verbinden Sie mit echten RS232 und einem Adapter und Kabel. Meine Entwicklungsmaschine hat drei serielle Ports, aber das ist es, was ich tue. Computer haben heute oft nicht einmal ein Handy.

Verwandte Themen