PDA

View Full Version : pyserial + vizard


krimble
09-22-2009, 03:19 AM
Hi all,
I'm wondering if somebody can help me with a communication problem I have with a hardwareDevice connected to my serial port. We would like to connect a bike to Vizard and use the cycleData to control the camera. (we already have the protocol information and we are able to print correct data in Delphi)

I found the pyserial recommendation in the Worldviz-Knowledgebase. But I can't get it to work properly. When I try to print x nothing happens.

Does anybody have experience with pySerial in Vizard.

Thank you so much!


import serial
import viztask

viz.go()

#hex(255)[2:] = ff
#int('ff',16) = 255

start_flag = int('F1',16)
stop_flag = int('F2',16)
cmdGetSpeed = int('A5',16)
cmdSetGear = int('2D',16)

ser = serial.Serial(
port=0,
parity=serial.PARITY_NONE,
bytesize=serial.EIGHTBITS,
stopbits=serial.STOPBITS_ONE,
timeout=0,
xonxoff=0,
rtscts=0,
baudrate=9600
)


def mykeyboard(key):
if key == "s" :
viztask.schedule(serialComTask())


def serialComTask() :
ser.write(start_flag)
ser.write(cmdGetSpeed)
ser.write(cmdGetSpeed)
ser.write(stop_flag)
print "sended"
yield viztask.waitTime(2)
print "waited 1 sec"
x = ser.read(4)
print x

def onExit():
print "quiting"
ser.close() # close port
pass

viz.callback(viz.KEYBOARD_EVENT,mykeyboard)
viz.callback(viz.EXIT_EVENT,onExit)

Moh200jo
09-22-2009, 03:32 AM
try x=ser.readline()

krimble
09-22-2009, 05:44 AM
Hi Moh200jo,
thanks for your reply. But it doesn't make a difference.

Do you maybe already have written a vizardScript were you use pySerial in. If so, you would be really helpful if I could take a look at it.
If you don't want to post it here this is my email:
j.derks@psych.ru.nl

Thanks so much!

Farshizzo do you have an idea how to use pyserial?

farshizzo
09-22-2009, 11:04 AM
What do you mean "nothing happens" when you call print x? Are you sure the data isn't just space characters? Try replacing print x with the following:print 'Received',len(x),'bytes'

krimble
09-23-2009, 04:00 AM
Hi farshizzo,
now It's printing "Received 0 bytes". Is there maybe a script available were I can take a look at?
The baudrate etc. parameters are having the same values as in the delphi program. That's why I'm wondering if there's something wrong with the rest of my script.

Thanks!

Moh200jo
09-23-2009, 05:31 AM
HI
I had a problem to send int data. So, I correct the problem is that pyserial does not work with int("FF",16) function. You can send Hex data to see if your code is correct or not, am sure you will find it working.
Plz Let me know if your code works.

krimble
09-23-2009, 07:31 AM
Hi all,

I think I'm on the right track :-). I changed the variables to the corresponding ascii codes. I'm sending and getting stuff back now. Now I have to check if the stuff I'm getting back is the right stuff :-) if you get what I mean.

start_flag = chr(241)
stop_flag = chr(242)
cmdGetSpeed = chr(165)
cmdSetGear = chr(45)

Thanks so much for your help! If I have more questions I will get back to you guys!