Arduino:Примеры/Esplora TFT Horizon: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">»)
 
Нет описания правки
Строка 22: Строка 22:
Чтобы использовать экран, вначале нужно подключить библиотеки '''SPI''' и '''TFT'''. Также не забывайте о библиотеке '''Esplora'''.
Чтобы использовать экран, вначале нужно подключить библиотеки '''SPI''' и '''TFT'''. Также не забывайте о библиотеке '''Esplora'''.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
#include <Esplora.h>
#include <Esplora.h>
#include <TFT.h>
#include <TFT.h>
Строка 30: Строка 30:
Далее создаем четыре переменные: для начальной и конечной точек линии (в текущий момент), а также для начальной и конечной точек линии (каким они были во время предыдущего прохода через главный цикл). Эти значения будут использоваться, чтобы стирать старую линию, когда ее место займет новая.
Далее создаем четыре переменные: для начальной и конечной точек линии (в текущий момент), а также для начальной и конечной точек линии (каким они были во время предыдущего прохода через главный цикл). Эти значения будут использоваться, чтобы стирать старую линию, когда ее место займет новая.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
int yStart = EsploraTFT.height()/2;
int yStart = EsploraTFT.height()/2;
int yEnd = EsploraTFT.height()/2;
int yEnd = EsploraTFT.height()/2;
Строка 40: Строка 40:
В секции setup() инициализируем дисплей и очищаем фон экрана.  
В секции setup() инициализируем дисплей и очищаем фон экрана.  


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
void setup() {
void setup() {
   EsploraTFT.begin();
   EsploraTFT.begin();
Строка 49: Строка 49:
В секции loop() считываем значение от '''X-оси''' акселерометра. Если держать '''Esplora''' прямо перед собой, перпендикулярно земле, эта ось будет параллельна горизонту. Далее преобразовываем полученное значение, чтобы значение начальной точки было между '''«0»''' и высотой экрана. Чтобы найти конечную точку, это значение нужно инвертировать.
В секции loop() считываем значение от '''X-оси''' акселерометра. Если держать '''Esplora''' прямо перед собой, перпендикулярно земле, эта ось будет параллельна горизонту. Далее преобразовываем полученное значение, чтобы значение начальной точки было между '''«0»''' и высотой экрана. Чтобы найти конечную точку, это значение нужно инвертировать.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
void loop()
void loop()
{
{
Строка 60: Строка 60:
Сравниваем текущие положения начальной и конечной точек с теми, что были во время предыдущего прохода через главный цикл. Если они отличаются, стираем старую линию. Затем на основе преобразованных данных рисуем новую линию.
Сравниваем текущие положения начальной и конечной точек с теми, что были во время предыдущего прохода через главный цикл. Если они отличаются, стираем старую линию. Затем на основе преобразованных данных рисуем новую линию.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
if (oldStartY != yStart || oldEndY != yEnd) {
if (oldStartY != yStart || oldEndY != yEnd) {
     EsploraTFT.stroke(0,0,0);
     EsploraTFT.stroke(0,0,0);
Строка 72: Строка 72:
Сохраняем текущие начальную и конечную точки в переменные '''oldEndY''' и '''oldstartY''', т.е. делаем их «старыми» – для сравнения при следующем проходе через цикл.
Сохраняем текущие начальную и конечную точки в переменные '''oldEndY''' и '''oldstartY''', т.е. делаем их «старыми» – для сравнения при следующем проходе через цикл.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
oldStartY= yStart;
oldStartY= yStart;
   oldEndY = yEnd;
   oldEndY = yEnd;
Строка 81: Строка 81:
Весь код полностью – ниже:
Весь код полностью – ниже:


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
/*
/*
Слежение за горизонтом при помощи Esplora и TFT-экрана Arduino
Слежение за горизонтом при помощи Esplora и TFT-экрана Arduino

Версия от 12:32, 20 мая 2023

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


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

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

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

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

Цепь

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

Код

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

#include <Esplora.h>
#include <TFT.h>
#include <SPI.h>

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

int yStart = EsploraTFT.height()/2;
int yEnd = EsploraTFT.height()/2;

int oldEndY;
int oldStartY;

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

void setup() {
  EsploraTFT.begin();
  EsploraTFT.background(0,0,0); 
}

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

void loop()
{
  int tilt = Esplora.readAccelerometer(X_AXIS);

  yStart = map(tilt,-100,100,EsploraTFT.height(),0);
  yEnd = map(tilt,-100,100,0,EsploraTFT.height());

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

if (oldStartY != yStart || oldEndY != yEnd) {
    EsploraTFT.stroke(0,0,0);
    EsploraTFT.line(0, oldStartY, EsploraTFT.width(), oldEndY);
  }

  EsploraTFT.stroke(255,0,255);
  EsploraTFT.line(0,yStart,EsploraTFT.width(),yEnd);

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

oldStartY= yStart;
  oldEndY = yEnd;
  delay(10);            
}

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

/*
Слежение за горизонтом при помощи Esplora и TFT-экрана Arduino

Этот пример использует плату Esplora и TFT-экран Arduino.
Он рисует на экране линию, положение которой меняется
в зависимости от положения Esplora относительно уровня земли. 

Этот код не защищен авторским правом. 

Создан 15 апреля 2013 Скоттом Фитцджеральдом (Scott Fitzgerald).

http://www.arduino.cc/en/Tutorial/EsploraTFTHorizon
*/

#include <Esplora.h>
#include <TFT.h>            // библиотека TFT-экрана Arduino
#include <SPI.h>

// Горизонтальные позиции для стартовой и конечной точек:
int yStart = EsploraTFT.height() / 2;
int yEnd = EsploraTFT.height() / 2;

// Предыдущие горизонтальные позиции для стартовой и конечной точек:
int oldEndY;
int oldStartY;

void setup() {
  // Инициализируем дисплей:
  EsploraTFT.begin();
  // Делаем фон черным:
  EsploraTFT.background(0, 0, 0);
}

void loop() {
  // Считываем данные X-оси акселерометра:
  int tilt = Esplora.readAccelerometer(X_AXIS);

  // Максимальное значение от акселерометра составляет «100»
  // (при наклоне влево) и «-100» (при наклоне вправо).
  // Подгоняем эти значения под высоту экрана:
  yStart = map(tilt, -100, 100, EsploraTFT.height(), 0);
  yEnd = map(tilt, -100, 100, 0, EsploraTFT.height());

  // Если в прошлый раз эти значения были другими, стираем предыдущую линию:
  if (oldStartY != yStart || oldEndY != yEnd) {
    EsploraTFT.stroke(0, 0, 0);
    EsploraTFT.line(0, oldStartY, EsploraTFT.width(), oldEndY);
  }

  // Рисуем линию фиолетового цвета:
  EsploraTFT.stroke(255, 0, 255);
  EsploraTFT.line(0, yStart, EsploraTFT.width(), yEnd);

  // Сохраняем текущие начальную и конечную точки для сравнения при следующем проходе через цикл:
  oldStartY = yStart;
  oldEndY = yEnd;
  delay(10);
}

См.также

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