Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции

Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции

Ранее была написана программка управления моторами бота и их скоростью с внедрением приложения Arduino Блютуз RC Car. Добавим еще одну возможность – бот едет, только пока нажата кнопка в приложении, а когда она отпущена – не едет (управление скоростью клавишами фар в программке тоже должно быть). Зайдите в опции приложения и включите режим Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции Continuous Stream – в данном случае приложение пересылает рассмотренные ранее знаки (F, B, L, R) каждый 50 миллисекунд, пока кнопка нажата. В этом случае нет необходимости для управления скоростью выводить управление моторами после switch, потому можно сделать таким макаром:

switch (command) { // исполняем команду в согласовании с принятым эмблемой case 'F': // вперед analogWrite Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции(In1, speed); analogWrite(In2, 0); analogWrite(In3, speed); analogWrite(In4, 0); break; case 'B': // вспять analogWrite(In1, 0); analogWrite(In2, speed); analogWrite(In3, 0); analogWrite(In4, speed); break; case 'L': // на лево analogWrite(In1, speed); analogWrite(In2, 0); analogWrite(In3, 0); analogWrite(In4, speed); break; case 'R': // на право analogWrite(In1, 0); analogWrite(In2, speed); analogWrite Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции(In3, speed); analogWrite(In4, 0); break; case 'S': // стоп analogWrite(In1, 0); analogWrite(In2, 0); analogWrite(In3, 0); analogWrite(In4, 0); break; case 'U': // прибавить скорость speed = speed + 10; break; case 'u': // прибавить скорость speed = speed + 10; break; case 'W': // уменьшить скорость speed = speed - 10; break; case 'w': // уменьшить скорость speed = speed - 10; break; default: // если Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции принят некий другой сигнал - стоп analogWrite(In1, 0); analogWrite(In2, 0); analogWrite(In3, 0); analogWrite(In4, 0); break; }

Программка выходит довольно большой и тяжело редактируемой, а в случае, если нужно добавить что-то еще (к примеру, раздельное управление скоростью моторов, изготовленное, чтоб откалибровать бота на езду прямо вперед) громоздкость кода будет расти в геометрической Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции прогрессии. Чтоб избежать подобного, употребляют функции.

Функция – это часть кода, обычно находящаяся после основного цикла loop, вызываемая своим именованием, к примеру, forward(). Те команды, которыми мы уже научились воспользоваться, тоже являются функциями к примеру, analogWrite(In1, 0). Но эти функции прописаны не в скетче, а входят в состав Arduino IDE. Научимся Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции создавать свои функции.

Функция прописывается типом возвращаемой переменной – int, float и т.д., если такая переменная есть (к примеру, функция float arcsin(x) ). В случае, если функция только производит только деяния, а не вычисления, ее тип – void (пустая)

Функция движения вперед будет смотреться последующим образом:

void forward () { // тип функции, заглавие функции Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции (должно отличаться от стандартных), в скобках (…) ставятся аргументы – значения, передаваемые в функцию, если они есть analogWrite(In1, speed); analogWrite(In2, 0); analogWrite(In3, speed); analogWrite(In4, 0); }

Аналогично можно перенести программки движений из switch в отдельные функции. В данном случае switch можно свести к последующему коду:

switch (command Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции) { // исполняем команду в согласовании с принятым эмблемой case 'F': // вперед forward(); break; case 'B': // вспять backrward(); break; case 'L': // на лево left(); break; case 'R': // на право right(); break; case 'S': // стоп stop_motors(); break; case 'U': // прибавить скорость speed = speed + 10; break; case 'u': // прибавить скорость speed = speed + 10; break Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции; case 'W': // уменьшить скорость speed = speed - 10; break; case 'w': // уменьшить скорость speed = speed - 10; break; default: // если принят некий другой сигнал - стоп stop_motors(); break; }

При этом, если необходимо будет что-то изменять в изготовленных движениях, switch трогать уже не придется, а только поменять надлежащие функции. Также легче добавлять дополнительные команды Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции в switch, написав новые функции и просто сделав их вызов

Практическое занятие 1: напишите программку управления ровером приложением Arduino Блютуз RC Car удержанием кнопок, плюс возможность регулировки скорости клавишами включения фар. Испытайте программку на реальном роботе-ровере

Практическое занятие 2.

Воспользуемся преимуществами работы с функциями, чтоб сделать лучше работу бота. Как можно были Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции увидеть, не всегда бот едет прямо при нажатии соответственной кнопки. Это связано с тем, что свойства установленных на ровера моторов малость отличаются и при одном и том же напряжении скорость вращения у их различна. Добавим в программку возможность калибровки скоростей вращения моторов, чтоб выровнять их:

float k_speed_right = 1; // коэффициент, на Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции который множится скорость правого мотора для калибровки движков (чтоб бот двигался в прямом направлении) float k_speed_left = 1; // коэффициент, на который множится скорость левого мотора для калибровки движков (у 1-го из моторов коэффициент = 1, у другого меньше 1) … void forward () { float speed_left = k_speed_left * speed; float speed Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции_right = k_speed_right * speed; analogWrite(In1, 0); analogWrite(In2, speed_left); analogWrite(In3, 0); analogWrite(In4, speed_right); }

Добавьте калибровки скоростей в другие функции движений (backward, left, right). Двигая бота по прямой и следя направление и уровень отклонений, подберите коэффициенты (к примеру, k_speed_right = 1, k_speed_left = 0,95) таким макаром Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции, чтоб бот ехал по прямой. Вероятнее всего, будет нужно несколько тестов

По способности сохраните написанную программку на флеш-карту, т.к. она может быть применена в соревнованиях по управляемому робофутболу и управляемым гонкам.

Домашнее задание

Используйте передачу данных в функции. Пример: функция forward (200), где число в скобках – время, которое бот едет, в Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции мс. Функция смотрится последующим образом:

void forward (int time) { // в скобках – объявляется переменная (аргумент функции), куда передается значение (200 в примере). Работает только снутри этой функции (локальная переменная) float speed_left = k_speed_left * speed; float speed_right = k_speed_right * speed; analogWrite(In1, 0); analogWrite(In2, speed_left); analogWrite(In3, 0); analogWrite Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции(In4, speed_right); delay (time); stop_motors (); }

Видоизмените другие функции движений (backward, left, right) аналогичным таким макаром. Напишите движения ботов по какой-нибудь линии движения (квадрат, треугольник, круг, восьмерка, спираль, написание буковкы либо слова и т.п.), используя в блоке loop такие функции либо подобные им. Опционально (если есть Курс «Основы робототехники. Продвинутый уровень». Занятие 3. Функции возможность): установите на бота карандаш, ручку либо маркер, принесите на занятие большой лист бумаги и продемонстрируйте, как бот отрисовывают в процессе езды какую-либо фигуру.


kurs-lekcij-po-discipline-tehnohimicheskij-kontrol-proizvodstva-soderzhanie-kursa-lekcij-po-discipline-tehnohimicheskij-kontrol-proizvodstva-stranica-7.html
kurs-lekcij-po-ekonomika-stroitelstva-referat.html
kurs-lekcij-po-makroekonomike-a-a-fridman.html