Подключим TFT shield к Arduino Mega (см. рис. 5.2). Для использования библиотеки SWTFT с платой Arduino Mega, необходимо внести изменения в файл SWTFT.cpp (см. рис. 5.3).
Рис. 5.3. Изменения в файле SWTFT.cpp
Теперь загрузим на плату Arduino Mega скетч listing_05_01. Содержимое файла _05_01.ino показано в листинге 5.1. Все константы скетча вынесены в файл defines.h, процедуры получения данных с датчиков – в файл get_data_sensors.ino, вывод данных на экран – в файл display.ino.
Листинг 5.1
// подключение библиотеки DHT
#include "DHT.h"
// подключение библиотеки OneWire
#include <OneWire.h>
// константы
//#define DHTPIN 22 // пин подключения контакта DHT22
//#define DS18B20PIN 23 // пин подключения контакта DS18B20
//#define DHTTYPE DHT11 // датчик DHT 11
//#define INTERVAL_GET_DATA 2000 // интервала измерений, мс
// создание экземпляра объекта SWTFT
SWTFT tft;
// создание экземпляра объекта DHT
DHT dht(DHTPIN,DHTTYPE);
// создание экземпляра объекта OneWire
OneWire ds(DS18B20PIN);
// переменная для интервала измерений
unsigned long millis_int1=0;
int teksensor=0;
// массив для хранения данных датчиков
float datasensors[]={999,999,999,999,999,999,999,999,999,999};
int aktivesensors[]={1,1,1,1,0,0,0,0,0,0};
int ysensors[]={100,100,100,100,100,100,100,100,100,100};
int xsensors[]={60,80,100,120,140,160,180,200,220,240};
int posdata=0;
void setup(void) {
Serial.begin(9600);
Serial.println(F("TFT LCD test"));
ini_display();
// вывод главного экрана
//view_display_clock();
// вывод экрана сенсоров
view_display_sensors();
}
void loop(void) {
// показания с датчиков
if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
teksensor=(teksensor+1)%COUNT_SENSORS;
if(aktivesensors[teksensor]==1) {
float fvar=0;
switch(teksensor) {
case 0: // DHT22
fvar=get_data_humidity();
Serial.print("humidity=");Serial.println(fvar);
break;
case 1: // DS18B20
fvar=get_data_ds18b20();
Serial.print("tds18b20=");Serial.println(fvar);
break;
case 2: // Soil Moisture
fvar=get_data_soilmoisture();
Serial.print("soilmoisture=");Serial.println(fvar);
break;
case 3: // level water
fvar=get_data_levelwater();
Serial.print("levelwater=");Serial.println(fvar);
break;
case 5: // mq-2 propan
fvar=get_data_ppmpropan();
Serial.print("ppmpropan=");Serial.println(fvar);
break;
case 6: // mq-2 methan
fvar=get_data_ppmmethan();
Serial.print("ppmmethan=");Serial.println(fvar);
control_data_limit(5);
break;
case 7: // mq-2 smoke
fvar=get_data_ppmsmoke();
Serial.print("ppmsmoke=");Serial.println(fvar);
control_data_limit(5);
break;
case 8: // mq-7 CO
fvar=get_data_ppmcarbonmonoxide();
Serial.print("ppmcarbonmonoxide=");
Serial.println(fvar);
control_data_limit(6);
break;
default: // другие датчики
break;
}
if(fvar<999) {
set_display_data_sensor(teksensor,
datasensors[teksensor],BLACK);
datasensors[teksensor]=fvar;
set_display_data_sensor(teksensor,
datasensors[teksensor],YELLOW);
}
}
millis_int1=millis();
}
}
// Процедуры вывода данных
// на дисплей
// shield TFT 2.4 240x320
// ************************************************
// инициализация дисплея
void ini_display() {
tft.reset();
uint16_t identifier = tft.readID();
Serial.print(F("LCD driver chip: "));
Serial.println(identifier, HEX);
tft.begin(identifier);
tft.fillScreen(BLACK);
tft.setRotation(0);
Serial.println(F("start!"));
}
// ************************************************
// вывод экрана с показаниями датчиков
void view_display_sensors() {
// очистить экран
tft.fillScreen(BLACK);
// вывод заголовка экрана
tft.setCursor(10, 15);
tft.setTextColor(MAGENTA);
tft.setTextSize(3);
tft.println("Sensors:");
// вывод списка датчиков
tft.setTextColor(YELLOW);
tft.setTextSize(2);
for(int i=0;i<COUNT_SENSORS;i++) {
tft.setCursor(10, xsensors[i]);
tft.print(strS1[i]);
}
// вывод списка значений датчиков
// вывод единиц измерения
tft.setTextColor(YELLOW);
tft.setTextSize(2);
for(int i=0;i<COUNT_SENSORS;i++) {
tft.setCursor(200, xsensors[i]);
tft.print(strS2[i]);
}
// вывод для возврата в главное меню
}
// ************************************************
// вывести текущее значение для датчика
void set_display_data_sensor(int pos,float var,unsigned int color) {
tft.setTextColor(color);
tft.setCursor(100, xsensors[pos]);
tft.print(var);
}
Загружаем скетч на плату Arduino Mega и получаем вывод данных с датчиков на экран TFT 2.4" shield.
Рис. 5.4. Вывод показаний сенсоров на дисплей.
Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке.