Pyserial continuous Input check

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
Crhiss
User
Beiträge: 2
Registriert: Freitag 26. November 2010, 13:09

Hi Community,

ich habe ein wahrscheinlich nur kleines Problem und bin voller Hoffnung, dass ihr mir helfen könnt.

Ich habe ein Python Skript, welches eine serielle Verbindung zu einem Arduino Board aufbaut. Sobald die Verbindung aufgebaut ist soll die ganze Zeit der Input überprüft werden und sofern ich bestimmte Daten vom Arduino Board bekomme sollen diese einfach in der Konsole ausgegeben werden. Darüber hinaus möchte ich aber auch Eingaben über das Terminal machen können, was wiederrum ans Arduino Board gesendet wird. Zusammenfassend soll also die ganze Zeit über der Eingang überprüft werden ob etwas vom Arduino kommt und zudem möchte ich Eingaben via Terminal machen können.

Folgender Code funktioniert nicht

Code: Alles auswählen

import serial
import threading

speed = 9600
port = "/dev/tty.usbserial-A800eIZh"
arduino = serial.Serial(port, speed, timeout=1) 
exit_flag = False

class listening(threading.Thread):
    def run(self):
        while not False:
		    try:
		        s = arduino.read(1024)
		        print "Got from Arduino:", s
		    except IOError:
		        print "IOError!"

class terminal_input(threading.Thread):
    def run(self):
        exit_flag = False
        while not exit_flag:
		    try:
		        t = arduino.read(1024)
		        t = raw_input("Send XXX to quit:")
		        if t == 'XXX':
		            exit_flag = True
		        arduino.write(t)
		    except IOError:
		        print "IOError!"
        arduino.close()
        
x = listening()
y = terminal_input()
y.start()
x.start()
Grüße,
Crhiss
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Hallo Crhiss, willkommen im Forum!

Heißt der Port wirklich so?
Was passiert, wenn du mal die Beispiele auf http://www.arduino.cc/playground/Interfacing/Python ausprobierst, funktioniert es dann, kommt eine Fehlermeldung, etc.?
Funktioniert arduino-serial bei dir?
Crhiss
User
Beiträge: 2
Registriert: Freitag 26. November 2010, 13:09

So habe es selber gelöst. Hier der funktionierende Code. Hatte einfach ein einigen Stellen nicht zu Ende gedacht.

Code: Alles auswählen

import serial
import threading

speed = 9600
port = "/dev/tty.usbserial-A800eIZh"
arduino = serial.Serial(port, speed, timeout=1) #X ist hier die Nummer des Arduino Com-Ports
exit_flag = False

class listening(threading.Thread):
    def run(self):
        while not exit_flag:
            s = arduino.read(1)
            if s == '!':
                print "Got from Arduino:", s
            elif s == 'V':
                print "Got from Arduino:", s
            elif s == 'B':
                print "Got from Arduino:", s

class terminal_input(threading.Thread):
    def run(self):
        exit_flag = False
        while not exit_flag:
            try:
                t = raw_input("Send XXX to quit:")
                if t == 'XXX':
                    exit_flag = True
                arduino.write(t)
            except IOError:
		        print "IOError!"
        arduino.close()
        
x = listening()
y = terminal_input()
y.start()
x.start()
Antworten