Arduino:Примеры/TFTEtchaSketch

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

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


Рисование белой точкой-курсором на TFT-экране Arduino[1]

GLCD EtchSketchDemosm.png

Этот пример для TFT-экрана Arduino рисует на нем белую линию, беря за основу значения от двух потенциометров. При нажатии на кнопку нарисованное стирается.

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

  • Плата Arduino Uno;
  • TFT-экран Arduino;
  • Макетная плата Breadboard;
  • Провода-перемычки;
  • Два потенциометра на 10 кОм;
  • Кнопка;
  • Резистор на 10 кОм;

Цепь

Подключите контакты с питанием и «землей» к макетной плате.

GLCD sketch1.png

Подключите оба потенциометра к макетной плате: их боковые контакты к «земле» и питанию, а центральные – к 0-ому и 1-ому аналоговым контактам.

GLCD sketch2.png

Кнопку поместите в центре макетной платы. Один ее конец подключите к питанию, а другой – ко 2-ому цифровому контакту Arduino. Тот же контакт подключите к «земле» через стягивающий 10 кОмовый резистор.

GLCD sketch3.png

Подключите TFT-экран к макетной плате. Подключить его нужно той стороной, где находятся стрелочка и маленькая голубая полоска. Также обратите внимание на ориентацию экрана. На этих рисунках он подсоединен вверх тормашками.

GLCD sketch4.png

Контакты BL и +5V подключите к питанию, а GND – к «земле». CS-LD подключите к 10-ому контакту, DC – к 9-ому, RESET – к 8-ому, MOSI – к 11-ому, а SCK – к 13-ому. В случае с Leonardo вам надо будет использовать другие контакты, читайте об этом на странице о TFT-экране или в коде ниже.

GTFT sketch large.png

Код

Чтобы использовать экран, подключаем библиотеки SPI и TFT.

1 #include <SPI.h>
2 #include <TFT.h>

Определяем контакты, которые будем использовать для управления экраном, а затем создаем экземпляр класса TFT и называем его TFTscreen – будем отсылать к нему всякий раз, когда нам надо будет работать с экраном.

1 #define cs   10
2 #define dc   9
3 #define rst  8  
4 
5 TFT TFTscreen = TFT(cs, dc, rst);

Задаем позицию курсора, т.е. его координаты по осям X и Y. В этом примере мы начнем с середины экрана, и эта позиция вычисляется довольно просто – путем деления высоты и ширины экрана надвое. Далее задаем контакт, который будет отвечать за кнопку, стирающую экран.

1 int xPos = LCDscreen.width()/2;
2 int yPos = LCDscreen.height()/2;
3 
4 int erasePin = 2;

В секции setup() объявляем этот контакт входным, а затем инициализируем дисплей и очищаем фон экрана.

1 void setup() {
2   pinMode(erasePin, INPUT);
3   TFTscreen.begin();
4   TFTscreen.background(0,0,0); 
5 }

Считываем данные с потенциометров, а затем подгоняем их к более коротким диапазонам.

1 void loop()
2 {
3   int xValue = analogRead(A0);
4   int yValue = analogRead(A1);
5 
6   xPos = xPos + (map(xValue, 0, 1023, 2, -2));
7   yPos = yPos + (map(yValue, 0, 1023, -2, 2));

Чтобы курсор не убегал за пределы экрана, воспользуемся несколькими операторами 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   TFTscreen.stroke(255,255,255);
17   TFTscreen.point(xPos,yPos);

Наконец, проверяем кнопку. Если она нажата и дает значение HIGH, очищаем экран при помощи функции background().

1 if(digitalRead(erasePin) == HIGH){
2     TFTscreen.background(0,0,0);
3   }
4 
5   delay(33);            
6 }

Весь код полностью – ниже:

 1 /*
 2 Рисование белой точкой-курсором на TFT-экране Arduino
 3 
 4 Этот пример для TFT-экрана Arduino рисует на дисплее белую линию,
 5 беря за основу данные от двух потенциометров. Чтобы очистить экран,
 6 нажмите на кнопку, подсоединенную ко 2-ому цифровому контакту.
 7 
 8 Этот код не защищен авторским правом.
 9 
10 Создан 15 апреля 2013 Скоттом Фитцджеральдом (Scott Fitzgerald).
11 
12 http://www.arduino.cc/en/Tutorial/TFTEtchASketch
13 */
14 
15 #include <TFT.h>  // библиотека TFT-экрана Arduino
16 #include <SPI.h>
17 
18 // Определяем контакты для Arduino Uno:
19 #define cs   10
20 #define dc   9
21 #define rst  8
22 
23 // Определяем контакты для Arduino Leonardo (раскомментируйте, чтобы использовать:
24 // #define cs   7
25 // #define dc   0
26 // #define rst  1
27 
28 TFT TFTscreen = TFT(cs, dc, rst);
29 
30 // Начальная позиция курсора:
31 int xPos = TFTscreen.width() / 2;
32 int yPos = TFTscreen.height() / 2;
33 
34 // Контакт для кнопки, которая будет стирать экран:
35 int erasePin = 2;
36 
37 void setup() {
38   // Объявляем контакт для кнопки входным:
39   pinMode(erasePin, INPUT);
40   // Инициализируем экран:
41   TFTscreen.begin();
42   // Делаем фон черным:
43   TFTscreen.background(0, 0, 0);
44 }
45 
46 void loop() {
47   // Считываем данные с потенциометров, подключенных к 0-ому и 1-ому аналоговым контактам:
48   int xValue = analogRead(A0);
49   int yValue = analogRead(A1);
50 
51   // Подстраиваем диапазоны значений и обновляем позицию точки-курсора:
52   xPos = xPos + (map(xValue, 0, 1023, 2, -2));
53   yPos = yPos + (map(yValue, 0, 1023, -2, 2));
54 
55   // Не позволяем точке-курсору убежать за пределы экрана:
56   if (xPos > 159) {
57     (xPos = 159);
58   }
59 
60   if (xPos < 0) {
61     (xPos = 0);
62   }
63   if (yPos > 127) {
64     (yPos = 127);
65   }
66 
67   if (yPos < 0) {
68     (yPos = 0);
69   }
70 
71   // Рисуем точку-курсор:
72   TFTscreen.stroke(255, 255, 255);
73   TFTscreen.point(xPos, yPos);
74 
75   // Считываем данные с кнопки, подключенной ко 2-ому цифровому контакту.
76   // Если она нажата, очищаем экран:
77   if (digitalRead(erasePin) == HIGH) {
78     TFTscreen.background(0, 0, 0);
79   }
80 
81   delay(33);
82 }

См.также

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