Posted by : Unknown วันอาทิตย์ที่ 10 สิงหาคม พ.ศ. 2557

บอกเลยว่าคลำอยู่หลายชั่วโมง กว่าจะทำให้ มันแสดงผลได้ ....ตอนแรกพยายามพ่วง RTC แต่ทดลองแล้วปรากฎว่า ไม่สามารถตั้งเวลาได้เลยเอาออกก่อน .... 

 

ข้อสังเกตุของงานชิ้นนี้คือ ตัวจอ TFT 1.8 SPI มีลักษณะความแตกต่างจากจอที่ผลิตจาก Arduino หรือ Sparkfun เช่นความละเอียด , การเชื่อมต่อ, ไฟเลี้ยงจอ,รวมไปถึง Liblary ที่เอามาใช้ .. ซึ่งทดลองใช้หลายตัว จนมาจบที่ TFT.h ของ arduino เอง ซึ่งตอนแรกลองใช้ของ adafruit แล้วไม่เวิร์ก แต่ TFT.h ของ arduino มีพื้นฐานไส้ในเหมมือนกันกับของ adafruit ทำให้ใช้คำสั่งลักษณะเดียวกันได้ 

หน้าตาจอ TFT 1.8 SPI จอมวุ่น (ขนาด 1.8 ตัวบน)

การต่อสาย

 แนะนำการซื้อ TFT ให้ดู chip บนบอร์ดว่าใช้ตัวไหน เวลาเรา search หา Liblary จะได้หาถูกตัว

code

#define sclk 13
#define mosi 11
#define cs 10
#define dc 9
#define rst 8
#include <TFT.h>
#include <SPI.h>
#include <stdio.h>
#include <dht.h>
#define DHT11_PIN 4 // DHT11 data pin is connected to Arduino pin.

