воскресенье, 7 ноября 2010 г.

NXT-G: передаем значение в блок Wait

Навеяно советом #15 из NXT-G Tips & Tricks

В NXT-G существует досадный недостаток при работе с блоком Wait - в него нельзя передавать значение. Можно только задать значение на этапе компиляции программы. Это относится к всем видам блока ожидания. В ожидании определенного количества секунд, в ходе работы программы динамически нельщя задать это количество секунд, а в ожидании определенного события на сенсоре, нельзя задать динамически порог срабатывания.









Для того, чтобы обойти это ограничение необходимо просто подумать, как бы происходило программирование если бы этого блока вообще не было.
Например, для ожидания прошествия определенного количества секунд, алгоритм был бы таков:
1. засечь сколько сейчас времени на часах и запомнить
2. через некоторое время опять посмотреть на часы и проверить не истекло ли нужное количество времени
3. если нужное количество времени не истекло - перейти к шагу 2

Итак, алгоритм достаточно простой. Сейчас нужно разобраться с реализацией.

Для того, чтобы "смотреть на часы" используется блок Timer.

В общем случае, с выхода этого блока можно считать значение времени, прошедшего с начала работы программы.

Теперь необходимо просто запомнить одно значение времени и проверять новое значение в цикле - не изменилось ли оно по отношении к старому на нужное нам количество:


Т.е. если вынести реализацию в отдельный блок, то его можно будет использовать, например так:


Аналогичным образом, можно создать отдельный блок для опроса датчика или сенсора на предмет изменения его показаний выше/ниже определенного предела.

Комментариев нет:

Отправить комментарий

Related Posts Plugin for WordPress, Blogger...