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

Arduino:Примеры/Esplora TFT Horizon

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

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

Контакты:

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


Слежение за горизонтом при помощи Esplora и TFT-экрана[1]

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

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

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

Цепь

Esplora GLCDHorizon.png

Подсоедините TFT-экран к сокету на Esplora – так, чтобы надпись «SD card» смотрела вверх.

Код

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

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

Далее создаем четыре переменные: для начальной и конечной точек линии (в текущий момент), а также для начальной и конечной точек линии (каким они были во время предыдущего прохода через главный цикл). Эти значения будут использоваться, чтобы стирать старую линию, когда ее место займет новая.

  1. int yStart = EsploraTFT.height()/2;
  2. int yEnd = EsploraTFT.height()/2;
  3.  
  4. int oldEndY;
  5. int oldStartY;

В секции setup() инициализируем дисплей и очищаем фон экрана.

  1. void setup() {
  2.   EsploraTFT.begin();
  3.   EsploraTFT.background(0,0,0);
  4. }

В секции loop() считываем значение от X-оси акселерометра. Если держать Esplora прямо перед собой, перпендикулярно земле, эта ось будет параллельна горизонту. Далее преобразовываем полученное значение, чтобы значение начальной точки было между «0» и высотой экрана. Чтобы найти конечную точку, это значение нужно инвертировать.

  1. void loop()
  2. {
  3.   int tilt = Esplora.readAccelerometer(X_AXIS);
  4.  
  5.   yStart = map(tilt,-100,100,EsploraTFT.height(),0);
  6.   yEnd = map(tilt,-100,100,0,EsploraTFT.height());

Сравниваем текущие положения начальной и конечной точек с теми, что были во время предыдущего прохода через главный цикл. Если они отличаются, стираем старую линию. Затем на основе преобразованных данных рисуем новую линию.

  1. if (oldStartY != yStart || oldEndY != yEnd) {
  2.     EsploraTFT.stroke(0,0,0);
  3.     EsploraTFT.line(0, oldStartY, EsploraTFT.width(), oldEndY);
  4.   }
  5.  
  6.   EsploraTFT.stroke(255,0,255);
  7.   EsploraTFT.line(0,yStart,EsploraTFT.width(),yEnd);

Сохраняем текущие начальную и конечную точки в переменные oldEndY и oldstartY, т.е. делаем их «старыми» – для сравнения при следующем проходе через цикл.

  1. oldStartY= yStart;
  2.   oldEndY = yEnd;
  3.   delay(10);            
  4. }

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

  1. /*
  2. Слежение за горизонтом при помощи Esplora и TFT-экрана Arduino
  3.  
  4. Этот пример использует плату Esplora и TFT-экран Arduino.
  5. Он рисует на экране линию, положение которой меняется
  6. в зависимости от положения Esplora относительно уровня земли.
  7.  
  8. Этот код не защищен авторским правом.
  9.  
  10. Создан 15 апреля 2013 Скоттом Фитцджеральдом (Scott Fitzgerald).
  11.  
  12. http://www.arduino.cc/en/Tutorial/EsploraTFTHorizon
  13. */
  14.  
  15. #include <Esplora.h>
  16. #include <TFT.h>            // библиотека TFT-экрана Arduino
  17. #include <SPI.h>
  18.  
  19. // Горизонтальные позиции для стартовой и конечной точек:
  20. int yStart = EsploraTFT.height() / 2;
  21. int yEnd = EsploraTFT.height() / 2;
  22.  
  23. // Предыдущие горизонтальные позиции для стартовой и конечной точек:
  24. int oldEndY;
  25. int oldStartY;
  26.  
  27. void setup() {
  28.   // Инициализируем дисплей:
  29.   EsploraTFT.begin();
  30.   // Делаем фон черным:
  31.   EsploraTFT.background(0, 0, 0);
  32. }
  33.  
  34. void loop() {
  35.   // Считываем данные X-оси акселерометра:
  36.   int tilt = Esplora.readAccelerometer(X_AXIS);
  37.  
  38.   // Максимальное значение от акселерометра составляет «100»
  39.   // (при наклоне влево) и «-100» (при наклоне вправо).
  40.   // Подгоняем эти значения под высоту экрана:
  41.   yStart = map(tilt, -100, 100, EsploraTFT.height(), 0);
  42.   yEnd = map(tilt, -100, 100, 0, EsploraTFT.height());
  43.  
  44.   // Если в прошлый раз эти значения были другими, стираем предыдущую линию:
  45.   if (oldStartY != yStart || oldEndY != yEnd) {
  46.     EsploraTFT.stroke(0, 0, 0);
  47.     EsploraTFT.line(0, oldStartY, EsploraTFT.width(), oldEndY);
  48.   }
  49.  
  50.   // Рисуем линию фиолетового цвета:
  51.   EsploraTFT.stroke(255, 0, 255);
  52.   EsploraTFT.line(0, yStart, EsploraTFT.width(), yEnd);
  53.  
  54.   // Сохраняем текущие начальную и конечную точки для сравнения при следующем проходе через цикл:
  55.   oldStartY = yStart;
  56.   oldEndY = yEnd;
  57.   delay(10);
  58. }

См.также

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

  1. Arduino - Esplora TFT Horizon