Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/RobotPicturebrowser

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Браузер картинок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()

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