Зупинка на лінії ================== У попередньому модулі ви написали та протестували функцію, яка могла точно визначити, чи датчик відбиття бачить лінію. У цьому завданні ви використаєте цю функцію, щоб змусити робота зупинятися, коли він бачить лінію. .. figure:: media/stop_at_line.gif :align: center XRP зупиняється, коли бачить лінію. Розглянемо попереднє завдання — використання циклу while для проходження певної відстані: .. tab-set:: .. tab-item:: Python .. code-block:: python from XRPLib.defaults import * while drivetrain.get_left_encoder_position() < 20: drivetrain.set_speed(5, 5) drivetrain.stop() У цьому коді перевіряється умова ``drivetrain.get_left_encoder_position() < 20`` що означає, що робот буде рухатися вперед зі швидкістю 5 см/с, поки лівий енкодер не прочитає відстань 20 см. Цей код можна легко модифікувати, щоб замінити поточну умову на умову, яка використовує функцію, яку ви написали. .. tab-item:: Blockly .. image:: media/stop_at_distance.png :width: 300 .. |ico1| image:: media/left_encoder_condition.png :height: 3ex У цьому коді перевіряється умова |ico1|, що означає, що робот буде рухатися вперед зі швидкістю 5 см/с, поки лівий енкодер не зчитає відстань 20 см. Цей код можна легко модифікувати, щоб замінити поточну умову на умову, яка використовує функцію, яку ви написали. .. admonition:: Спробуйте Змініть приклад коду, щоб використовувати вашу функцію (``is_over_line()``) як умову для циклу. Якщо вам потрібно «інвертувати» значення вашої функції (перетворити «False» на ``True``, а ``True`` в ``False``), ви можете використати оператор ``not`` *перед викликом функції, наприклад: ``not is_over_line()``. Цей код робить саме те, що й має робити: повертає ``True``, коли робот ``не`` знаходиться над лінією. Після того, як ви протестували свій код і переконалися, що він відповідає завданням, створіть нову функцію під назвою ``drive_until_line()`` і вставте в неї свій код. Не видаляйте цю функцію, вона знадобиться вам пізніше! Виклик ------------------ Для додаткового виклику спробуйте написати код, який дозволить роботу проїхати кілька ліній і зупинитися на них. Робот повинен проїхати лінію, зупинитися на деякий час, скажімо, на дві секунди, а потім знову рушити до наступної лінії. Цей цикл повинен повторюватися нескінченно. .. tip:: Вам потрібно буде написати логіку, яка буде обробляти виїзд робота *за межі* лінії! Вашого коду з основної активності може бути недостатньо для обробки цього! Подумайте, що буде робити ваш код, якщо він почне роботу *вже на* лінії.