您的 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 波形来模拟它,该波形在其周期的一定百分比内为高电平,与您所需的“模拟”电压成正比,在其余周期内为低电平。
我怀疑您在write_analog()
再次调用它之前没有让该波形完成一个周期的时间,因此您永远不会看到整个波形。每次write_analog()
调用 PWM 波形都可能再次以高电平重新开始 - 我不知道。如果是这样,则意味着您看到的波形一直被设置为高电平,因此只有 3.3v 恒定值。不是你想要的。
在调用相同的analog_write() 之间保持睡眠会让你得到你期望的调光。(或者,找到另一种方法来避免如此频繁地调用analog_write()。)
也许您的 javascript 版本没有这个问题,因为它执行得足够慢,以至于在您再次更改之前让 PWM 波形重复。
请注意,您可以通过给它一个 1ms 的周期来加速 PWM 波形
pin1.set_analog_period(1)
:在我的测试中,这在一定程度上有所改善,但不如简单地在调用write_analog
. 您仍然需要在两次通话之间留出至少 1 毫秒的时间。
这是关于 micro:bit IO 引脚和 PWM 的文档http://microbit-micropython.readthedocs.io/en/latest/pin.html