Verständnisproblem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
RudelGurken
User
Beiträge: 29
Registriert: Freitag 24. Mai 2013, 09:51

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
Zuletzt geändert von RudelGurken am Freitag 24. Mai 2013, 10:49, insgesamt 1-mal geändert.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Auch ich verstehe deinen Code nicht, denn der besitzt offensichtlich Syntaxfehler.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
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.
RudelGurken
User
Beiträge: 29
Registriert: Freitag 24. Mai 2013, 09:51

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Willkommen im Forum!

Nun, `TRUE` fuehrt erstmal zu einem `NameError`. Auch wenn das kein Syntax Fehler ist, ist der Code dennoch nicht ausfuehrbar.
RudelGurken
User
Beiträge: 29
Registriert: Freitag 24. Mai 2013, 09:51

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.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

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.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
RudelGurken
User
Beiträge: 29
Registriert: Freitag 24. Mai 2013, 09:51

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
Antworten