Arduino:Примеры/RobotPicturebrowser

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

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


Браузер картинокArduino -

Arduino Robot можно запрограммировать таким образом, чтобы он функционировал в качестве просмотрщика картинок. Для этого нужно загрузить на SD-карту несколько изображений и запустить скетч, после чего эти изображения можно будет пролистывать на экране робота при помощи кнопок «Влево» и «Вправо». Более того, если нажать «Вверх» или «Вниз», вы переключите просмотрщик в другой режим, в котором пролистывание картинок будет осуществляться посредством наклона робота в стороны.

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

  • Arduino Robot;
  • SD-карта с несколькими картинками;

Инструкция

  1. Загрузите скетч. USB можно оставить подключенным (для питания);
  2. После загрузочной картинки на экране робота появятся инструкции;
  3. Затем на экране появится картинка из галереи;
  4. Чтобы пролистывать картинки, нажимайте левую, правую и среднюю кнопки;
  5. Нажмите «Вверх» или «Вниз», чтобы перейти в другой режим пролистывания картинок. То, какой режим активирован в данный момент, отображается в верхней части экрана;
  6. В «наклонном» режиме для пролистывания картинок нужно наклонять робота в стороны;
  7. Если хотите добавить в галерею собственные фотографии, они должны быть 24-битными, расширения «bmp» и с разрешением 128 х 160.
  8. Скетч поддерживает только 10 картинок – от «Pic0.bmp» до «Pic9.bmp». Хотите увеличить этот лимит? Попробуйте сами! Код скетча в вашем распоряжении;

Пробуем

LottieLemon Picture Browser 780.png

Пролистывайте картинки при помощи кнопок «Влево» и «Вправо»

Вы можете поменять режим просмотра картинок, нажав на кнопку «Вниз». После этого изображения можно будет пролистывать, просто наклоняя робота в стороны.

LottieLemon Picture Browser 2 780.png

Пролистывайте картинки, наклоняя робота

