Arduino:Примеры/Esplora TFT Etch a Sketch
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Содержание
Рисование на TFT-экране Esplora [1]
Этот пример для Esplora (и присоединенного к ней TFT-экрана Arduino), опираясь на данные о позиции джойстика, рисует на экране белую линию. В скетче также задействован акселерометр – чтобы очистить экран, просто потрясите Esplora.
Необходимое оборудование
- Плата Arduino Esplora;
- TFT-экран Arduino;
Цепь
Подсоедините экран к сокету на Esplora – так, чтобы надпись «SD Card» была вверху.
Код
Чтобы использовать экран, вам нужно подключить библиотеки SPI и TFT. Также не забудьте подключить библиотеку Esplora.
1 #include <Esplora.h>
2 #include <TFT.h>
3 #include <SPI.h>
Задаем координаты курсора (X и Y). В данном примере начальные координаты – это центр экрана. Они определяются путем деления высоты и ширины экрана надвое.
1 int xPos = EsploraTFT.width()/2;
2 int yPos = EsploraTFT.height()/2;
В секции setup() инициализируем дисплей и очищаем фон экрана.
1 void setup() {
2 EsploraTFT.begin();
3 EsploraTFT.background(0,0,0);
4 }
Считываем значения джойстика и приспосабливаем их к менее широкому диапазону. Возможно, ваш джойстик, будучи в центральной позиции, не будет давать значение «0». Кроме того, если мы хотим, чтобы курсор двигался только при намеренном движении джойстика, нам нужно воспользоваться оператором if – с его помощью мы будем проверять позицию в пределах определенного порога (в данном случае от «-10» до «10»). То есть если считанное значение будет в рамках этого диапазона, курсор останется на месте. Однако если значение выйдет за его пределы, то курсор двинется в соответствующем направлении.
1 void loop()
2 {
3 int xAxis = Esplora.readJoystickX();
4 int yAxis = Esplora.readJoystickY();
5
6 if (xAxis<10 && xAxis>-10){
7 xPos=xPos;
8 }
9 else{
10 xPos = xPos + (map(xAxis, -512, 512, 2, -2));
11 }
12 if (yAxis<10 && yAxis>-10){
13 yAxis=yAxis;
14 }
15 else{
16 yPos = yPos + (map(yAxis, -512, 512, -2, 2));
17 }
Если мы хотим, чтобы курсор не убегал за пределы экрана, перед тем, как рисовать линию, нам надо воспользоваться несколькими операторами if.
1 if(xPos > 159){
2 (xPos = 159);
3 }
4
5 if(xPos < 0){
6 (xPos = 0);
7 }
8 if(yPos > 127){
9 (yPos = 127);
10 }
11
12 if(yPos < 0){
13 (yPos = 0);
14 }
15
16 EsploraTFT.stroke(255,255,255);
17 EsploraTFT.point(xPos,yPos);
Наконец, проверяем состояние акселерометра. Если значения от осей X и Y вышли за пределы заданного вами диапазона, очищаем экран при помощи функции background().
1 if(abs(Esplora.readAccelerometer(X_AXIS))>200 || abs(Esplora.readAccelerometer(Y_AXIS))>200){
2 EsploraTFT.background(0,0,0);
3 }
4
5 delay(33);
6 }
Весь код полностью – ниже:
1 /*
2 Рисование на TFT-экране Esplora
3
4 Это пример для платы Esplora и TFT-экрана Arduino.
5 Он позволяет рисовать на экране белую линию на основе значений от
6 джойстика, а затем очищать экран на основе значений от акселерометра –
7 для этого надо просто потрясти Esplora.
8
9 Этот код не защищен авторским правом.
10
11 Создан 15 апреля 2013 Скоттом Фитцджеральдом (Scott Fitzgerald).
12
13 http://www.arduino.cc/en/Tutorial/EsploraTFTEtchASketch
14 */
15
16 #include <Esplora.h>
17 #include <TFT.h> // библиотека LCD-экрана Arduino
18 #include <SPI.h>
19
20 // Начальная позиция курсора:
21 int xPos = EsploraTFT.width() / 2;
22 int yPos = EsploraTFT.height() / 2;
23
24 void setup() {
25 // Инициализируем дисплей:
26 EsploraTFT.begin();
27
28 // Очищаем фон:
29 EsploraTFT.background(0, 0, 0);
30 }
31 void loop() {
32
33 int xAxis = Esplora.readJoystickX(); // считываем значение от X-оси джойстика
34 int yAxis = Esplora.readJoystickY(); // считываем значение от Y-оси джойстика
35
36 // Обновляем позицию линии в зависимости от позиции джойстика:
37 if (xAxis < 10 && xAxis > -10) {
38 xPos = xPos;
39 } else {
40 xPos = xPos + (map(xAxis, -512, 512, 2, -2));
41 }
42 if (yAxis < 10 && yAxis > -10) {
43 yAxis = yAxis;
44 } else {
45 yPos = yPos + (map(yAxis, -512, 512, -2, 2));
46 }
47
48 // Делаем так, чтобы курсор не убежал за край экрана:
49 if (xPos > 159) {
50 (xPos = 159);
51 }
52
53 if (xPos < 0) {
54 (xPos = 0);
55 }
56 if (yPos > 127) {
57 (yPos = 127);
58 }
59
60 if (yPos < 0) {
61 (yPos = 0);
62 }
63
64 // Рисуем точку:
65 EsploraTFT.stroke(255, 255, 255);
66 EsploraTFT.point(xPos, yPos);
67
68 // Обращаемся к акселерометру и очищаем экран,
69 // если данные от акселерометра говорят, что Esplora потрясли:
70 if (abs(Esplora.readAccelerometer(X_AXIS)) > 200 || abs(Esplora.readAccelerometer(Y_AXIS)) > 200) {
71 EsploraTFT.background(0, 0, 0);
72 }
73
74 delay(33);
75 }
См.также
Внешние ссылки