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

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

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

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

Контакты:

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


Рисование на 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. }

См.также

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

  1. Arduino - Esplora TFT EtchASketch