pyFirmata的write()函数

时间:2017-12-07 13:44:57

标签: python python-3.x arduino firmata

我正在为Arduino的#34; Python编程工作#34;由Pratik Desai撰写(恼人的聪明人)。

我被困在运动中,学生正在学习如何实现一个改变连接到引脚的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()

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

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

1 个答案:

答案 0 :(得分:4)

来自the documentation

  

<强>写

     

从引脚输出电压

     

参数 - 如果引脚处于输出模式,则使用值作为布尔值;如果引脚处于PWM模式,则使用0到1的浮点数。如果引脚位于SERVO中,则该值应为度。

  

<强> get_pin pin_def

     

返回引脚定义给出的激活引脚。可以提出InvalidPinDefErrorPinAlreadyTakenError

     

参数 pin_def - 引脚定义如下所述,但没有arduino名称。例如a:1:i

     

'a'模拟引脚输入'd'数字引脚的引脚编号'i'pwm(脉冲宽度调制)输出'p'的引脚编号'o'

     

全部由:分隔。

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

lenPin = board.get_pin('d:11:p')

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