209 lines
5.8 KiB
Python
209 lines
5.8 KiB
Python
import tkinter as tk
|
|
from tkinter.constants import W, X
|
|
import serial.tools.list_ports
|
|
import functools
|
|
import tkinter.ttk as ttk
|
|
|
|
import labrobot as lrb
|
|
|
|
|
|
# serial ports
|
|
ports = serial.tools.list_ports.comports()
|
|
serialObj = serial.Serial()
|
|
|
|
def serial_ports():
|
|
return serial.tools.list_ports.comports()
|
|
|
|
def on_select(event=None):
|
|
serialObj.port = cb.get().split(' ')[0]
|
|
serialObj.baudrate = 115200
|
|
serialObj.open()
|
|
|
|
|
|
root = tk.Tk()
|
|
#configue root
|
|
root.title("Jfs Labrobot")
|
|
root.geometry('800x500+300+300')
|
|
root.columnconfigure(0,weight=1)
|
|
root.rowconfigure(0,weight=1)
|
|
#root.config(bg='#b7f731')
|
|
|
|
notebook = ttk.Notebook(root)
|
|
notebook.grid(sticky='news',padx=5,pady=5)
|
|
notebook.enable_traversalrightmainframe = ttk.Frame(notebook)
|
|
|
|
mainframe = ttk.Frame(notebook)
|
|
#mainframe.rowconfigure(0,weight=1)
|
|
mainframe.columnconfigure(0,weight=1)
|
|
|
|
notebook.add(mainframe,text='main',underline=0)
|
|
|
|
leftframe = ttk.Frame(mainframe)
|
|
|
|
leftframe.columnconfigure(0,weight=1)
|
|
leftframe.rowconfigure(1,weight=1)
|
|
leftframe.grid(column=0,row=0,sticky='news')
|
|
|
|
rightframe = ttk.Frame(mainframe)
|
|
rightframe.columnconfigure(0,weight=1)
|
|
rightframe.rowconfigure(0,weight=1)
|
|
rightframe.grid(column=1,row=0,sticky='new')
|
|
|
|
uprightframe =ttk.LabelFrame(rightframe,text='Basic')
|
|
uprightframe.grid(column=0,row=0,sticky='ns')
|
|
|
|
downrightframe =ttk.LabelFrame(rightframe,text='More to select')
|
|
downrightframe.grid(column=0,row=1,sticky='new',pady=5)
|
|
|
|
cb =ttk.Combobox(leftframe,values=serial_ports())
|
|
cb.grid(row=0,column=0,stick="nwe")
|
|
cb.bind('<<ComboboxSelected>>',on_select)
|
|
|
|
scb =tk.Scrollbar(leftframe)
|
|
scb.grid(row=1,column=1,sticky='ns')
|
|
#txt = tk.Text(leftframe,height=30,width=50)
|
|
txt = tk.Text(leftframe)
|
|
txt.grid(row=1,column=0,sticky='ewns')
|
|
scb.config(command=txt.yview)
|
|
txt.config(yscrollcommand=scb.set)
|
|
txt.tag_configure('small',font=('Verdana',8),foreground='black')
|
|
|
|
b1 = ttk.Button(uprightframe,text='Home All',width=12)
|
|
b1.grid(row=0,column=0,sticky='nw')
|
|
b2 = ttk.Button(uprightframe,text='Home X',width=12)
|
|
b2.grid(row=0,column=1,sticky='ne')
|
|
b3 = ttk.Button(uprightframe,text='Home Y',width=12)
|
|
b3.grid(row=1,column=0,sticky='nw')
|
|
b4 = ttk.Button(uprightframe,text='Home Z',width=12)
|
|
b4.grid(row=1,column=1,sticky='ne')
|
|
b6 = ttk.Button(uprightframe,text='Home P',width=12)
|
|
b6.grid(row=2,column=0,sticky='nw')
|
|
b7 = ttk.Button(uprightframe,text='Get Position',width=12)
|
|
b7.grid(row=2,column=1,sticky='ne')
|
|
l1 = ttk.Label(uprightframe,text="Enter G-Code").grid(row=3,column=0)
|
|
e1 = ttk.Entry(uprightframe).grid(row=3,column=1)
|
|
b5 = ttk.Button(uprightframe,text='Send Code')
|
|
b5.grid(row=4,column=1,sticky="ne")
|
|
|
|
b8 = ttk.Button(downrightframe,text='Next Tip')
|
|
b8.grid(row=0,column=0,sticky='ne')
|
|
b9 = ttk.Button(downrightframe,text='Up')
|
|
b9.grid(row=0,column=1,sticky='ne')
|
|
b10 = ttk.Button(downrightframe,text='Down')
|
|
b10.grid(row=0,column=2,sticky='ne')
|
|
|
|
### Parts
|
|
## init Labrobot
|
|
|
|
pip = lrb.LabPip(vol=1000,top=22)
|
|
pip.fe =5000
|
|
|
|
xoffset = tk.DoubleVar()
|
|
xoffset.set(15)
|
|
yoffset = tk.DoubleVar()
|
|
yoffset.set(1.6)
|
|
rows = tk.IntVar()
|
|
rows.set(5)
|
|
cols = tk.IntVar()
|
|
cols.set(10)
|
|
xspace = tk.DoubleVar()
|
|
xspace.set(10.8)
|
|
yspace = tk.DoubleVar()
|
|
yspace.set(18.3)
|
|
tipvol = tk.IntVar()
|
|
tipvol.set(1000)
|
|
|
|
lpb = lrb.LabPipBlock(xoffset.get(),1,70,50,5,108,86)
|
|
|
|
partframe = ttk.Frame(notebook)
|
|
#partframe.rowconfigure(0,weight=1)
|
|
partframe.columnconfigure(0,weight=1)
|
|
notebook.add(partframe,text='parts',underline=0)
|
|
|
|
pipblockframe =ttk.LabelFrame(partframe,text='Tip Block')
|
|
pipblockframe.grid(column=0,row=0,sticky='wns',padx=5,pady=5)
|
|
pl1 = ttk.Label(pipblockframe,text='X offset').grid(column=0,row=0,padx=5)
|
|
pe1 = ttk.Entry(pipblockframe,textvariable=xoffset)
|
|
pe1.grid(column=1,row=0,sticky='e')
|
|
pl2 = ttk.Label(pipblockframe,text='rows').grid(column=0,row=2,padx=5)
|
|
pe2 = ttk.Entry(pipblockframe,textvariable=rows)
|
|
pe2.grid(column=1,row=2,sticky='e')
|
|
pl3 = ttk.Label(pipblockframe,text='columns').grid(column=0,row=3,padx=5)
|
|
pe3 = ttk.Entry(pipblockframe,textvariable=cols)
|
|
pe3.grid(column=1,row=3,sticky='e')
|
|
pl4 = ttk.Label(pipblockframe,text='x space').grid(column=0,row=4,padx=5)
|
|
pe4 = ttk.Entry(pipblockframe,textvariable=xspace)
|
|
pe4.grid(column=1,row=4,sticky='e')
|
|
pl5 = ttk.Label(pipblockframe,text='y space').grid(column=0,row=5,padx=5)
|
|
pe5 = ttk.Entry(pipblockframe,textvariable=yspace)
|
|
pe5.grid(column=1,row=5,sticky='e')
|
|
pl6 = ttk.Label(pipblockframe,text='Y offset').grid(column=0,row=1,padx=5)
|
|
pe6 = ttk.Entry(pipblockframe,textvariable=yoffset)
|
|
pe6.grid(column=1,row=1,sticky='e')
|
|
ttk.Separator(pipblockframe, orient=tk.HORIZONTAL).grid(row=6,sticky='ew')
|
|
pl7 = ttk.Label(pipblockframe,text='Tip Volume').grid(column=0,row=7,padx=5)
|
|
pe7 = ttk.Entry(pipblockframe,textvariable=tipvol)
|
|
pe7.grid(column=1,row=7,sticky='e')
|
|
|
|
### commands and bindings
|
|
|
|
def homeAll():
|
|
serialObj.write(b'<G28>\n')
|
|
|
|
b1.configure(command=homeAll)
|
|
|
|
def homeX():
|
|
serialObj.write(b'<JX>\n')
|
|
b2.configure(command=homeX)
|
|
|
|
def homeY():
|
|
serialObj.write(b'<JY>\n')
|
|
b3.configure(command=homeY)
|
|
|
|
def homeZ():
|
|
serialObj.write(b'<JZ>\n')
|
|
b4.configure(command=homeZ)
|
|
|
|
def homeP():
|
|
serialObj.write(b'<JP>\n')
|
|
b6.configure(command=homeP)
|
|
|
|
def getPos():
|
|
serialObj.write(b'<J2>\n')
|
|
b7.configure(command=getPos)
|
|
|
|
def do_gcode():
|
|
s = e1.get()
|
|
s = s + '\n'
|
|
print(s)
|
|
serialObj.write(s.encode('utf-8'))
|
|
b5.configure(command=do_gcode)
|
|
|
|
def upTip():
|
|
serialObj.write(pip.up().encode('utf-8'))
|
|
b9.configure(command=upTip)
|
|
|
|
def downTip():
|
|
serialObj.write(pip.down().encode('utf-8'))
|
|
b10.configure(command=downTip)
|
|
|
|
def nextTip():
|
|
upTip()
|
|
serialObj.write(pip.get_tip(lpb.next()).encode('utf-8'))
|
|
downTip()
|
|
|
|
b8.configure(command=nextTip)
|
|
|
|
def checkSerialPort():
|
|
if serialObj.isOpen() and serialObj.in_waiting:
|
|
recentPacket = serialObj.readline()
|
|
recentPacketString = recentPacket.decode('utf')
|
|
txt.insert('0.1',recentPacketString,'small')
|
|
|
|
|
|
while True:
|
|
root.update()
|
|
checkSerialPort()
|
|
|
|
|