Introduction
This week I have learned how to write interface programs on computer. Basically, I need to write a program to interface with my device, which includes receiving data from my devices and displaying them on screen, and controlling the devices in the program.
Interfacing with Jotsticks
I will staart with a very simple case, where I will control the position of a ball by joysticks.
Here is the code for that function:
import serial import sys from Tkinter import * x_pos = 512 y_pos = 512 x_change=0 y_change=0 r = 50 #size of the circle def idle(parent,canvas): global x_pos, y_pos byte2 = 0 byte3 = 0 byte4 = 0 while 1: byte1 = byte2 byte2 = byte3 byte3 = byte4 byte4 = ord(ser.read()) if ((byte1 == 1) & (byte2 == 2) & (byte3 == 3) & (byte4 == 4)): break x0 = ord(ser.read()) x1 = ord(ser.read()) y0 = ord(ser.read()) y1 = ord(ser.read()) x_change = (x0+255*x1-512)/200. - x_pos y_change = (y0+255*y1-512)/200. - y_pos x_pos = (x0+255*x1-512)/200. y_pos = (y0+255*y1-512)/200. #print(x_pos,y_pos) #canvas.delete("path") canvas.move(ball, x_change, y_change) parent.after_idle(idle,parent,canvas) if (len(sys.argv) != 2): print("command line: monitor.py serial_port") sys.exit() port = sys.argv[1] ser = serial.Serial(port,9600) root = Tk() root.title("Joystick.py") root.bind('q','exit') canvas = Canvas(root, width=1000, height=1000, background='white') canvas.pack() ball = canvas.create_oval(x_pos, y_pos, x_pos-r, y_pos-r, fill="blue") root.after(50,idle,root,canvas) root.mainloop()
Accelerometer and gyro
In this section, I wil make use of Axes3D in matplotlib, together with tkinter, to draw a rectangular. Then I will use the data from my LSM6DS33 to control the motion and position of the box.