我有一个简单的一行micro:bit javascript可以工作,但是microPython中的同一行没有。
我有一个电位器连接到micro:位,电位器的读数被发送到连接到LED的引脚,以控制LED的亮度。 javascript代码
pins.analogWritePin(AnalogPin.P1, pins.analogReadPin(AnalogPin.P0))
这是块码工作正常的结果,LED的亮度随着电位器的变化而变化。
但使用类似的microPython线
pin1.write_analog(pin0.read_analog())
不会改变LED的强度。
关于这里发生了什么的任何想法?
答案 0 :(得分:2)
你的micropython代码很好,孤立无援。在隔离的情况下,我可以执行一次读取和一次写入,因此按比例调暗连接到引脚1和地的LED,一次。但需要考虑的背景。
您是否在没有睡眠的紧密循环中重复执行该行(并且没有其他耗时的操作)?喜欢这个?
#This will not work
from microbit import *
while True:
pin1.write_analog(pin2.read_analog())
当我测试上述情况时,LED无法调暗。只需在循环中添加50-100毫秒的休眠即可解决此问题。
#This will work
from microbit import *
while True:
pin1.write_analog(pin2.read_analog())
sleep(50)
请注意,这与用户模拟的上述解决方案相同。
pin1.write_analog(v)
实际上没有在引脚上设置模拟电压,它通过使用PWM波形来模拟它,该波形在其周期的百分比中是高的,与您期望的模拟&#成比例39;电压,其余周期为低电压。
我怀疑你在再次拨打write_analog()
之前没有时间让这个波形完成一个循环,所以你永远不会看到整个波形。每次调用write_analog()
时,PWM波形可能会再次以高电平重新开始 - 我不知道。如果是这样,那就意味着你会看到一个不断设置为高的波形,所以只有3.3v常数。不是你想要的。
在对同一个analog_write()的调用之间保持睡眠会让你达到预期的调光。 (或者,找到另一种避免频繁调用analog_write()的方法。)
也许你的javascript版本没有这个问题,因为它的执行速度足够慢,以便在再次更改之前重复PWM波形。
请注意,您可以通过给出1ms的周期来加速PWM波形:
pin1.set_analog_period(1)
。在我的测试中,这在一定程度上改善了一些事情,但并不像在write_analog
的调用之间留出更多时间那么好。你还需要在两次通话之间留出至少1ms的时间。
这里有关于micro:bit IO引脚和PWM http://microbit-micropython.readthedocs.io/en/latest/pin.html
的文档答案 1 :(得分:1)
我得到了以下关于micro:bit的macython。我将引脚0连接到一侧带有电位计的电阻桥,这样我就可以改变引脚0上的电压。我将引脚1连接到一个LED,其中一个电阻串联到地。我还用Fluke万用表测量了引脚0和引脚1上的电压,它们匹配良好。我可以看到LED的强度因调节电位器而变化。
from microbit import *
while True:
pin1.write_analog(pin0.read_analog())
sleep(100)