Arduino:Примеры/RobotLogo

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Базовые движения Arduino Robot[1]

Этот скетч демонстрирует базовые движения, на которые способен Arduino Robot. Когда скетч начнет работать, начинайте нажимать на кнопки, находящиеся на верхней (контрольной) плате, тем самым указывая для робота желаемый маршрут. Введя нужную последовательность (до 20 «шагов» за раз), нажмите на среднюю кнопку, чтобы записать ее в память. Теперь поставьте робота на пол, чтобы он начинал перемещаться согласно введенным вами инструкциям.

Необходимое оборудование

  • Arduino Robot;

Инструкция

  1. Загрузите скетч, отсоедините USB и включите питание.
  2. Поставьте робота на пол – на чистую, гладкую поверхность, чтобы он мог свободно по ней перемещаться.
  3. Показав на своем экране загрузочные картинки, робот попросит вас ввести команды.
  4. Начинайте нажимать на кнопки, тем самым указывая роботу желаемый маршрут движения. Робот будет записывать эти команды, чтобы позднее приступить к их выполнению.
  5. Кнопка «Влево» – это левый поворот на 90 градусов, «Вправо» – правый поворот на 90 градусов, «Вверх» – робот идет вперед в течение одной секунды, «Вниз» – робот идет назад в течение одной секунды.
  6. Закончив с маршрутом, нажмите на среднюю кнопку. После этого робот начнет по порядку выполнять введенные вами команды. Робот может запомнить не более 20 команд, и если вы введете все 20, то робот начнет выполнять их еще до того, как вы нажмете среднюю кнопку.
  7. Выполнив запрограммированную последовательность, робот вернется к 3-ему шагу этой инструкции. Вводите новые команды и пробуйте еще раз!

Пробуем

LottieLemon logo 780.png

Программирование движений робота на кнопочной крестовине

LottieLemon logo 2 780.png

Попробуйте повторить эту последовательность на своем Arduino Robot

Код

Тут мы попробуем объяснить код – строчка за строчкой.

  1 /* Базовые движения Arduino Robot
  2 
  3 Этот скетч демонстрирует базовые движения Arduino Robot.
  4 Когда скетч запустится, начинайте нажимать на кнопки,
  5 находящиеся на верхней (контрольной) плате, чтобы указать роботу, 
  6 каким маршрутом двигаться. Нажав на среднюю кнопку, вы
  7 сохраните введенную вами последовательность, а робот,
  8 в свою очередь, согласно этой последовательности будет передвигаться. 
  9 Записать можно не более 20 команд. На выполнение одной команды будет
 10 уходить одна секунда.
 11 
 12 Этот пример использует изображения, хранящиеся на SD-карте.
 13 Он ищет файлы с названиями «lg0.bmp» и «lg1.bmp», а затем 
 14 показывает их на своем экране.
 15 
 16 Цепь:
 17 * Arduino Robot
 18 
 19 Создан 1 мая 2013 Х. Янгом (X. Yang),
 20 модифицирован 12 мая 2013 Д. Куартиллье (D. Cuartielles).
 21 
 22 Этот код не защищен авторским правом.
 23 */
 24 
 25 #include <ArduinoRobot.h> // подключаем библиотеку Robot
 26 #include <Wire.h>
 27 #include <SPI.h>
 28 
 29 int commands[20];  // массив для хранения команд
 30 
 31 void setup() {
 32   // Инициализируем робота, SD-карту и дисплей:
 33   Robot.begin();
 34   Robot.beginTFT();
 35   Robot.beginSD();
 36 
 37   // Показываем на экране картинки «lg0.bmp» и «lg1.bmp»:
 38   Robot.displayLogos();
 39 }
 40 
 41 void loop() {
 42 
 43   Robot.drawBMP("intro.bmp", 0, 0);  // фоновое изображение экрана
 44 
 45   iniCommands(); // удаляем команды из массива
 46   addCommands(); // добавляем команды в массив
 47 
 48   delay(1000); // ждем секунду
 49 
 50   executeCommands(); // следуем заданной последовательности
 51 
 52   Robot.stroke(0, 0, 0);
 53   Robot.text("Done!", 5, 103); // пишем на экране сообщение «Готово!»
 54   delay(1500); // немного ждем
 55 }
 56 
 57 // Функция для очистки массива с командами:
 58 void iniCommands() {
 59   for (int i = 0; i < 20; i++) {
 60     commands[i] = -1;
 61   }
 62 }
 63 
 64 // Функция для добавления команд в массив:
 65 void addCommands() {
 66   Robot.stroke(0, 0, 0);
 67   // Показываем на экране сообщение:
 68   Robot.text("1. Press buttons to\n add commands.\n\n 2. Middle to finish.", 5, 5);  //  "1. Нажимайте кнопки\n, чтобы ввести команды.\n\n 2. Когда закончите\n, нажмите среднюю кнопку."
 69 
 70   // Считываем состояния кнопок:
 71   for (int i = 0; i < 20;) { // устанавливаем лимит в 20 команд
 72     int key = Robot.keyboardRead();
 73     if (key == BUTTON_MIDDLE) { // кнопка для завершения ввода последовательности
 74       break;
 75     } else if (key == BUTTON_NONE) { // если на среднюю кнопку не нажали, продолжаем
 76       continue;
 77     }
 78     commands[i] = key; // сохраняем состояние кнопки в массив
 79     PrintCommandI(i, 46); // показываем команду на экране
 80     delay(100);
 81     i++;
 82   }
 83 }
 84 // Функция для «прочесывания» массива с командами 
 85 // (т.е. функция, которая будет отдавать роботу те или иные команды):
 86 void executeCommands() {
 87   // Выводим на монитор статусное сообщение:
 88   Robot.text("Excuting...", 5, 70);  //  "Выполнение..."
 89 
 90   // «Прочесываем» массив и двигаем робота согласно имеющимся в нем командам:
 91   for (int i = 0; i < 20; i++) {
 92     switch (commands[i]) {
 93       case BUTTON_LEFT:
 94         Robot.turn(-90);
 95         break;
 96       case BUTTON_RIGHT:
 97         Robot.turn(90);
 98         break;
 99       case BUTTON_UP:
100         Robot.motorsWrite(255, 255);
101         break;
102       case BUTTON_DOWN:
103         Robot.motorsWrite(-255, -255);
104         break;
105       case BUTTON_NONE:
106         return;
107     }
108     // Печатаем текущую команду на экране:
109     Robot.stroke(255, 0, 0);
110     PrintCommandI(i, 86);
111     delay(1000);
112 
113     // Притормаживаем робота на секунду:
114     Robot.motorsStop();
115     delay(1000);
116   }
117 }
118 
119 // Конвертируем нажатие на кнопку в один символ:
120 char keyToChar(int key) {
121   switch (key) {
122     case BUTTON_LEFT:
123       return '<';
124     case BUTTON_RIGHT:
125       return '>';
126     case BUTTON_UP:
127       return '^';
128     case BUTTON_DOWN:
129       return 'v';
130   }
131 }
132 
133 // Функция для показа команды на мониторе:
134 void PrintCommandI(int i, int originY) {
135   Robot.text(keyToChar(commands[i]), i % 14 * 8 + 5, i / 14 * 10 + originY);
136 }

См.также

  1. begin()
  2. beginTFT()
  3. motorsWrite()
  4. turn()
  5. keyboardRead()

Внешние ссылки