所以我遇到了编程micro:bit的问题。我在网页中编码,然后下载hex文件并将其传输到micro:bit。在互联网模拟器上一切正常。显然当我将它转移到micro:位代码不起作用。代码非常简单,看起来像这样。
动画在变量为0时重复(此部分完美运行)
按钮使变量1,B使其成为2(此部分有效)
当变量不为0时,它会破坏第一个动画循环。 (这部分也有效)
然后转到第二个循环,当变量为非0时它重复(它永远不会是0,因为没有使变量为0的按钮)所以它永远重复(这个有效)
在第二个循环中,还有2个循环。首先在变量为1时重复,在变量为2时重复。这使我能够随时在这两个循环之间切换。 (问题出现在这里:例如我在循环2中,我无法切换到第一个循环,否则。)
所有这些错误都发生在micro:bit robot中,当代码被传输时。在互联网模拟器代码工作完美。是否有可能在micro:bit中执行该代码,是否达到了极限?还是机器人有缺陷?感谢您的回答,如果不清楚,请通知我。
答案 0 :(得分:1)
当然,在没有看到任何块/代码的情况下调试非常困难,因为我不知道在第二个循环中如何检测按下按钮。
但是,由于您在按下按钮时更改变量的方式,这可能是一个调度问题。也许考虑重构你的块,使它们更多地受事件驱动,利用按钮A上的等按下更好的块,无限循环总是最好避免。另外,也许可以考虑在while循环中放置 pause(100)。
希望这会有所帮助;)
修改强>
OP确认暂停(100)有效(请参阅此答案的评论),证明这是一个调度问题!
对于那些感兴趣的人;) ...这是因为CPU正忙于执行while循环,并且没有时间考虑按下按钮。 pause(100)允许CPU休息一会儿而不考虑while循环,为其提供处理按钮按下所需的时间。这称为协同调度!
您可以在以下位置找到有关合作计划的更多信息:
答案 1 :(得分:-1)
如果您的代码如下所示,您将永远无法更改状态变量。您将陷入其中一个内部循环中,无法更改控制变量。
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
...
这仍然不是完美的,你可能想要考虑一下如果按下“按钮”按钮会发生什么。序列。模拟器应该相同,但是按下按钮的方式和破坏模拟器的代码可能会有一些不同寻常的地方。如果模拟器真的坏了,你需要与micro:bit团队共享一个测试用例。