Суть такая. Учусь я на радиотехника. И вот задали нам что то слепить на базе Arduino, долго всей группой искали каждый себе. В итоге я нашел себе лодку. у меня каспер стоит он ругаеться на эту ссылочку, но там все пучком. Так вот вся эта байда управляется графическим интерфейсом питона “я нуб в этом поэтому извините за непонятные слова” вот. Кое как я разобрался как запустить код. Но запустивши код у меня появляеться ошибка
C:\Windows\system32>python
Python 2.7.9 (default, Dec 10 2014, 12:28:03) on win
32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> from Tkinter import *
>>> from tkFileDialog import *
>>> from serial import *
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
ImportError: No module named serial
>>> from time import *
>>>
>>> ser = serial('COM2', 19200)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
NameError: name ‘serial’ is not defined
>>>
>>> root = Tk()
>>>
Вот такого плана. Но окошко гафического интерфейса появляется но без всяких кнопок.
а вот и сам код
from Tkinter import *
from tkFileDialog import *
from serial import *
from time import *
ser = serial('COM2', 19200)
root = Tk()
CanvasSize = 200
CanvasBorder = 10
Lat =
Lon =
blackLine = 0
redLine = 0
speedL = 0
speedR = 0
def readFile():
global Lat, Lon, LonMid, LatMid, dLL, myCanvas, blackLine, redLine
#myCanvas.delete(blackLine)
#myCanvas.delete(redLine)
filetypes =
file = askopenfile(title='Choose a file',parent=console,filetypes=filetypes,mode='r')
if file != None:
s = “”
for line in file.readlines():
s += line
ss = s.replace('\n','').split()
for LatLon_string in ss:
LatLon_array = LatLon_string.split(',')
Lat.append(float(LatLon_array))
Lon.append(float(LatLon_array))
Lat.reverse()
Lon.reverse()
for i in range (len(Lat)):
print(str(i)+“, ”+str(Lat)+“, ”+str(Lon))
LatMin = min(Lat)
LatMax = max(Lat)
LonMin = min(Lon)
LonMax = max(Lon)
dLat = LatMax - LatMin
dLon = LonMax - LonMin
LatMid = LatMin + dLat/2
LonMid = LonMin + dLon/2
dLL = max(dLat, dLon)
line_coords =
for i in range(len(Lat)):
line_coords.append(CanvasSize/2 + (Lon - LonMid)*(CanvasSize-CanvasBorder)/dLL)
line_coords.append(CanvasSize/2 - (Lat - LatMid)*(CanvasSize-CanvasBorder)/dLL)
blackLine = myCanvas.create_line(line_coords, fill='black')
file.close()
def kmlUpdate():
ser.flushInput()
ser.flushOutput()
ser.write('A')
boatTime = ser.readline().rstrip('\r\n')
boatLat = ser.readline().rstrip('\r\n')
boatLon = ser.readline().rstrip('\r\n')
boatCourse = ser.readline().rstrip('\r\n')
boatSpeed = ser.readline().rstrip('\r\n')
boatHead = ser.readline().rstrip('\r\n')
boatDepth = ser.readline().rstrip('\r\n')
boatTemp = ser.readline().rstrip('\r\n')
print “%8s%11s%12s%5s%6s%4s%6s%5s” % (boatTime, boatLat, boatLon, boatSpeed, boatCourse, boatHead, boatDepth, boatTemp)
kml = (
‘<?xml version=“1.0” encoding=“UTF-8”?>\n’
'<kml xmlns="http://www.opengis.net/kml/2.2“>\n'
‘ <Document>\n’
‘\n’
‘ <Camera>\n’
‘ <longitude>%s</longitude>\n’
‘ <latitude>%s</latitude>\n’
‘ <altitude>500</altitude>\n’
‘ <heading>0</heading>\n’
‘ <tilt>0</tilt>\n’
‘ <roll>0</roll>\n’
‘ <altitudeMode>relativeToGround</altitudeMode>\n’
‘ </Camera>\n’
‘\n’
‘ <Style id=”mystyle">\n’
‘ <IconStyle>\n’
‘ <color>ffffffff</color>\n’
‘ <scale>0.8</scale>\n’
‘ <heading>%s</heading>\n’
‘ <Icon><href>roboat_symbol.png</href></Icon>\n’
‘ </IconStyle>\n’
‘ <LabelStyle><color>ffffffff</color></LabelStyle>\n’
‘ </Style>\n’
‘\n’
‘ <Placemark>\n’
‘ <name>%s</name>\n’
‘ <styleUrl>#mystyle</styleUrl>\n’
‘ <Point>\n’
‘ <coordinates>%s,%s,0</coordinates>\n’
‘ </Point>\n’
‘ </Placemark>\n’
‘\n’
‘ </Document>\n’
‘</kml>\n’
) %(boatLon, boatLat, boatHead, boatDepth, boatLon, boatLat)
c = open('juram7.kml', ‘w’)
c.write(kml)
c.closed
root.after(500, kmlUpdate)
def sendPath():
global Lat, Lon, LonMid, LatMid, dLL, myCanvas, redLine
line_coords =
for i in range(len(Lat)):
ser.flushInput()
ser.flushOutput()
ser.write('B'+str(i)+'\r')
ser.write(str(Lat)+'\r')
ser.write(str(Lon)+'\r')
SerialI = ser.readline().rstrip('\r\n')
SerialLat = ser.readline().rstrip('\r\n')
SerialLon = ser.readline().rstrip('\r\n')
print(SerialI+“, ”+SerialLat+“, ”+SerialLon)
line_coords.append(CanvasSize/2 + (float(SerialLon) - LonMid)*(CanvasSize-CanvasBorder)/dLL)
line_coords.append(CanvasSize/2 - (float(SerialLat) - LatMid)*(CanvasSize-CanvasBorder)/dLL)
print(“”)
redLine = myCanvas.create_line(line_coords, fill='red', width=2)
def StartStop():
ser.flushInput()
ser.flushOutput()
if (StartStopButton == “Davai gazui”):
StartStopButton = “Trrr zaliyotnaja”
StartStopButton = “red”
ser.write('C\r')
else:
StartStopButton = “Start”
StartStopButton = “SystemButtonFace”
ser.write('D\r')
def keypress(event):
if event.keysym == ‘Left’:
ser.write('E-50\r')
if event.keysym == ‘Right’:
ser.write('E+50\r')
if event.keysym == ‘Up’:
ser.write('E0\r')
if event.keysym == ‘Down’:
ser.write('D\r')
if event.char == ‘f’: readFile()
if event.char == ‘p’: sendPath()
if event.char == ‘s’: StartStop()
#=============================================================================
console = Frame(root, width=200, height=300)
#console.grid_propagate(0)
#console.master.title(“Console”)
console.grid()
myCanvas = Canvas(console, bg=“white”, height=CanvasSize, width=CanvasSize)
myCanvas.grid(column=0, columnspan=4, row=0)
FileOpenButton = Button(console, text='File Open', command=readFile)
FileOpenButton.grid(column=0, row=1)
SendPathButton = Button(console, text='Send Path', command=sendPath)
SendPathButton.grid(column=1, row=1)
StartStopButton = Button(console, text='Start', command=StartStop)
StartStopButton.grid(column=2, row=1)
QuitButton = Button(console, text='Quit', command=root.destroy)
QuitButton.grid(column=3, row=1)
root.bind_all('<Key>', keypress)
root.after(500, kmlUpdate)
root.mainloop()
Можете помочь с данной проблемой?