Dobrý den, potřeboval bych poradit s aplikací v pythonu kterou "programuju". Začnu postupně, stavím už nějakou dobu takový průzkumný robot, spíše hračku, (http://www.vladis.xf.cz/?p=new_lenka) je tam MCU Atmega328 tvářící se jako Arduino, s počítačem komunikuje pomocí bluetooth modulu který se chová jako bezdrátový seriový port.
V počítači má být aplikace která bude s Lenkou (tak se ten robot jmenuje) komunikovat po tomto seriovém portu. Ovšem s touto aplikací si nevím rady, měl jsem udělanou takovou v Processingu (http://www.processing.org/) ale příjde mi to že ten programovací jazyk si dělá co chce a prostě to není ono. Rozhodl jsem se tedy o předělání řídící aplikace do Pythonu.
No zdá se že to nebyl nejlepší nápad. Python moc neumím, jestli jsem v prváku projel pár lekcí to bylo všechno. Stěží jsem vypotil něco málo a funguje alespoň jednosměrná komunikace, já na straně PC zachytím co zmáčknu za klávesu na klávesnici podle toho pošlu nějaký kod Lence a Lenka to příjme a rozhodne se podle toho co dál, jestli má jet dopředu dozadu či snad stát. Ale potřeboval bych z Lenky přijímat informace o čidlech kterými je vybavena informace o jejím stavu atd. a poté v oknu aplikace tento stav nějak zobrazit, zobrazit že třeba přední IR dálkoměr hlásí překážku. Potřeboval bych tedy poradit jak na to.
Přikládám zdrojový kod mé aplikace, předem varuji že pro zkušené programátory to bude paskvil, učím se elektromechaniku na učňáku, o programování mi ve škole nikdo neřekne ani slovo, mám takovej pocit že je to tam zapovězené téma, doma si jen tak ze zájmu programuju jádro 8051 a AVR.
O objektově orientovaném programování nevím zhola nic, prosím nereagujte komentářema typu "tak se to nejdřív nauč pak až teprva programuj" na učení nemám čas potřebuju to mít do konce listopadu hotové :D. Předem děkuji za jakoukoliv radu či pomoc :)
#*-* coding: utf-8 *-*
import wx
import serial
ser = serial.Serial(13, 9600)
class Main(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(500, 400))
panel = wx.Panel(self, -1)
panel.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
panel.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
panel.SetFocus()
menubar = wx.MenuBar()
file = wx.Menu()
file.Append(-1, 'Quit', 'Quit application')
menubar.Append(file, '&File')
self.SetMenuBar(menubar)
self.Bind(wx.EVT_MENU, self.OnQuit)
self.Centre()
self.Show(True)
def OnKeyDown(self, event):
keycode = event.GetKeyCode()
if keycode == 87: #W
ser.write(1)
if keycode == 83: #S
ser.write(2)
if keycode == 65: #A
ser.write(3)
if keycode == 68: #D
ser.write(4)
if keycode == 81: #Q
ser.write(6)
if keycode == 69: #E
ser.write(7)
if keycode == 70: #F
ser.write(8)
if keycode == 82: #R
ser.write(9)
if keycode == wx.WXK_ESCAPE:
ret = wx.MessageBox(u'Opravdu chceš ukončit program?', 'Question', wx.YES_NO | wx.NO_DEFAULT, self)
if ret == wx.YES:
ser.close()
self.Close()
def OnKeyUp(self, event):
keycode = event.GetKeyCode()
if keycode == 89 or 83 or 68 or 65:
ser.write(5)
def OnQuit(self, event):
ret = wx.MessageBox(u'Opravdu chceš ukončit program?', 'Question', wx.YES_NO | wx.NO_DEFAULT, self)
if ret == wx.YES:
ser.close()
self.Close()
app = wx.App()
Main(None, -1, "Lenka")
app.MainLoop()