dht DHT;

Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);
//Black theme
#define COLOR1 ST7735_WHITE
#define COLOR2 ST7735_BLACK
//White theme
//#define COLOR1 ST7735_BLACK
//#define COLOR2 ST7735_WHITE
int text_color_humidex;
float humidity, temperature,humidex;
String message;
void setup(void) {
Serial.begin(9600);
tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
tft.fillScreen(COLOR2);
}
void loop() {
// get data from DHT22
DHT.read11(DHT11_PIN);
humidity = (DHT.humidity);
temperature = (DHT.temperature);
//humidex is calculated
humidex = calculate_humidex (temperature, humidity);
// Table
tft.drawRect(0, 0, 128, 160, COLOR1); // ตีตารางขอบรอบด้าน
tft.drawLine(0, 50, 128, 50, COLOR1); // ขีดเส้นคั่น
tft.drawLine(0, 100, 128, 100, COLOR1); //ขีดเส้นคั่น
// data is outputed
temperature_to_lcd (temperature, 4);
humidity_to_lcd (humidity, 55);
humidex_to_lcd (humidex, 105);
}
// outputs temperature to LCD
void temperature_to_lcd (float temperature, unsigned char text_position )
{
int text_color;
tft.setCursor(4,text_position);
tft.setTextColor(COLOR1,COLOR2);
tft.setTextSize(1);
tft.print("Temperature:");
tft.setTextSize(3);
if (temperature>0) {
text_color=ST7735_RED;
}
else {
text_color=ST7735_BLUE;
}
tft.setCursor(1,text_position+20);
fix_number_position(temperature);
tft.setTextColor(text_color,COLOR2);
tft.print(temperature,1);
tft.setCursor(108,text_position+20);
tft.print("C");
tft.drawChar(90,text_position+20, 247, text_color, COLOR2, 2); //degree symbol
}
//outputs humidity to LCD
void humidity_to_lcd (float humidity, unsigned char text_position )
{
tft.setTextColor(COLOR1,COLOR2);
tft.setCursor(4,text_position);
tft.setTextSize(1);
tft.println("Humidity:");
tft.setTextSize(3);
tft.setCursor(1,text_position+20);
fix_number_position(humidity);
tft.print(humidity,1);
tft.print(" %");
}
//outputs Humidex to LCD
void humidex_to_lcd (float humidex, unsigned char text_position )
{
tft.setCursor(4,text_position);
tft.setTextSize(1);
tft.println("Humidex:");
tft.setTextSize(3);
tft.setCursor(1,text_position+17);
if ((humidex >= 21 )&&(temperature < 44)) {
fix_number_position(humidex);
get_humidex_color_warning_message(humidex);
tft.setTextColor(text_color_humidex,COLOR2);
tft.print(humidex,1);
tft.setCursor(108,text_position+17);
tft.print("C");
tft.drawChar(90,text_position+17, 247, text_color_humidex, COLOR2, 2); //degree symbol
tft.setCursor(3,text_position+43);
tft.setTextSize(1);
tft.print(message);
}
else {
tft.print(" --.-");
tft.setCursor(108,text_position+17);
tft.print("C");
tft.drawChar(90,text_position+17, 247, COLOR1, COLOR2, 2); //degree symbol
tft.setCursor(1,text_position+43);
tft.setTextSize(1);
tft.println(" ");
};
}
// aligs number to constant position
void fix_number_position(float number)
{
if ((number >= -40)&&(number < -9.9))
{
;
}
if ((number >= -9.9)&&(number < 0.0))
{
tft.print(" ");
}
if ((number >= 0.0 )&&(number < 9.9))
{
tft.print(" ");
}
if ((number >= 9.9 )&&(number < 99.9))
{
tft.print(" ");
}
if ((number >= 99.9 )&&(number < 151))
{
tft.print("");
}
}
//function to calculete Humidex
float calculate_humidex(float temperature,float humidity) {
float e;
e = (6.112 * pow(10,(7.5 * temperature/(237.7 + temperature))) * humidity/100); //vapor pressure
float humidex = temperature + 0.55555555 * (e - 10.0); //humidex
return humidex;
}
// Setting text color and message based on Humidex value
void get_humidex_color_warning_message(float humidex)
{
if ((humidex >= 21 )&&(humidex < 27))
{
text_color_humidex=tft.Color565(0, 137, 0);
message= "No discomfort ";
} // dark green
if ((humidex >= 27 )&&(humidex < 35))
{
text_color_humidex=tft.Color565(76, 255, 0); // light green
message= "Some discomfort ";
}
if ((humidex >= 35 )&&(humidex < 40))
{
text_color_humidex=tft.Color565(255, 255, 0);
message= "Great discomfort ";
} // yellow
if ((humidex >= 40 )&&(humidex < 46))
{
text_color_humidex=tft.Color565(255, 140, 0);
message= "Health risk ";
} //light orange
if ((humidex >= 46 )&&(humidex < 54))
{
text_color_humidex=tft.Color565(221, 128, 0);
message= "Great health risk ";
} //dark orange
if ((humidex >= 54 ))
{
text_color_humidex=tft.Color565(255, 0, 0);
message= "Heat stroke danger ";
} // red
}

 

My English is not pretty good pls. forgive for all miss communicated.

Project Reference ,  many thanks for awesome idea : เว็บอ้างอิงโปรเจ็กนี้

temperature-and-humidityhumidex-meter

Mini-Arduino-enviroment-monitor

simple-indoor-climate-monitoring 

อะไรคือ Humidex เพิ่งเคยได้ยินเหมือนกัน wiki/Humidex

อุปกรณ์ที่ใช้ 

  1.DHT11 ข้อมูลอยู่ที่นี่ htDHTLib

2.TFT LCD ขนาด 1.8" ใช้ตามรูปเลย 

วิธีการต่อ TFT_LCD_LCM_SPI_Interface#Pins 

 เพิ่มเติม eds-tft-lcd-lcm-spi-interface-variable1-8 

 เริ่มใช้Arduino TFT screen Guide TFT




 

Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © arduino Thai for fun - Skyblue - Powered by Blogger - Designed by Johanes Djogan -