Код

  1 /* Браузер картинок
  2 
  3 Arduino Robot может служить в качестве просмотрщика картинок. 
  4 Загрузите на SD-карту несколько изображений, запустите скетч,
  5 и они появятся на экране. Чтобы переключиться с одной картинки
  6 на другую, используйте кнопки «Влево» и «Вправо». Впрочем, этот скетч
  7 предусматривает и другой режим просмотра картинок – посредством
  8 наклонов. Для того, чтобы войти в него, нажмите на «Вверх» или «Вниз».
  9 
 10 В галерею можно добавлять и свои картинки. Для этого их нужно
 11 загрузить на SD-карту, предварительно переделав в формат «bmp»,
 12 сделав 24-битными и с разрешением 160 х 128. Кроме того, они должны
 13 называться «picN.bmp», где вместо «N» должна стоять цифра от «0» до
 14 «9».
 15 
 16 Лимит на количество картинок – 10. Однако этот лимит можно повысить,
 17 определенным образом поменяв код скетча. Как именно? Попробуйте
 18 догадаться сами.
 19 
 20 Цепь:
 21 * Arduino Robot
 22 
 23 Создан 1 мая 2013 Х. Янгом (X. Yang),
 24 Модифицирован 12 мая 2013 Д. Куартиллье (D. Cuartielles).
 25 
 26 Этот код не защищен авторским правом.
 27 */
 28 
 29 #include <ArduinoRobot.h> // подключаем библиотеку робота
 30 #include <Wire.h>
 31 #include <SPI.h>
 32 
 33 const int NUM_PICS = 4;  // общее количество картинок в галерее
 34 
 35 // Даем названия режимам просмотра:
 36 const int CONTROL_MODE_KEY = 0;
 37 const int CONTROL_MODE_COMPASS = 1;
 38 
 39 char buffer[] = "pic1.bmp";  // название текущей картинки
 40 int i = 1;  // номер текущей картинки в галерее
 41 int mode = 0;  // текущий режим
 42 
 43 // Текст, который будет отображаться на экране:
 44 char modeNames[][9] = { "keyboard", "tilt    " };
 45 
 46 void setup() {
 47   // Инициализируем робота, SD-карту и дисплей:
 48   Robot.beginSD();
 49   Robot.beginTFT();
 50   Robot.begin();
 51 
 52   // Рисуем на экране логотипы – «lg0.bmp» и «lg1.bmp»:
 53   Robot.displayLogos();
 54 
 55   // рисуем на экране картинку «init3.bmp» (с SD-карты):
 56   Robot.drawBMP("init3.bmp", 0, 0);
 57 
 58   // Отображаем инструкции:
 59   Robot.stroke(0, 0, 0);
 60   Robot.text("The gallery\n\n has 2 modes, in\n keyboard mode, L/R\n key for switching\n pictures, U/D key\n for changing modes", 5, 5);  //  "Просмотрщик\n\n умеет работать в двух\n режимах. Для пролистывания\n картинок в клавиатурном\n режиме нажимайте\n «Влево» и «Вправо». \n Режимы переключаются\n кнопками «Вверх» и «Вниз»"
 61   delay(6000);
 62   Robot.clearScreen();
 63   Robot.drawBMP("pb.bmp", 0, 0);
 64   Robot.text("In tilt mode,\n quickly tilt the\n robot to switch\n pictures", 5, 5);  //  "В «наклонном» режиме\n пролистывание картинок\n осуществляется при помощи\n наклонов робота"
 65   delay(4000);
 66 }
 67 
 68 void loop() {
 69   buffer[3] = '0' + i; // меняем имя показываемой картинки
 70   Robot.drawBMP(buffer, 0, 0); // рисуем файл на экране
 71   // Меняем режимы просмотра:
 72   switch (mode) {
 73     case CONTROL_MODE_COMPASS:
 74       compassControl(3);
 75       break;
 76     case CONTROL_MODE_KEY:
 77       keyboardControl();
 78       break;
 79   }
 80   delay(200);
 81 }
 82 
 83 void keyboardControl() {
 84   // Используем кнопки для управления галереей:
 85   while (true) {
 86     int keyPressed = Robot.keyboardRead(); // считываем значения кнопок
 87     switch (keyPressed) {
 88       case BUTTON_LEFT:  // показываем предыдущую картинку
 89         if (--i < 1) {
 90           i = NUM_PICS;
 91         }
 92         return;
 93       case BUTTON_MIDDLE:  // ничего не делаем
 94       case BUTTON_RIGHT:  // показываем следующую картинку
 95         if (++i > NUM_PICS) {
 96           i = 1;
 97         }
 98         return;
 99       case BUTTON_UP:  // меняем режим
100         changeMode(-1);
101         return;
102       case BUTTON_DOWN:  // меняем режим
103         changeMode(1);
104         return;
105     }
106   }
107 }
108 
109 // Функция для управления с помощью компаса (т.е. с помощью наклонов):
110 void compassControl(int change) {
111   // Наклоняйте робота, чтобы переключать картинки:
112   while (true) {
113     // Считываем значение компаса:
114     int oldV = Robot.compassRead();
115 
116     // Получаем информацию о изменении угла:
117     int diff = Robot.compassRead() - oldV;
118     if (diff > 180) {
119       diff -= 360;
120     } else if (diff < -180) {
121       diff += 360;
122     }
123 
124     if (abs(diff) > change) {
125       if (++i > NUM_PICS) {
126         i = 1;
127       }
128       return;
129     }
130 
131     // если нажата кнопка, меняем режим просмотра:
132     int keyPressed = Robot.keyboardRead();
133     switch (keyPressed) {
134       case BUTTON_UP:
135         changeMode(-1);
136         return;
137       case BUTTON_DOWN:
138         changeMode(1);
139         return;
140     }
141     delay(10);
142   }
143 }
144 
145 // Меняем режим и отображаем его на экране:
146 void changeMode(int changeDir) {
147   // Альтернативные режимы:
148   mode += changeDir;
149   if (mode < 0) {
150     mode = 1;
151   } else if (mode > 1) {
152     mode = 0;
153   }
154 
155   // Отображаем режим на экране:
156   Robot.fill(255, 255, 255);
157   Robot.stroke(255, 255, 255);
158   Robot.rect(0, 0, 128, 12);
159   Robot.stroke(0, 0, 0);
160   Robot.text("Control:", 2, 2);
161   Robot.text(modeNames[mode], 52, 2);
162   delay(1000);
163 }

См.также

  1. begin()
  2. beginTFT()
  3. beginSD()
  4. keyboardRead()
  5. compassRead()
  6. drawBMP()

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