Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/TFTEtchaSketch

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


Рисование белой точкой-курсором на 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. }

См.также

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

  1. Arduino - TFT EtchASketch