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

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Рисование на TFT-экране Esplora [1]

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

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

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

Цепь

Esplora GLCDEtchASketch.png

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

Код

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

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

Задаем координаты курсора (X и Y). В данном примере начальные координаты – это центр экрана. Они определяются путем деления высоты и ширины экрана надвое.

int xPos = EsploraTFT.width()/2;
int yPos = EsploraTFT.height()/2;

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

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

Считываем значения джойстика и приспосабливаем их к менее широкому диапазону. Возможно, ваш джойстик, будучи в центральной позиции, не будет давать значение «0». Кроме того, если мы хотим, чтобы курсор двигался только при намеренном движении джойстика, нам нужно воспользоваться оператором if – с его помощью мы будем проверять позицию в пределах определенного порога (в данном случае от «-10» до «10»). То есть если считанное значение будет в рамках этого диапазона, курсор останется на месте. Однако если значение выйдет за его пределы, то курсор двинется в соответствующем направлении.

void loop()
{
  int xAxis = Esplora.readJoystickX(); 
  int yAxis = Esplora.readJoystickY(); 

  if (xAxis<10 && xAxis>-10){
    xPos=xPos;
  }
  else{
    xPos = xPos + (map(xAxis, -512, 512, 2, -2));
  }
  if (yAxis<10 && yAxis>-10){
    yAxis=yAxis;
  }
  else{
    yPos = yPos + (map(yAxis, -512, 512, -2, 2));
  }

Если мы хотим, чтобы курсор не убегал за пределы экрана, перед тем, как рисовать линию, нам надо воспользоваться несколькими операторами if.

if(xPos > 159){
    (xPos = 159);
  }

  if(xPos < 0){
    (xPos = 0);
  }
  if(yPos > 127){
    (yPos = 127);
  }

  if(yPos < 0){
    (yPos = 0);
  }

  EsploraTFT.stroke(255,255,255);
  EsploraTFT.point(xPos,yPos);

Наконец, проверяем состояние акселерометра. Если значения от осей X и Y вышли за пределы заданного вами диапазона, очищаем экран при помощи функции background().

if(abs(Esplora.readAccelerometer(X_AXIS))>200 || abs(Esplora.readAccelerometer(Y_AXIS))>200){
    EsploraTFT.background(0,0,0);
  }

  delay(33);            
}

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

/* 
Рисование на TFT-экране Esplora

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

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

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

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

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

// Начальная позиция курсора:
int xPos = EsploraTFT.width() / 2;
int yPos = EsploraTFT.height() / 2;

void setup() {
  // Инициализируем дисплей:
  EsploraTFT.begin();

  // Очищаем фон:
  EsploraTFT.background(0, 0, 0);
}
void loop() {

  int xAxis = Esplora.readJoystickX();    // считываем значение от X-оси джойстика
  int yAxis = Esplora.readJoystickY();    // считываем значение от Y-оси джойстика

  // Обновляем позицию линии в зависимости от позиции джойстика:
  if (xAxis < 10 && xAxis > -10) {
    xPos = xPos;
  } else {
    xPos = xPos + (map(xAxis, -512, 512, 2, -2));
  }
  if (yAxis < 10 && yAxis > -10) {
    yAxis = yAxis;
  } else {
    yPos = yPos + (map(yAxis, -512, 512, -2, 2));
  }

  // Делаем так, чтобы курсор не убежал за край экрана:
  if (xPos > 159) {
    (xPos = 159);
  }

  if (xPos < 0) {
    (xPos = 0);
  }
  if (yPos > 127) {
    (yPos = 127);
  }

  if (yPos < 0) {
    (yPos = 0);
  }

  // Рисуем точку:
  EsploraTFT.stroke(255, 255, 255);
  EsploraTFT.point(xPos, yPos);

  // Обращаемся к акселерометру и очищаем экран,
  // если данные от акселерометра говорят, что Esplora потрясли:
  if (abs(Esplora.readAccelerometer(X_AXIS)) > 200 || abs(Esplora.readAccelerometer(Y_AXIS)) > 200) {
    EsploraTFT.background(0, 0, 0);
  }

  delay(33);
}

См.также

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