Arduino:Примеры/Esplora TFT Etch a Sketch

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

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


Рисование на TFT-экране Esplora [1]

Этот пример для Esplora (и присоединенного к ней TFT-экрана Arduino), опираясь на данные о позиции джойстика, рисует на экране белую линию. В скетче также задействован акселерометр – чтобы очистить экран, просто потрясите Esplora.

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

  • Плата Arduino Esplora;
  • TFT-экран Arduino;

Цепь

Esplora GLCDEtchASketch.png

Подсоедините экран к сокету на 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 }

См.также

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