Arduino:Примеры/RobotPicturebrowser

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

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


Браузер картинок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». Хотите увеличить этот лимит? Попробуйте сами! Код скетча в вашем распоряжении;

Пробуем

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

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

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

Код

/* Браузер картинок

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

В галерею можно добавлять и свои картинки. Для этого их нужно
загрузить на SD-карту, предварительно переделав в формат «bmp»,
сделав 24-битными и с разрешением 160 х 128. Кроме того, они должны
называться «picN.bmp», где вместо «N» должна стоять цифра от «0» до
«9».

Лимит на количество картинок – 10. Однако этот лимит можно повысить,
определенным образом поменяв код скетча. Как именно? Попробуйте
догадаться сами.

Цепь:
* Arduino Robot

Создан 1 мая 2013 Х. Янгом (X. Yang),
Модифицирован 12 мая 2013 Д. Куартиллье (D. Cuartielles).

Этот код не защищен авторским правом.
*/

#include <ArduinoRobot.h> // подключаем библиотеку робота
#include <Wire.h>
#include <SPI.h>

const int NUM_PICS = 4;  // общее количество картинок в галерее

// Даем названия режимам просмотра:
const int CONTROL_MODE_KEY = 0;
const int CONTROL_MODE_COMPASS = 1;

char buffer[] = "pic1.bmp";  // название текущей картинки
int i = 1;  // номер текущей картинки в галерее
int mode = 0;  // текущий режим

// Текст, который будет отображаться на экране:
char modeNames[][9] = { "keyboard", "tilt    " };

void setup() {
  // Инициализируем робота, SD-карту и дисплей:
  Robot.beginSD();
  Robot.beginTFT();
  Robot.begin();

  // Рисуем на экране логотипы – «lg0.bmp» и «lg1.bmp»:
  Robot.displayLogos();

  // рисуем на экране картинку «init3.bmp» (с SD-карты):
  Robot.drawBMP("init3.bmp", 0, 0);

  // Отображаем инструкции:
  Robot.stroke(0, 0, 0);
  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 кнопками «Вверх» и «Вниз»"
  delay(6000);
  Robot.clearScreen();
  Robot.drawBMP("pb.bmp", 0, 0);
  Robot.text("In tilt mode,\n quickly tilt the\n robot to switch\n pictures", 5, 5);  //  "В «наклонном» режиме\n пролистывание картинок\n осуществляется при помощи\n наклонов робота"
  delay(4000);
}

void loop() {
  buffer[3] = '0' + i; // меняем имя показываемой картинки
  Robot.drawBMP(buffer, 0, 0); // рисуем файл на экране
  // Меняем режимы просмотра:
  switch (mode) {
    case CONTROL_MODE_COMPASS:
      compassControl(3);
      break;
    case CONTROL_MODE_KEY:
      keyboardControl();
      break;
  }
  delay(200);
}

void keyboardControl() {
  // Используем кнопки для управления галереей:
  while (true) {
    int keyPressed = Robot.keyboardRead(); // считываем значения кнопок
    switch (keyPressed) {
      case BUTTON_LEFT:  // показываем предыдущую картинку
        if (--i < 1) {
          i = NUM_PICS;
        }
        return;
      case BUTTON_MIDDLE:  // ничего не делаем
      case BUTTON_RIGHT:  // показываем следующую картинку
        if (++i > NUM_PICS) {
          i = 1;
        }
        return;
      case BUTTON_UP:  // меняем режим
        changeMode(-1);
        return;
      case BUTTON_DOWN:  // меняем режим
        changeMode(1);
        return;
    }
  }
}

// Функция для управления с помощью компаса (т.е. с помощью наклонов):
void compassControl(int change) {
  // Наклоняйте робота, чтобы переключать картинки:
  while (true) {
    // Считываем значение компаса:
    int oldV = Robot.compassRead();

    // Получаем информацию о изменении угла:
    int diff = Robot.compassRead() - oldV;
    if (diff > 180) {
      diff -= 360;
    } else if (diff < -180) {
      diff += 360;
    }

    if (abs(diff) > change) {
      if (++i > NUM_PICS) {
        i = 1;
      }
      return;
    }

    // если нажата кнопка, меняем режим просмотра:
    int keyPressed = Robot.keyboardRead();
    switch (keyPressed) {
      case BUTTON_UP:
        changeMode(-1);
        return;
      case BUTTON_DOWN:
        changeMode(1);
        return;
    }
    delay(10);
  }
}

// Меняем режим и отображаем его на экране:
void changeMode(int changeDir) {
  // Альтернативные режимы:
  mode += changeDir;
  if (mode < 0) {
    mode = 1;
  } else if (mode > 1) {
    mode = 0;
  }

  // Отображаем режим на экране:
  Robot.fill(255, 255, 255);
  Robot.stroke(255, 255, 255);
  Robot.rect(0, 0, 128, 12);
  Robot.stroke(0, 0, 0);
  Robot.text("Control:", 2, 2);
  Robot.text(modeNames[mode], 52, 2);
  delay(1000);
}

См.также

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

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