友情提示:380元/半年,儿童学编程,就上码丁实验室。
前期准备工作(库的安装与Arduino端的standardFirmata上传)请参考下文:
我们要做什么?
本文介绍了使用Python的GUI库tkinter来制作一个用户界面,包含一个输入框,一个按钮和一个进度条。
在输入框中输入数字并按按钮提交或者滑动进度条都可以控制Arduino上的LED灯的亮度。
电路图:
UI效果图如下:
错误提示框如下图:
代码如下:
from pyfirmata import Arduino
from time import sleep
from tkinter import *
from tkinter.messagebox import showerror
#错误提示框模块
from tkinter import HORIZONTAL
#用于设置进度条的方向(水平还是垂直)
port=’COM3′
board=Arduino(port)
ledPin=board.get_pin(‘d:11:p’)
sleep(5)#给一些时间让Python和Arduino之间建立通信
def onPressed():#该函数是按钮的回调函数
try:#进行异常检查,如果输入的不是数字触发一个异常
lightness=float(lightEntry.get())/100
if lightness>1.0:
showerror(title=’错误’, message=’请输入0到100之间的整数!!’) #如果输入的数字超过100则弹出错误提示框
else:
ledPin.write(lightness)
except:
showerror(title=’错误’, message=’请输入0到100之间的整数!!’)
def onDrag(v):
#进度条不拖动的回调函数,其要有一个参数用于接收进度条当前的刻度值
lightness = float(v) / 100
ledPin.write(lightness)
top=Tk()
top.title(‘输入LED亮度’)
lightEntry=Entry(top,bd=5,width=25)#设置输入框边框以及输入框的宽度
lightEntry.pack()
lightEntry.focus_set()#获取鼠标焦点
startButton=Button(top,text=’开始’,command=onPressed)
startButton.pack()
lightScale =Scale(top,from_=0,to=100,orient=HORIZONTAL,showvalue=1,command=onDrag)
lightScale.pack()
top.mainloop()
补充说明:
scale 进度条属性注释:
orient =HORIZONTAL 水平还是竖直
legnth 是长度
showvalue 0:不显示,1:显示
tickinterval 标注分成几段
resolution 最小单位或者说保留到几位
command 方法需要由一个参数接收选择的当前刻度