Mar*_*ark 0 python arduino firmata python-3.x
我正在研究由 Pratik Desai(令人讨厌的聪明人)编写的“Python Programming for Arduino”一书。
我陷入了练习,学生正在学习实现一个滑块,该滑块可以改变连接到引脚的 LED 的强度。我标记了代码不能正常工作的地方。
代码是:
import tkinter
from pyfirmata import ArduinoMega
from time import sleep
port = '/dev/ttyACM0'
board = ArduinoMega(port)
sleep(5)
lenPin = board.get_pin('d:11:o')
top = tkinter.Tk()
top.title('Specify time using Entry')
top.minsize(300, 30)
timePeriodEntry = tkinter.Entry(top, bd=5, width=25)
brightnessScale = tkinter.Scale(top, from_=0, to=100,
orient=tkinter.HORIZONTAL)
brightnessScale.grid(column=2, row=2)
tkinter.Label(top, text='Time (seconds)').grid(column=1, row=1)
tkinter.Label(top, text='Brightness (%)').grid(column=1, row=2)
def onStartPress():
time_period = timePeriodEntry.get()
time_period = float(time_period)
ledBrightness = brightnessScale.get()
ledBrightness = float(ledBrightness)
startButton.config(state=tkinter.DISABLED)
lenPin.write(ledBrightness / 100.0) # this part of code ain't working
sleep(time_period)
lenPin.write(0)
startButton.config(state=tkinter.ACTIVE)
timePeriodEntry.grid(column=2, row=1)
timePeriodEntry.focus_set()
startButton = tkinter.Button(top, text='Lit Up', command=onStartPress)
startButton.grid(column=1, row=3)
exitButton = tkinter.Button(top, text='Exit', command=top.quit)
exitButton.grid(column=2, row=3)
top.mainloop()
Run Code Online (Sandbox Code Playgroud)
根据这本书,这段代码应该可以工作。我做了一些基本检查,例如打印出变量ledBrightness以查看它是否获得了正确的值以及是否获得了正确的值。问题是当我运行程序时它不起作用。LED 根本不会亮。它仅在我用 1 (True) 打开 LED 或 0 (False) 将其关闭时替换变量,但没有任何调整强度的选项。
我在这里做错了什么?如果write()函数只能接受 1 或 0,为什么这本书说可以自定义输入?
从文档:
写(值)
从引脚输出电压
参数:value – 如果引脚处于输出模式,则使用 value 作为布尔值,如果引脚处于 PWM 模式,则期望从 0 到 1 的浮点数。如果引脚在 SERVO 中,则该值应以度为单位。
get_pin ( pin_def )
返回由引脚定义给出的激活引脚。可以提高一个
InvalidPinDefError或一个PinAlreadyTakenError。参数:pin_def – 引脚定义如下所述,但没有 arduino 名称。所以例如
a:1:i。'a' 模拟引脚 引脚号 'i' 用于输入 'd' 数字引脚 引脚号 'o' 用于输出 'p' 用于 pwm(脉宽调制)
全部由 分隔
:。
您需要将引脚定义为 PWM 不输出。
lenPin = board.get_pin('d:11:p')
Run Code Online (Sandbox Code Playgroud)
然后lenPin.write(value)不仅接受 0 和 1,还接受 0 和 1 之间的任何浮点数。