#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>;
#include <Servo.h>;
Servo servo1;
Servo servo2;
#define SCREEN_WIDTH 128 // pixel ความกว้าง
#define SCREEN_HEIGHT 64 // pixel ความสูง
//Constants
#define DHTPIN 2 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
// กำหนดขาต่อ I2C กับจอ OLED
#define OLED_RESET -1 //ขา reset เป็น -1 ถ้าใช้ร่วมกับขา Arduino reset
Adafruit_SSD1306 OLED(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int chk;
float hum; //Stores humidity value
float temp;
int var = 0; // ตัวแปรสำหรับทดสอบแสดงผล
const unsigned char logo [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xC0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xBF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xA0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF0,
0x03, 0xFF, 0x80, 0x00, 0x00, 0x05, 0xFF, 0xF0, 0x0E, 0xFD, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0xF0,
0x0B, 0xFF, 0x70, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0xD8, 0x00, 0x00, 0x0F, 0xFF, 0xF0,
0x1F, 0xFF, 0xEC, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0xF6, 0x00, 0x00, 0x0F, 0xFF, 0xB0,
0x1B, 0xFF, 0xFA, 0x00, 0x00, 0x0B, 0xFF, 0xA0, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x0B, 0xFF, 0xE0,
0x05, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xE0, 0x06, 0xFF, 0xFE, 0xC0, 0x00, 0x0F, 0xFF, 0x60,
0x03, 0x7F, 0xFF, 0x40, 0x00, 0x0F, 0xFF, 0x40, 0x01, 0xBF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xC0,
0x00, 0xFF, 0xFF, 0xB0, 0x00, 0x0F, 0xFE, 0xC0, 0x00, 0x7F, 0xFF, 0xD0, 0x00, 0x0F, 0xFE, 0x80,
0x00, 0x1B, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x0D, 0xFF, 0xE8, 0x00, 0x05, 0xFD, 0x80,
0x00, 0x07, 0xFF, 0xFC, 0x00, 0x05, 0xFF, 0x00, 0x00, 0x01, 0xBF, 0xF4, 0x00, 0x07, 0xFF, 0x00,
0x00, 0x00, 0xFF, 0xFE, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00, 0x37, 0xFA, 0x00, 0x07, 0xFE, 0x00,
0x00, 0x00, 0x1D, 0xFF, 0x01, 0xFF, 0xF4, 0x00, 0x00, 0x00, 0x06, 0xFD, 0x3F, 0xFF, 0xFC, 0x00,
0x00, 0x00, 0x03, 0xBF, 0xFB, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFB, 0x80,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xD8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xEC,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF6, 0x00, 0x00, 0x00, 0xBF, 0xFF, 0xFF, 0xFF, 0xFE,
0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F,
0x00, 0x00, 0x01, 0x7F, 0xFF, 0xFF, 0xFC, 0x0F, 0x00, 0x00, 0x01, 0x7F, 0xFF, 0xFF, 0xF8, 0x07,
0x00, 0x00, 0x01, 0x7F, 0xFF, 0xFF, 0xF8, 0x07, 0x00, 0x00, 0x01, 0xFF, 0x83, 0xFF, 0xF8, 0x07,
0x00, 0x00, 0x01, 0xFF, 0x01, 0xFF, 0xFC, 0x0A, 0x00, 0x00, 0x00, 0xBE, 0x00, 0xFF, 0x9F, 0xFE,
0x00, 0x00, 0x00, 0xFE, 0x00, 0xFC, 0x0F, 0xF6, 0x1E, 0x0F, 0xFF, 0xFF, 0x01, 0xFC, 0x0F, 0xEC,
0x3B, 0x3F, 0xFE, 0x7F, 0x83, 0xFE, 0x37, 0xD8, 0x6D, 0xEF, 0xFF, 0xBB, 0xFF, 0xFF, 0xFF, 0xB0,
0xDF, 0xBF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFE, 0xE0, 0xBB, 0x7F, 0xFF, 0xEF, 0xBF, 0xFF, 0xD3, 0x80,
0xE6, 0xFF, 0xFF, 0xFB, 0xF7, 0xFC, 0x3E, 0x00, 0x7E, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xF8, 0x00,
0x0F, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFB, 0xFF, 0xFB, 0xFE, 0xC0, 0x00,
0x05, 0xFF, 0xFD, 0xFF, 0xFF, 0xDF, 0x40, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xE0, 0x00,
0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFB, 0x7F, 0xFF, 0x6F, 0xE0, 0x00,
0x01, 0xBF, 0xFF, 0xFD, 0xBF, 0xF6, 0xC0, 0x00, 0x00, 0xEF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0x00,
0x00, 0x3F, 0xFD, 0xE8, 0xDF, 0xB0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x7F, 0xE0, 0x00, 0x00,
0x00, 0x01, 0xFE, 0x78, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00
};
void setup() {
servo1.attach(5); // กำหนดขา 9 ควบคุม Servo ที่ 1
servo2.attach(4);
Serial.begin(9600);
if (!OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // สั่งให้จอ OLED เริ่มทำงานที่ Address 0x3C
Serial.println("SSD1306 allocation failed");
} else {
Serial.println("ArdinoAll OLED Start Work !!!");
}
Serial.begin(9600);
dht.begin();
}
void loop() {
OLED.clearDisplay(); // ลบภาพในหน้าจอทั้งหมด
// กำหนดขนาดตัวอักษร
// แสดงผลข้อความ ALL
//Read data and store it to variables hum and temp
hum = dht.readHumidity();
temp= dht.readTemperature();
//Print temp and humidity values to serial monitor
OLED.drawBitmap(0,0,logo,64,64,1);
OLED.setTextSize(1);
OLED.setTextColor(BLACK, WHITE); //กลับสีข้อความกับพื้นหลัง
OLED.setCursor(60, 0);
OLED.print("Hd: ");
OLED.print(hum);
OLED.print("%");
OLED.setCursor(60, 20);
OLED.print("Temp:");
OLED.print(temp);
if (hum > 80) {
// หมุนเซอร์โวมอเตอร์ตัวที่หนึ่ง ที่ตำแหน่ง +90 องศา
servo1.write(90);
} else {
// หมุนเซอร์โวมอเตอร์ตัวที่หนึ่ง ที่ตำแหน่ง -90 องศา
servo1.write(-90);
}
if (temp > 30) {
// หมุนเซอร์โวมอเตอร์ตัวที่สอง ที่ตำแหน่ง +90 องศา
servo2.write(90);
} else {
// หมุนเซอร์โวมอเตอร์ตัวที่สอง ที่ตำแหน่ง -90 องศา
servo2.write(-90);
}
OLED.display(); // สั่งให้จอแสดงผล
delay(1000);
}