Arduino:Примеры/RobotPicturebrowser
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Содержание
Браузер картинокArduino -
Arduino Robot можно запрограммировать таким образом, чтобы он функционировал в качестве просмотрщика картинок. Для этого нужно загрузить на SD-карту несколько изображений и запустить скетч, после чего эти изображения можно будет пролистывать на экране робота при помощи кнопок «Влево» и «Вправо». Более того, если нажать «Вверх» или «Вниз», вы переключите просмотрщик в другой режим, в котором пролистывание картинок будет осуществляться посредством наклона робота в стороны.
Необходимое оборудование
- Arduino Robot;
- SD-карта с несколькими картинками;
Инструкция
- Загрузите скетч. USB можно оставить подключенным (для питания);
- После загрузочной картинки на экране робота появятся инструкции;
- Затем на экране появится картинка из галереи;
- Чтобы пролистывать картинки, нажимайте левую, правую и среднюю кнопки;
- Нажмите «Вверх» или «Вниз», чтобы перейти в другой режим пролистывания картинок. То, какой режим активирован в данный момент, отображается в верхней части экрана;
- В «наклонном» режиме для пролистывания картинок нужно наклонять робота в стороны;
- Если хотите добавить в галерею собственные фотографии, они должны быть 24-битными, расширения «bmp» и с разрешением 128 х 160.
- Скетч поддерживает только 10 картинок – от «Pic0.bmp» до «Pic9.bmp». Хотите увеличить этот лимит? Попробуйте сами! Код скетча в вашем распоряжении;
Пробуем
Пролистывайте картинки при помощи кнопок «Влево» и «Вправо»
Вы можете поменять режим просмотра картинок, нажав на кнопку «Вниз». После этого изображения можно будет пролистывать, просто наклоняя робота в стороны.
Пролистывайте картинки, наклоняя робота
Код
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 }
См.также
- begin()
- beginTFT()
- beginSD()
- keyboardRead()
- compassRead()
- drawBMP()
Внешние ссылки