Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
10i_2025_algo [2024/10/18 16:25] super_admin [Алгоритмы для исполнителя Черепаха] |
10i_2025_algo [2025/04/22 15:46] (текущий) super_admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== 10И: Алгоритмы и структуры данных на языке программирования Python ====== | + | ====== 10И Введение в робототехнику ====== |
+ | |||
+ | ===== Мобильные роботы на базе платы Arduino ===== | ||
+ | * https://uchebnik.mos.ru/material/512772?sharing_key=9f41055a-e11d-49c9-a04c-8c7791c6689d мигающий светодиод | ||
+ | * https://uchebnik.mos.ru/material/512435?sharing_key=8f5898c3-43bc-40d4-99b5-862287fd3dfb мобильный робот с дистанционным управлением | ||
+ | * https://wokwi.com/projects/344891652101374548 мигающий светодиод | ||
+ | * https://wokwi.com/projects/291958456169005577 пианино | ||
+ | * https://wokwi.com/projects/322062421191557714 дисплей | ||
+ | * https://blog.wokwi.com/ БЛОГ | ||
+ | * https://uchebnik.mos.ru/material/516814?sharing_key=555d591a-1be3-4684-9167-deee7f693889 мигающий светодиод | ||
+ | * https://www.perplexity.ai/search/podkliuchite-k-arduino-knopku-ur5BM33PQm6VpBuV32mBEQ | ||
+ | |||
+ | Подключите к Arduino кнопку и три светодиода (макет светофора) и кнопку. | ||
+ | Напиши код обработки нажатия кнопки. Каждый раз нажатием по кнопке светофор будет переключаться в следующее состояние. С красного на желтый, с желтого на зеленый, с зеленого на красный, и т.д. | ||
+ | |||
+ | ===== КИБЕР-БОЙ ===== | ||
+ | |||
+ | ==== Тренировочное задание ==== | ||
+ | * [[https://uchebnik.mos.ru/material/3697?menuReferrer=catalogue]] Моделирование роботов | ||
+ | * [[https://disk.yandex.ru/d/xwEHbzQcM1avVAg]] Дистанционное управление роботом | ||
+ | * [[https://disk.yandex.ru/i/xMA8bQK3cBFnKrg]] Подключение сервопривода (схема) | ||
+ | * [[https://disk.yandex.ru/d/xxYwty4bc2qFNWw]] Программа управления сервоприводом | ||
+ | * [[https://uchebnik.mos.ru/material/575801?sharing_key=8abe3114-a651-4d76-b836-de4c905f336f]] - **ссылка на робота с манипулятором** | ||
+ | * https://uchebnik.mos.ru/material/x581130?sharing_key=25ee8317-0888-402f-bde4-e2305745b89c - **робот с манипулятором и захватом** | ||
+ | |||
+ | ==== Первый этап ==== | ||
+ | |||
+ | * {{ :этап_1_задание.pdf |этап 1 задание}} | ||
+ | * {{ :этап_1_критерии.pdf | этап 1 критерии}} | ||
+ | * https://disk.yandex.ru/i/IsDYi906-dPCKw - Кибер-бой этап 1 презентация | ||
+ | * {{ :таблица_кодов.xlsx |}} | ||
+ | * https://uchebnik.mos.ru/material/3696?menuReferrer=catalogue - **Виртуальная лаборатория** | ||
+ | * https://forms.yandex.ru/cloud/673f3a77f47e73ddb3681c59/ форма для отчёта | ||
+ | * https://disk.yandex.ru/d/xMVOo3xNf2gTjgw | ||
+ | |||
+ | ==== Второй этап ==== | ||
+ | * {{ :этап_2_задание.pdf | Этап 2. Задание}} | ||
+ | * [[https://uchebnik.mos.ru/material/3695 | Виртуальная лаборатория Технология. Построение логических схем ]] | ||
+ | |||
+ | * {{::vl_logika_1.png?400|}} | ||
+ | * {{:vl_logika_2.png?400|}} | ||
+ | * {{:vl_logika_3.png?400|}} | ||
+ | |||
+ | ==== Сумматор двухразрядных чисел ==== | ||
+ | {{::сумматор_дв_р_2.png?400|}} | ||
+ | |||
+ | * https://disk.yandex.ru/i/x2jP6jmANC6PaPg | ||
+ | * https://disk.yandex.ru/i/x4p33r-cuciUcgw | ||
+ | * https://disk.yandex.ru/d/xp7SvlJgDh1LHWg | ||
+ | * https://disk.yandex.ru/d/xTX6XddD5N9rk8g | ||
+ | |||
+ | ===== Третий этап ===== | ||
+ | * [[https://uchebnik.mos.ru/material/3697]] - **Виртуальная лаборатория: "Технология. Моделирование роботов**" | ||
+ | * [[https://disk.yandex.ru/d/xbNtfVR2eoPMgg]] - ссылка на учебные материалы (задание, критерии оценки, презентация, демонстрация возможного результата) | ||
+ | * [[https://uchebnik.mos.ru/material/603925?sharing_key=725feac9-6787-4e7f-bd00-0cdfaa781676]] Пример работы УЗ датчика v1 | ||
+ | * https://uchebnik.mos.ru/material/512435?sharing_key=36ece898-ef99-40a8-b9ac-98973d7cd87e Робот с гусеницами. | ||
+ | * https://uchebnik.mos.ru/material/603948?sharing_key=29f7b5b6-cca7-4fa5-8184-f551aa76c9d1 v2 Робот с гусеницами и УЗ | ||
+ | |||
+ | ===== Четвёртый этап ===== | ||
+ | |||
+ | * [[https://disk.yandex.ru/d/uEbF0xSYLLpxSQ]] материалы, задание | ||
+ | * https://school.mos.ru/vrlabs/electrodynamics/app?link=9frFsPHb5f8ag3Cdk0f5 - вирт. лаб. Эл. дин. | ||
+ | * https://skysmart.ru/articles/physics/parallelnoe-i-posledovatelnoe-soedinenie расчёт сопротивлений | ||
+ | * https://forms.yandex.ru/cloud/67d428835056906066cbd6f4/ - форма для отчёта о проделанной работе. | ||
+ | |||
+ | ===== Пятый этап ===== | ||
+ | |||
+ | * https://uchebnik.mos.ru/material/50a49afd-b7d0-4ecb-983c-daf55c4baed1?sharing_key=5a69757f-6cf3-4d3c-ae8b-efdb42b36549 - пример частично собранного варианта | ||
+ | * [[https://uchebnik.mos.ru/material/cb7d71a7-d539-49af-a8d7-f186dace09bb?menuReferrer=catalogue]] Виртуальная лаборатория: "Теория вероятностей". | ||
+ | * [[https://uchebnik.mos.ru/material/cb7d71a7-d539-49af-a8d7-f186dace09bb]] Виртуальная лаборатория: "Теория вероятностей". | ||
+ | * [[https://uchebnik.mos.ru/material/a78e5946-3746-441c-8645-42005d56b1f0]] Как пользоваться лабораторией «Теория вероятностей» | ||
+ | * [[https://uchebnik.mos.ru/material/684c4222-349f-47aa-a2c6-0e6dec8313bd]] Математический Конструктор | ||
+ | * [[https://uchebnik.mos.ru/material/684c4222-349f-47aa-a2c6-0e6dec8313bd?menuReferrer=catalogue]] Математический Конструктор | ||
+ | * [[https://disk.yandex.ru/d/iNVgpsBiJqXEQQ]] КИБЕР-БОЙ ИТ 5 ЭТАП: ПРЕЗЕНТАЦИЯ, ЗАДАНИЕ, КРИТЕРИИ ОЦЕНКИ | ||
+ | * [[https://proproprogs.ru/files/balak_scool_tp.pdf]] - "Теория вероятностей для школьников", Балакирев | ||
+ | * [[https://stepik.org/course/136024/syllabus]] Добрая теория вероятностей (для ЕГЭ) с Сергеем Балакиревым | ||
+ | * [[https://stepik.org/join-class/f17c4c4039e87ea9a32a1e9bdeabd103b3d8c334]] - Задачи по теории вероятности для 10и: Добрая теория вероятностей (для ЕГЭ) с Сергеем Балакиревым | ||
+ | * [[https://intepra.ru/oge/bernoulli_distribution.html]] - теория | ||
+ | * https://uchebnik.mos.ru/material/b351783a-bb36-4200-96a0-5ea89bb67f23?sharing_key=29483cc3-476b-4022-a606-736f3b0da041 результат | ||
+ | |||
+ | ==== Вспомогательные ресурсы: ==== | ||
+ | * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D1%8B-%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0 | Основные законы электричества]] | ||
+ | * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D1%81%D0%B2%D0%B5%D1%82%D0%BE%D0%B4%D0%B8%D0%BE%D0%B4| Светодиод. Характеристики. Схема включения. Подбор резистора]] | ||
+ | * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C-%D0%BD%D0%B0%D0%BF%D1%80%D1%8F%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F| Делитель напряжения]] | ||
+ | * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0 | Кнопка. Дребезг. Схема подключения]] | ||
+ | * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BA%D0%BD%D0%BE%D0%BF%D0%BE%D1%87%D0%BD%D1%8B%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C?s[]=%D0%B4%D1%80%D0%B5%D0%B1%D0%B5%D0%B7%D0%B3 | Учебный пример: кнопочный переключатель]] | ||
+ | * [[https://wiki.amperka.ru/%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B8-%D0%B8-%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D1%8B:7-%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9-%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80 | Семисегментный индикатор]] | ||
+ | * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BF%D1%8C%D0%B5%D0%B7%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D0%BA | Пьезодинамик]] | ||
+ | |||
+ | ==== Справочник по функциям C++ для Arduino ==== | ||
+ | * [[https://docs.arduino.cc/language-reference/#functions]] | ||
+ | * [[https://docs.arduino.cc/language-reference/en/functions/advanced-io/tone/]] - функция для подключения кнопки | ||
+ | |||
+ | ==== Виртуальные модели в Workwi ==== | ||
+ | |||
+ | * https://wokwi.com/projects/415154760578950145 модель секундомера (недостаток: нет управляющей кнопки и токоограничительных резисторов) | ||
+ | * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%D0%BE%D0%BC%D0%B5%D1%80 | Секундомер]] | ||
+ | * [[https://wokwi.com/projects/new/arduino-uno]] Симулятор Arduino Uno | ||
+ | * [[https://uchebnik.mos.ru/material/534755?sharing_key=a415b923-67ad-4069-a543-131d47f214db| вариант]] | ||
+ | * https://wokwi.com/projects/415170812109939713 | ||
+ | ====== Программирование микроконтроллеров на Arduino ====== | ||
+ | * https://stepik.org/course/69511/syllabus Arduino в online. Быстрый старт !!! | ||
+ | * [[https://stepik.org/join-class/75e25fb16581d1a1645b8201775699f76f3370b7 | Ссылка на учебный класс. Знакомство с платформой ARDUINO. 10И]] | ||
+ | * [[https://wokwi.com/projects/new/arduino-uno]] **Симулятор Arduino Uno** | ||
+ | * https://wiki.amperka.ru/ | ||
+ | * https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BC%D0%B0%D1%8F%D1%87%D0%BE%D0%BA | ||
+ | * https://www.arduino.cc/reference/cs/language/structure/control-structure/switchcase/ | ||
+ | |||
+ | ====== Бегущие огни ====== | ||
+ | |||
+ | |||
+ | <code c++> | ||
+ | int pin_0 = 7; | ||
+ | int n = 0; | ||
+ | void setup() | ||
+ | { | ||
+ | pinMode(7, OUTPUT); | ||
+ | pinMode(6, OUTPUT); | ||
+ | pinMode(5, OUTPUT); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | digitalWrite(pin_0 - n, 1); | ||
+ | delay(100); | ||
+ | digitalWrite( pin_0 - n, 0); | ||
+ | n = (n + 1) % 3; | ||
+ | delay(900); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ====== Подключение кнопки с учетом борьбы с дребезгом кнопок ====== | ||
+ | |||
+ | * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BA%D0%BD%D0%BE%D0%BF%D0%BE%D1%87%D0%BD%D1%8B%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C | Эксперимент 10. Кнопочный переключатель]] | ||
+ | * [[https://www.perplexity.ai/search/ty-v-roli-uchitelia-informatik-u4EemCNTTDaPpv4DwDnA3w | Эксперименты с кнопкой]] | ||
+ | |||
+ | <code C++> | ||
+ | // switch...case | ||
+ | switch (var) { | ||
+ | case 1: | ||
+ | //do something when var equals 1 | ||
+ | break; | ||
+ | case 2: | ||
+ | //do something when var equals 2 | ||
+ | break; | ||
+ | default: | ||
+ | // if nothing else matches, do the default | ||
+ | // default is optional | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | * [[https://wokwi.com/projects/4213320841703188490]] многофункциональная кнопка (ссылка закодирована) | ||
+ | * https://www.circuitlab.com/editor/#?id=7pq5wm&from=homepage | ||
+ | |||
+ | ====== Дополнительные учебные курсы по Arduino ====== | ||
+ | * https://stepik.org/course/55014/syllabus | ||
+ | * https://stepik.org/course/102886/syllabus | ||
+ | * https://stepik.org/course/108374/syllabus | ||
+ | |||
+ | ===== Программирование ТРИК на Python!!! ===== | ||
+ | * https://trikset.com/products/trik-controller | ||
+ | * https://help.trikset.com/trik/programming-code справочная документация | ||
+ | * https://trikset.com/education/methodical методические рекомендации | ||
+ | * {{ ::9-4trik_робототехника_01.pdf | Знакомство с Trik Studio}} | ||
+ | * УРОКИ: | ||
+ | * {{ :trik_studio_01.pdf | 1. Знакомство с Trik Studio. Управление моторами на языке Python}} | ||
+ | * {{ :trik_studio_02.pdf | 2. Обратная связь. Энкодеры}} | ||
+ | * {{ ::trik_studio_03.pdf | 3. Обратная связь. Датчик расстояния}} | ||
+ | * {{ :trik_studio_04.pdf | 4. Регуляторы}} | ||
+ | * {{ :trik_studio_05.pdf | 5. Движение по линии}} | ||
+ | * {{ :trik_py.zip | Практика. Задачи }} | ||
+ | |||
+ | ===== Виртуальные лаборатории МЭШ ===== | ||
+ | * https://uchebnik.mos.ru/material/3697?menuReferrer=catalogue Моделирование роботов | ||
+ | |||
+ | ====== Алгоритмы и структуры данных на языке программирования Python ====== | ||
===== Ресурсы ===== | ===== Ресурсы ===== | ||
Строка 61: | Строка 238: | ||
<code Python> | <code Python> | ||
+ | # Автор: Леднёв Алексей | ||
a = [i for i in input().split()] | a = [i for i in input().split()] | ||
k = len(a)*2-1 | k = len(a)*2-1 | ||
Строка 74: | Строка 252: | ||
| | ||
''' | ''' | ||
+ | input | ||
1 2 3 | 1 2 3 | ||
+ | output | ||
1 1 1 1 1 | 1 1 1 1 1 | ||
1 2 2 2 1 | 1 2 2 2 1 | ||
Строка 81: | Строка 261: | ||
1 1 1 1 1 | 1 1 1 1 1 | ||
''' | ''' | ||
+ | </code> | ||
+ | |||
+ | <code Python> | ||
+ | n = int(input()) | ||
+ | r = sum([int(input()) for i in range(n)]) | ||
+ | print(f'{["Foo", "Bar"][r<0]} & {["Qux", "Baz"][r%2 == 0]}') | ||
</code> | </code> | ||
==== Codingame ==== | ==== Codingame ==== | ||
Строка 106: | Строка 292: | ||
- https://www.codingame.com/clashofcode/clash/388174749d606a3990891ea0c15dd097e45144e | - https://www.codingame.com/clashofcode/clash/388174749d606a3990891ea0c15dd097e45144e | ||
- https://www.codingame.com/clashofcode/clash/38817641f823dea30a9923f1fcd0915a4713944 | - https://www.codingame.com/clashofcode/clash/38817641f823dea30a9923f1fcd0915a4713944 | ||
+ | |||
+ | **22.10.2024** | ||
+ | |||
+ | - https://www.codingame.com/clashofcode/clash/38882773ed69ec08c3c131b4ea2deb3585dd3b7 | ||
+ | - https://www.codingame.com/clashofcode/clash/3888303b4593ea9edcae98ca9f4269ed98d2290 | ||
+ | - https://www.codingame.com/clashofcode/clash/3888322b2ac7ff74811ffdab82f1d111483d91a | ||
+ | |||
+ | **24.10.2024** | ||
+ | |||
+ | - https://www.codingame.com/clashofcode/clash/389081723b18d5e80676437434bb8c5da3fc51f | ||
+ | - https://uchebnik.mos.ru/material/607641?sharing_key=0f8055c9-7135-4651-b22f-6c68bf58df64 !!! | ||
+ | |||
+ | <code c++> | ||
+ | |||
+ | const int LM_s1 = 10; // левый мотор вход 1 | ||
+ | const int LM_s2 = 9; // левый мотор вход 2 | ||
+ | const int RM_s1 = 5; // правый мотор вход 1 | ||
+ | const int RM_s2 = 6; // правый мотор вход 2 | ||
+ | |||
+ | int led_pin = 13; | ||
+ | // Укажем пины для подключения УЗ датчика | ||
+ | int trigPin = 12; | ||
+ | int echoPin = 11; | ||
+ | int s_for_obj = 0; | ||
+ | // текущее состояние системы | ||
+ | int state = 0; // начальное состояние | ||
+ | |||
+ | void setup(){ | ||
+ | Serial.begin(9600); | ||
+ | |||
+ | //правый | ||
+ | pinMode(RM_s1, OUTPUT); | ||
+ | pinMode(RM_s2, OUTPUT); | ||
+ | //левый | ||
+ | pinMode(LM_s1, OUTPUT); | ||
+ | pinMode(LM_s2, OUTPUT); | ||
+ | // УЗ | ||
+ | pinMode(trigPin, OUTPUT); | ||
+ | pinMode(echoPin, INPUT); | ||
+ | // светодиод | ||
+ | pinMode(led_pin, OUTPUT); | ||
+ | } | ||
+ | |||
+ | |||
+ | int dist() // функция для вычисления расстояния | ||
+ | { | ||
+ | int t,s; // локальные переменные время, расстояние | ||
+ | // установить высокий уровень на пине Trig | ||
+ | digitalWrite(trigPin, 1); | ||
+ | // подождать 10 мс | ||
+ | delay(10/16); | ||
+ | digitalWrite(trigPin, 0); | ||
+ | // узнаем время | ||
+ | t = pulseIn(echoPin, 1); | ||
+ | // вычисляем расстояние | ||
+ | s = t * 0.034/2; | ||
+ | return (s); | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | void loop() { | ||
+ | s_for_obj = dist(); | ||
+ | //Serial.println(s_for_obj );// вывод измеренного расстояния в окно сообщений | ||
+ | //delay(20/16); | ||
+ | Serial.println(state); | ||
+ | switch (state) { | ||
+ | case 0: // начальное состояние: вперёд до первого препятствия | ||
+ | case 2: // после первого поворота: вперёд до второго препятствия | ||
+ | if (s_for_obj == 0 || s_for_obj > 68){ | ||
+ | moveForward(); | ||
+ | } else { | ||
+ | stopMotors(); | ||
+ | state ++; | ||
+ | } | ||
+ | break; | ||
+ | |||
+ | case 1: // перед первым препятствием: левый поворот | ||
+ | case 3: // перед вторым препятствием: левый поворот | ||
+ | turnLeft(); | ||
+ | delay(2970/16); | ||
+ | state ++; | ||
+ | stopMotors(); | ||
+ | break; | ||
+ | |||
+ | case 4: // после второго поворота: прямолинейный путь до остановки | ||
+ | moveForward(); | ||
+ | delay(23000/16); // время прямолинейного движения до остановки | ||
+ | state ++; | ||
+ | stopMotors(); | ||
+ | break; | ||
+ | |||
+ | case 5: // после остановки на площадке: включить светодиод на 4 секунды | ||
+ | digitalWrite(led_pin, 1); | ||
+ | delay(4000/16); | ||
+ | digitalWrite(led_pin, 0); | ||
+ | state ++; | ||
+ | break; | ||
+ | case 6: // | ||
+ | stopMotors(); | ||
+ | break; | ||
+ | default: | ||
+ | stopMotors(); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void moveForward() { | ||
+ | //Serial.println("up"); | ||
+ | digitalWrite(LM_s1, 1); | ||
+ | digitalWrite(LM_s2, 0); | ||
+ | digitalWrite(RM_s1, 1); | ||
+ | digitalWrite(RM_s2, 0); | ||
+ | delay(20); | ||
+ | } | ||
+ | |||
+ | void moveBackward() { | ||
+ | //Serial.println("down"); | ||
+ | |||
+ | digitalWrite(LM_s1, 0); | ||
+ | digitalWrite(LM_s2, 1); | ||
+ | digitalWrite(RM_s1, 0); | ||
+ | digitalWrite(RM_s2, 1); | ||
+ | delay(20); | ||
+ | } | ||
+ | |||
+ | void turnLeft() { | ||
+ | digitalWrite(LM_s1, LOW); | ||
+ | digitalWrite(LM_s2, HIGH); | ||
+ | digitalWrite(RM_s1, HIGH); | ||
+ | digitalWrite(RM_s2, LOW); | ||
+ | delay(20); | ||
+ | } | ||
+ | |||
+ | void turnRight() { | ||
+ | digitalWrite(LM_s1, HIGH); | ||
+ | digitalWrite(LM_s2, LOW); | ||
+ | digitalWrite(RM_s1, LOW); | ||
+ | digitalWrite(RM_s2, HIGH); | ||
+ | delay(20); | ||
+ | } | ||
+ | |||
+ | void stopMotors() { | ||
+ | digitalWrite(LM_s1, LOW); | ||
+ | digitalWrite(LM_s2, LOW); | ||
+ | digitalWrite(RM_s1, LOW); | ||
+ | digitalWrite(RM_s2, LOW); | ||
+ | //delay(20); | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | ====== РОБОТ МФТИ ====== | ||
+ | |||
+ | [[http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html]] РОБОТ | ||
+ | * {{ :robot-tasks-master_.zip |}} - Архив с файлами робота (модификация: в файле pyrob/api.py добавлен, приведенный ниже код, упрощающий написание команд (инструкций) управления роботом) | ||
+ | |||
+ | <code python> | ||
+ | ml = move_left #Пройти n клеток влево (по умолчанию n = 1) | ||
+ | mr = move_right #Пройти n клеток вправо (по умолчанию n = 1) | ||
+ | mu = move_up #Пройти n клеток вверх (по умолчанию n = 1) | ||
+ | md = move_down #Пройти n клеток вниз (по умолчанию n = 1) | ||
+ | wu = wall_is_above #если сверху стена, возвращает True, иначе — False | ||
+ | wd = wall_is_beneath #если снизу стена, возвращает True, иначе — False | ||
+ | wl = wall_is_on_the_left #если слева стена, возвращает True, иначе — False | ||
+ | wr = wall_is_on_the_right #если справа стена, возвращает True, иначе — False | ||
+ | fill = fill_cell #Закрасить текущую клетку | ||
+ | #cell_is_filled #Возвращает True, если текущая клетка закрашена | ||
+ | #mov #Поместить значение v в регистр r | ||
+ | |||
+ | </code> | ||
+ | |||
+ | **Пример решения первой задачи** | ||
+ | |||
+ | {{:2023-10-15_22_50_21-window.png?nolink|}} | ||
+ | |||
+ | <code python> | ||
+ | #!/usr/bin/python3 | ||
+ | |||
+ | from pyrob.api import * | ||
+ | |||
+ | |||
+ | @task | ||
+ | def task_1_1(): | ||
+ | #pass | ||
+ | mr(2) # Пройти 2 клетки вправо или: move_right(2) | ||
+ | md(1) # Пройти 1 клетку вниз или: move_down(2) | ||
+ | |||
+ | |||
+ | if __name__ == '__main__': | ||
+ | run_tasks() | ||
+ | </code> | ||
+ | |||
+ |