#!/usr/bin/env python # Emily Mackevicius # Nov 25, 2012 import wx import wx.py import sys,time,serial from select import * def quit(): sys.exit() """def idle(parent): # # idle loop # wait = ser.inWaiting() global byte if (wait != 0): # # read character # byte = ser.read() #time.sleep(0.001) parent.after_idle(idle,parent)""" class MyFrame(wx.Frame): def __init__(self,parent,title): wx.Frame.__init__(self,parent, title=title, size=(800,600)) class Editor(wx.py.editwindow.EditWindow): def __init__(self,parent, margins=True, **kwargs): wx.py.editwindow.EditWindow.__init__(self,parent, **kwargs) @property def text(self): return self.GetText() global Ed, ser Ed = Editor(self, parent, size = (1,1)) self.CreateStatusBar() # create the OK button OKbutton = wx.Button(self, wx.ID_OK, pos = (200,500), label = 'evaluate') self.Bind(wx.EVT_BUTTON, self.OnClick, OKbutton) # list controls ControlText = "Vehicle Controls: \nRfor()\nRback()\nRstop()\nLfor()\nLback\nLstop\n\n\nsenseL, senseR = Sense()\n tilt = Tilt()" VehicleControls = wx.StaticText(self, -1, ControlText, pos = (600,100)) # change to have GUI entries... port = "/Dev/tty.usbserial-FTFBGOT5" #PortText = wx.TextCtrl(self, -1, pos = (600, 50), size = (200,25)) #PortText.WriteText(port) speed = 115200 #PortText = wx.TextCtrl(self, -1, pos = (600, 75), size = (200,25)) #PortText.WriteText(speed) # # open serial port # ser = serial.Serial(port, speed) ser.setDTR() # # flush buffers # ser.flushInput() ser.flushOutput() #make a menu filemenu=wx.Menu() # wx.ID_ABOUT and wx.ID_EXIT are standard IDs provided by wxWidgets. menuAbout = filemenu.Append(wx.ID_ABOUT, "&About"," Information about this program") filemenu.AppendSeparator() menuExit = filemenu.Append(wx.ID_EXIT,"&Exit"," Terminate the program") self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout) self.Bind(wx.EVT_MENU, self.OnExit, menuExit) menuBar = wx.MenuBar() menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content. self.Show(True) #self.Bind(wx.EVT_IDLE, self.OnIdle) def OnAbout(self,event): #dialog box dlg = wx.MessageDialog(self, "Press OK to execute code \n by Emily Mackevicius", "Vehicle brain", wx.OK) dlg.ShowModal() dlg.Destroy() def OnExit(self,event): self.Close(True) def OnClick(self,event): global Ed, ser def Sense(): byte2 = 0 byte3 = 0 byte4 = 0 ser.flushInput() ser.flushOutput() #print(ser.read()) ser.write('6') while 1: byte1 = byte2 byte2 = byte3 byte3 = byte4 byte4 = ord(ser.read())-ord('0') if ((byte1 == 1) & (byte2 == 2) & (byte3 == 3) & (byte4 == 4)): break a = ord(ser.read()) b = ord(ser.read()) sense0 = 256*b+a a = ord(ser.read()) b = ord(ser.read()) sense1 = 256*b+a return (sense0, sense1) def Tilt(): byte2 = 0 byte3 = 0 byte4 = 0 ser.flushInput() ser.flushOutput() #print(ser.read()) ser.write('7') while 1: byte1 = byte2 byte2 = byte3 byte3 = byte4 byte4 = ord(ser.read())-ord('0') if ((byte1 == 1) & (byte2 == 2) & (byte3 == 3) & (byte4 == 4)): break a = ord(ser.read()) b = ord(ser.read()) sense0 = 256*b+a a = ord(ser.read()) b = ord(ser.read()) sense1 = 256*b+a return (sense0) #time.sleep(0.01) def Rfor(): ser.flushInput() ser.flushOutput() ser.write('1') #time.sleep(.2) def Rback(): ser.flushInput() ser.flushOutput() ser.write('2') #time.sleep(.2) def Rstop(): ser.flushInput() ser.flushOutput() ser.write('0') #time.sleep(.2) def Lfor(): ser.flushInput() ser.flushOutput() ser.write('5') #time.sleep(.2) def Lback(): ser.flushInput() ser.flushOutput() ser.write('4') #time.sleep(.2) def Lstop(): ser.flushInput() ser.flushOutput() ser.write('3') #time.sleep(.2) code_globals = {'ser': ser, 'Sense': Sense, 'Rfor': Rfor, 'Rback': Rback, 'Rstop': Rstop, 'Lfor': Lfor, 'Lback':Lback, 'Lstop':Lstop, 'Tilt': Tilt} code_locals = {} code_object = compile("import sys,time,serial\nfrom select import *\n" + Ed.text, '', 'exec') exec code_object in code_globals, code_locals #ser.write(code_globals['command']) app = wx.App(False) # Create a new app, don't redirect stdout/stderr to a window. frame = MyFrame(None, "Emily's Editor") app.MainLoop()