Seite 1 von 1

Verständnisproblem

Verfasst: Freitag 24. Mai 2013, 10:03
von RudelGurken
Hi,
ersteinmal vielen Dank für dieses tolle Forum. Ich habe schon einige Dinge hier lernen dürfen, doch nun darf ich meine erste eigene Frage stellen. Ich arbeite mit einem Raspberry Pi und einem Arduino. Mein Arduino ist mit Sensoren bestückt und schickt alle x-Sekunden die Messdaten an den Raspberry Pi. Mit Hilfe von Python werte (nein möchte ich) diese Daten aus. Doch hier habe ich ein kleines Problem, ich verstehe meinen Code und die dazugehörige Ausgabe nicht. Dazu zeige ich euch beides auf:

Code: Alles auswählen

import serial
print "Sensorprogramm gestartet"
ser = serial.Serial('/dev/ttyUSB0',115200)
while TRUE:
       i=i+1
       x=ser.readline()
       print i
       print x
       if i == 5:
               i=0
Nun schaut die Ausgabe so aus:

Code: Alles auswählen

Sensorprogramm gestartet
1

2
Wert1

3
Wert2

4
Wert3

5
Wert4

1
Wert5

2
Wert1

3
Wert2

.....und so weiter

Ich verstehe nicht, warum die 1 beim ersten mal einfach ausgegeben wird?! Vielleicht kann mir jemand bei der Problemstellung helfen.
mit freundlichem Gruß
Georg

Re: Verständnisproblem

Verfasst: Freitag 24. Mai 2013, 10:41
von darktrym
Auch ich verstehe deinen Code nicht, denn der besitzt offensichtlich Syntaxfehler.

Re: Verständnisproblem

Verfasst: Freitag 24. Mai 2013, 10:42
von BlackJack
@RudelGurken: Vielleicht machst Du in Deinem *echten* Programm irgend etwas anders? Kann man schlecht sagen ohne zu sehen was Du *tatsächlich* laufen lässt. Das gezeigte compiliert nicht mal. Und es stellt sich auch die Frage ob das die tatsächliche Ausgabe ist, wenn Du uns schon nicht den echten Quelltext zeigst.

Vielleicht, das ist jetzt aber nur geraten, bekommst Du als erstes tatsächlich eine leere Zeichenkette, sprich gar keine Daten vom ersten `readline()`, zum Beispiel weil der Arduino gerade gestartet wurde. Die meisten Modelle warten am Anfang eine bestimmte Zeit ob über die serielle Leitung geflasht werden soll, und erst danach steht die Leitung normal zur Kommunikation bereit.

Re: Verständnisproblem

Verfasst: Freitag 24. Mai 2013, 10:51
von RudelGurken
Wo befinden sich, denn da noch Syntaxfehler, den Doppelpunkt nach "while TRUE" habe ich ergänzt. Ansonsten ist dass der Code, den ich habe. Sprich ich habe nichts geändert. Ich werde das "readline()" einfach einmal überprüfen.

vielen Dank

Re: Verständnisproblem

Verfasst: Freitag 24. Mai 2013, 10:55
von cofi
Willkommen im Forum!

Nun, `TRUE` fuehrt erstmal zu einem `NameError`. Auch wenn das kein Syntax Fehler ist, ist der Code dennoch nicht ausfuehrbar.

Re: Verständnisproblem

Verfasst: Freitag 24. Mai 2013, 11:03
von RudelGurken
Okay, vollkommen richtig. Da ich PC und RasPi nicht mit einander verbunden sind, tippe ich den Code hier manuell ein. TRUE ist im "echten Code" natürlich True.
Und eigenartiger Weise funktioniert der Code jetzt auch und ich weiß noch nicht genau weshalb, mal schauen was passiert, wenn ich Arduino und RasPi neu starte.

Re: Verständnisproblem

Verfasst: Freitag 24. Mai 2013, 11:55
von Kebap
BlackJack hat geschrieben: Vielleicht, das ist jetzt aber nur geraten, bekommst Du als erstes tatsächlich eine leere Zeichenkette, sprich gar keine Daten vom ersten `readline()`, zum Beispiel weil der Arduino gerade gestartet wurde. Die meisten Modelle warten am Anfang eine bestimmte Zeit ob über die serielle Leitung geflasht werden soll, und erst danach steht die Leitung normal zur Kommunikation bereit.
Habe ich auch zunächst vermutet. Der Code sieht relativ ok aus. Wenn er ok ist und einfach ausgibt was ankommt, kommt vielleicht einfach nichts an.

Re: Verständnisproblem

Verfasst: Samstag 25. Mai 2013, 08:23
von RudelGurken
Okay, also das "Problem ist", wenn der Code gestartet wird und genau in dem Moment seriellen Daten reinkommen, werden diese nicht angegeben, aber reagiert wird dennoch auf sie.

Bis dato habe ich den Code immer über die Konsole laufen lassen und es lief. Verwende ich stattdessen die Python Shell von IDLE3, dann erhalte ich einen Syntax-Error. Dieser bezieht sich auf jegliches "print" und der Cursor verweist auf die den Tag abschließenden Hochkommata ", sprich bei print " Hallo ".

mit freundlichem Gruß
euer RudelGurken

EDIT: Hat sich erledigt,bei der Verwendung von IDLE statt IDLE3 läuft es. Also Code an Python 3 anpassen