Может ли micro:bit читать, пока в другое время?
Так что у меня проблема с программированием микро: бит. Я кодирую его на интернет-странице, затем скачиваю шестнадцатеричный файл и переношу его в микро: бит. В симуляторе интернета все работает. Очевидно, когда я передаю его в микро: битовый код не работает. Код действительно прост, выглядит примерно так.
анимация повторяется, а переменная равна 0 (эта часть работает отлично)
Кнопка делает переменную 1, B делает ее 2 (эта часть работает)
когда переменная не равна 0, она прерывает первый цикл анимации. (эта часть также работает)
затем переходит ко второму циклу, который повторяется, в то время как переменная НЕ равна 0 (она никогда не будет 0, потому что нет кнопки, которая делает переменную 0), поэтому она повторяется навсегда (это работает)
во втором цикле есть еще 2 цикла. Первый повторяется, когда переменная равна 1, второй - когда переменная равна 2. Это позволяет мне переключаться между этими 2 циклами в любое время, когда я захочу. (Проблема появляется здесь: я нахожусь в цикле 2, например, я не могу переключиться на первый цикл и иначе.)
Все эти ошибки возникают в микро: бит робот, когда код передается. В симуляторе интернета код работает отлично. Можно ли сделать этот код в микро: бит, я достиг предела? Или робот неисправен? Спасибо за ответы и сообщите мне, если что-то не понятно.
2 ответа
Это, конечно, очень трудно отлаживать, не видя никаких блоков / кода, поскольку я не знаю, как вы обнаруживаете нажатие кнопок во втором цикле.
Однако это может быть проблемой планирования из-за того, как вы меняете переменную при нажатии кнопки. Возможно, стоит подумать о реструктуризации ваших блоков таким образом, чтобы они были более управляемыми событиями, используя блоки, такие как кнопка A. Нажатие немного лучше, бесконечное время, в то время как циклы всегда лучше избегать. Также, возможно, стоит добавить паузу (100) в циклы while.
Надеюсь это поможет;)
Редактировать:
ОП подтвердил, что пауза (100) сработала (см. Комментарии к этому ответу), демонстрируя, что это была проблема планирования!
Для тех, кому это интересно;)... это потому, что процессор занят выполнением цикла while и не имеет времени думать о нажатых кнопках. Пауза (100) позволяет процессору немного отдохнуть и не думать о цикле while, давая ему время, необходимое для нажатия кнопки. Это известно как совместное планирование!
Вы можете узнать больше о совместном планировании на:
Если ваш код выглядит так, вы никогда не сможете изменить свою переменную состояния. Вы застрянете в одном из внутренних циклов без возможности изменить переменную управления.
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.