micro:bit 可以一会儿读一会儿吗?

Can micro:bit read while in another while?

所以我在编程时遇到了问题 micro:bit。我在网页上编码,然后下载十六进制文件并将其传输到 micro:bit。在互联网模拟器上一切正常。显然,当我将其转移到 micro:bit 时,代码无法正常工作。代码真的很简单,看起来像这样。

所有这些错误都发生在 micro:bit 机器人中,当代码被传输时。在互联网模拟器代码中完美运行。是否可以在 micro:bit 中执行该代码,我达到了限制吗?还是机器人有缺陷?感谢您的回答,如果有不清楚的地方请告诉我。

这当然很难在没有看到任何 blocks/code 的情况下进行调试,因为我不知道您如何检测在 第二个循环 中按下的按钮.

但是,由于您在按下按钮时更改变量的方式,这可能是一个调度问题。也许考虑重组您的块,使它们更受事件驱动,利用 on button A Pressed 等块更好一点,最好避免无限循环。另外,也许考虑在 while 循环中放置一个 pause(100)

希望这对您有所帮助 ;)

编辑:

OP 确认 pause(100) 有效(请参阅此答案的评论),表明这是一个调度问题!

有兴趣的朋友;)...这是因为CPU忙于执行while循环,没时间考虑按钮被按下。 pause(100) 允许 CPU 休息一下,而不是考虑 while 循环,给它处理按钮按下所需的时间。这就是所谓的合作调度!

您可以在以下位置找到有关合作调度的更多信息:

https://www.microbit.co.uk/device/reactive

如果您的代码看起来像这样,您将永远无法更改状态变量。您将陷入内部循环之一,无法更改控制变量。:

while (unset):
  Animate
  Check for button
While (set): // Intend to be stuck in this loop forever
  While (one):
    Do first
  While (two):
    Do Second

你需要的是能够更新你的状态:

...
  While (one):
    Do First
    if (button_b.was_pressed()):
      state = two
...

这仍然不完美,您可能需要考虑如果按 'unusual' 次序列会发生什么情况。模拟器 应该 是相同的,但是按钮按下的处理方式和破坏模拟器的代码可能有些不寻常。如果模拟器真的坏了,你需要与 micro:bit 团队分享一个测试用例。