Serial - Reaktion erst nach zweiter Botschaft ?

Hallo,

mein Raspberry Pi 3b+ und Arduino UNO sollen über die serielle Schnittstelle kommunizieren. Auf dem Raspi nutze ich ein Python Programm, welches die serielle Schnittstelle steuert. Der Arduino soll dabei als ADC für den Raspi arbeiten. Das Problem ist, wenn ich den Arduino einmal vom Raspi trenne (oder den Raspi neu starte) bekomme ich anschließend nach Ausführen des Python Programms erst nach dem Senden der zweiten Botschaft eine Antwort vom Arduino. Was auch interessant ist: Wenn die .ino Datei nach dem Reconnect (USB) erneut auf den Arduino geladen wird (nutze die Arduino IDE auf dem Raspi) besteht dieses Problem nur beim ersten Ausführen des Python Programms. Im Anhang findet ihr die Consolue Outputs, damit sollte es verständlich sein.

In der Vergangenheit hatte ich bereits ein ähnliches Problem: Arduino hängt am Windows-PC und kommuniziert über die serielle Schnittstelle mit einer Windows-Form. Allerdings bekam ich auch hier nach dem Reconnect des Arduino (USB) oder Neustart des PCs erst eine Antwort nach der zweiten gesendeten Botschaft. Damals hatte ich es einfach gelöst indem die Windows-Form zusätzlich eine erste Botschaft sendet, welche der Arduino ignoriert (falls er es nicht eh schon tut). Kann man das auch schöner lösen? Scheinbar mache ich irgendwo einen Fehler.

Arduino_Kommunikationstest_py.txt (970 Bytes)

MEASURE.ino (532 Bytes)

Console_Output_1.txt (1.3 KB)

Console_Output_2.txt (1.41 KB)

Welcher Arduino?

Gruß Tommy

Ich habe das schon bei einfachen Test-Programmen gemerkt wo ich nur einen String sende. Der erste wird oft nicht registriert

Man muss nach dem Öffnen des Ports den Reset des Arduino abwarten.
Oder den Reset unterdrücken.

Dann klappt das auch.
Zuverlässig.

combie:
Man muss nach dem Öffnen des Ports den Reset des Arduino abwarten.
Oder den Reset unterdrücken.

Dann klappt das auch.
Zuverlässig.

nach dem Öffnen des Ports im Arduino oder Raspi?

kann man das Abfragen oder muss man eine bestimmte Zeit abwarten?

Du kannst in setup() eine Nachricht in die andere Richtung schicken wenn du es genau willst.

Der Reset wird durch DTR gesteuert. Wenn man also auf der anderen Seite die Leitung steuern kann ist er leicht zu unterdrücken. In .NET ist das sehr leicht

Danke für den Hinweis, jetzt habe ich es verstanden.