首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyFirmata()函数

pyFirmata()函数
EN

Stack Overflow用户
提问于 2017-12-07 13:44:57
回答 1查看 3.1K关注 0票数 0

我正在阅读Pratik (令人讨厌的聪明人)写的“Arduino的Python编程”一书。

我被困在练习中,学生们正在学习实现一个滑块,这个滑块可以改变连接到一个引脚上的LED的强度。我标记了代码不能正常工作的地方。

守则是:

代码语言:javascript
复制
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()

根据这本书,这个代码应该能工作。我做了一些基本的检查,比如打印出变量ledBrightness,看看它是否得到了正确的值,并且得到了正确的值。问题是当我运行这个程序时,它不起作用。LED根本不亮。只有当我用1(真)打开LED或者0 (False)关闭LED时才能工作,但是没有任何调整强度的选项。

我在这里做错了什么?如果write()函数只能接受1或0,为什么这本书说你可以自定义输入?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-07 15:46:04

来自文献资料

(值) 从引脚输出电压 参数--如果引脚处于输出模式,则使用值作为布尔值;如果引脚处于PWM模式,则期望浮动值从0到1。如果引脚处于伺服状态,则其值应以度为单位。get_pin(pin_def) 返回由引脚定义给出的已激活引脚。可能引发InvalidPinDefErrorPinAlreadyTakenErrorParameterspin_def - Pin定义,如下所述,但没有arduino名称。例如,a:1:i。 输入‘d’数字引脚号‘o’表示输出‘p’,用于pwm (脉宽调制) 全部由:分离。

您需要将引脚定义为PWM而不是输出。

代码语言:javascript
复制
lenPin = board.get_pin('d:11:p')

然后lenPin.write(value)不仅接受0和1,而且接受介于0和1之间的任何浮点数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47696490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档