gpt4 book ai didi

javascript - 在 BBC micro :bit does not do anything 上用 microPython 写模拟

转载 作者:行者123 更新时间:2023-11-29 10:31:16 31 4
gpt4 key购买 nike

我有一行简单的 micro:bit javascript 可以工作,但 microPython 中的同一行没有。

我有一个连接到 micro:bit 的电位计,电位计的读数被发送到连接到 LED 的引脚,以控制 LED 的亮度。 javascript代码

        pins.analogWritePin(AnalogPin.P1, pins.analogReadPin(AnalogPin.P0))

这是 block 代码工作正常的结果,LED 的亮度随着电位器的变化而变化。

但是使用类似的microPython行

    pin1.write_analog(pin0.read_analog())

不会改变 LED 的强度。

对这里发生的事情有什么想法吗?

最佳答案

您的 micropython 代码行很好,可以单独使用。孤立地,我可以一次读取和一次写入,结果按比例调暗连接到引脚 1 和接地的 LED,一次 .但是需要考虑上下文。

您是否在没有休眠(也没有其他耗时操作)的紧密循环中重复执行该行?像这样?

#This will not work
from microbit import *
while True:
pin1.write_analog(pin2.read_analog())

当我测试以上内容时,LED 无法变暗。只需在循环中添加 50-100 毫秒的 sleep 时间即可解决此问题。

#This will work
from microbit import *
while True:
pin1.write_analog(pin2.read_analog())
sleep(50)

请注意,这与上述用户模拟的解决方案相同。

pin1.write_analog(v)实际上并没有在引脚上设置模拟电压,它通过使用 PWM 波形来模拟它,该波形在其周期的一定百分比内为高,与您想要的“模拟”电压成比例,而在其余周期内为低。

我怀疑您在调用 write_analog() 之前没有让此波形有时间完成一个周期再次打开它,所以您永远看不到完整的波形。有可能PWM波形每次都是高电平重新开始write_analog()被称为——我不知道。如果是这样,则意味着您会看到一个不断设置为高电平的波形,因此只有 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

关于javascript - 在 BBC micro :bit does not do anything 上用 microPython 写模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45540847/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com