● 5.2. Вывод показаний датчиков на TFT 2.4" Shield 240x320 для Arduino MEGA

Опубликовано: 23.01.2018

Подключим 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 по ссылке.

Главное меню

Каталог

Полезные ссылки

Цена
от
до