Arduino:Примеры/Esplora TFT Horizon: различия между версиями
Myagkij (обсуждение | вклад) м (Замена текста — «<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 | <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 | <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 | <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 | <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 | <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 | <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 | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Слежение за горизонтом при помощи Esplora и TFT-экрана Arduino | Слежение за горизонтом при помощи Esplora и TFT-экрана Arduino |
Версия от 12:32, 20 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Слежение за горизонтом при помощи 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);
}