#include <Adafruit_GFX.h> // 導入函式庫
#include <SPI.h> // 導入顯示的函式庫
#include <Adafruit_ILI9341.h> // 導入ILI9341函式庫
#include <Arduino.h> // 導入Arduino基本函式庫
#include <Adafruit_FT6206.h> // 導入FT6206觸控顯示器的函式庫
#include <DHT.h> //導入DHT函式庫
#define DHTPIN 5 //定義dht22腳位
#define DHTTYPE DHT22 //定義dht22傳感器型號
DHT dht(DHTPIN, DHTTYPE); //設定傳感器的腳位及型號
Adafruit_FT6206 ctp = Adafruit_FT6206(); //FT6206 觸摸屏控制器的數值丟給一個新宣告的物件
#define TFT_DC 2 //定義TFT腳位
#define TFT_CS 15 //定義TFT腳位
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); //設定tft的腳位,將此函式的運行值傳給新定義為tft的物件
void setup(void) {
//while (!Serial); // used for leonardo debugging
Serial.begin(115200); //Serial函式初始設定
Serial.println(F("Cap Touch Paint!")); //使用Serial輸出"Cap Touch Paint!"
tft.begin(); //tft初始設定
if (! ctp.begin(40)) {
// 40 是靈敏度閾值,這個值可以根據具體應用需求進行調整
//如果ctp.begin的初始值不等於40就輸出錯誤訊息
Serial.println("Couldn't start FT6206 touchscreen controller");
while (1); //如果初始化失敗,程式將進入這個無限迴圈,避免後續的代碼執行
}
//若ctp順利運行則輸出"Capacitive touchscreen started"
Serial.println("Capacitive touchscreen started");
//填滿黑色
tft.fillScreen(ILI9341_BLACK);
//填滿螢幕的座標
tft.setCursor(80,15);
//文字的顏色
tft.setTextColor(0xFFFF);
//文字的大小
tft.setTextSize(4);
//輸出學號
tft.print("A120E101");
//輸出的座標位置
tft.setCursor(10,200);
//輸出學號的顏色
tft.setTextColor(0xFFFF);
//輸出學號的文字大小
tft.setTextSize(4);
//輸出temperature
tft.print("TEMP: ");
//輸出的文字座標
tft.setCursor(10,230);
//文字的顏色
tft.setTextColor(0xFFFF);
//文字的大小
tft.setTextSize(3);
//輸出humidity
tft.print("HUMI: ");
}
void loop() {
delay(10);
// Wait for a touch
float temperature = dht.readTemperature(); /*宣告DHT22的溫度數值丟給一個新宣告為temperature的變數*/
float humidity = dht.readHumidity(); /*宣告DHT22的溼度數值丟給一個新宣告為humidity的變數*/
// 獲取觸摸點的數據
TS_Point p = ctp.getPoint();
// 因為屏幕是橫的,所以要調整坐標系
// FT6206 是倒置的,所以需要進行轉換
p.x = map(p.x, 0, 240, 240, 0);
p.y = map(p.y, 0, 320, 320, 0);
// 輸出觸摸點的坐標
Serial.print("("); Serial.print(p.x);
Serial.print(", "); Serial.print(p.y);
Serial.println(")");
if(temperature>40) /*temp是DHT22的溫濕度數值*/
{
tft.fillRect(60,50,110,110,0xF800); /*以色號(0xF800)填滿正方形*/
}
else
{
tft.fillRect(60,50,110,110,0x07E0); /*以色號(0x07E0)填滿正方形*/
}
tft.fillRect(120,200,200,250,ILI9341_BLACK);
/*以黑色從填滿正方形*/
/*120:矩形左上角的 x 坐標。
200:矩形左上角的 y 坐標。
200:矩形的寬度
250:矩形的高度*/
tft.setCursor(120,200);
/*設定座標
120:矩形左上角的 x 坐標。
200:矩形左上角的 y 坐標。*/
tft.setTextColor(0xFFE0);//文字的顏色
tft.setTextSize(3);//文字的大小
tft.print(temperature);//輸出temperature
tft.setCursor(120,230);
/*設定座標
120:輸出文字的 x 坐標。
230:輸出文字的 y 坐標。*/
tft.setTextColor(0xFFE0);//文字的顏色
tft.setTextSize(3);//文字的大小
tft.print(humidity);//輸出humidity
if (! ctp.touched()) { //檢查是否有觸控。如果沒有觸摸,函數會立即傳回,不執行後續的程式碼。
return;
}
}