you can use this to dump the serial data, show angle and omega as two little needles. you most likely need to make some changes to suit your needs.
from Tkinter import *
import time
import re
import sys
import math
import threading
import serial
class MyWindow:
def __init__(self,root):
self.w = 800
self.h = 500
self.angle = 0;
self.omega = 0;
self.canvas = Canvas(root,width=self.w, height=self.h, bg="#456", relief= "sunken", border=10)
self.canvas.create_line(0,0,0,0, tags="angle", fill="red")
self.canvas.create_line(0,0,0,0, tags="omega", fill="blue")
self.canvas.pack()
self.update(root)
def update(self, root):
wrapped = lambda : self.update(root)
self.canvas.coords("angle", calc_coords(self.angle, self.w, self.h))
self.canvas.coords("omega", calc_coords(self.omega, self.w, self.h))
root.after(25, wrapped)
print "running " + str(self.angle)
def set_data(self, angle, omega):
self.angle = angle
self.omega = omega
def calc_coords(angle, w, h):
r = min(w,h) * 0.8 /2;
return (w/2, h/2 , w/2 + r * math.sin(angle), h/2 - r * math.cos(angle))
root = Tk()
w = MyWindow(root)
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.ser = serial.Serial('/dev/tty.YOUR-bluetooth-serial-DevB', 230400)
def run(self):
angle = 0
omega = 0
while (True):
angle += 2.0/180 * math.pi / (1000/25 ) # double speed
omega += 2.0 *2.0/180 * math.pi / (1000/25 ) # double speed
line = serial.readline()[:-1]
fields = re.split("\s+", line)
angle = float(fields[3]) * math.pi / 180
omega = float(fields[5]) * math.pi/2 / ( 1<<15)
w.set_data(angle, omega)
time.sleep(0.025)
data_controller = MyThread()
data_controller.start()
root.mainloop()