#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
// กำหนดออบเจ็กต์ของจอ LCD ขนาด 20x4
LiquidCrystal_I2C lcd(0x27, 20, 4); // ที่อยู่ 0x27 (บางครั้งเป็น 0x3F)
// กำหนดขาที่เชื่อมต่อ DHT22
#define DHTPIN 13 // ขาที่เชื่อมต่อกับ DHT22
#define DHTTYPE DHT22 // ใช้เซ็นเซอร์ DHT22
// สร้างออบเจ็กต์สำหรับ DHT
DHT dht(DHTPIN, DHTTYPE);
int ledPins[] = {15, 2, 4, 16, 17, 5, 18, 19};
int numLeds = sizeof(ledPins) / sizeof(ledPins[0]); // จำนวน LED ที่ใช้
void setup() {
// ตั้งค่าขา LED ทั้งหมดให้เป็นขาออก (OUTPUT)
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // ปิด LED ทั้งหมดในตอนเริ่มต้น
}
// เริ่มต้นการทำงานของจอ LCD
lcd.init();
lcd.backlight(); // เปิดแสงไฟหลังจอ LCD
// เริ่มต้นการทำงานของเซ็นเซอร์ DHT22
dht.begin();
}
void loop() {
// แสดงข้อมูลอุณหภูมิและความชื้นบน LCD
displayTempAndHumidity();
// เรียกใช้ฟังก์ชันแต่ละรูปแบบการทำงาน
pattern1(); // รูปแบบ 1: วิ่งจากซ้ายไปขวา
pattern2(); // รูปแบบ 2: วิ่งจากขวากลับซ้าย
pattern3(); // รูปแบบ 3: วิ่งสวนกันจากข้างนอกเข้าหากัน
pattern4(); // รูปแบบ 4: วิ่งจากกลางออกไปด้านข้าง
pattern5(); // รูปแบบ 5: วิ่งสลับไปสลับมา
pattern6(); // รูปแบบ 6: ติดทุกดวงแล้วดับทุกดวง
delay(2000); // หน่วงเวลา 2 วินาทีก่อนเริ่มลูปใหม่
}
// ฟังก์ชันแสดงข้อมูลอุณหภูมิและความชื้นบน LCD
void displayTempAndHumidity() {
// อ่านค่าอุณหภูมิและความชื้นจากเซ็นเซอร์ DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// ตรวจสอบการอ่านค่าจากเซ็นเซอร์ว่าถูกต้องหรือไม่
if (isnan(humidity) || isnan(temperature)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Error reading DHT!");
} else {
// แสดงอุณหภูมิและความชื้นบนจอ LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print(" %");
}
}
// ฟังก์ชันแสดงข้อความบน LCD สำหรับรูปแบบการทำงาน
void displayPattern(const char* patternName) {
lcd.clear(); // ล้างจอ LCD
lcd.setCursor(0, 0); // ตั้งตำแหน่ง cursor ไปที่แถวที่ 1, คอลัมน์ที่ 1
lcd.print("Pattern:"); // แสดงคำว่า "Pattern:"
lcd.setCursor(0, 1); // ย้าย cursor ไปแถวที่ 2
lcd.print(patternName); // แสดงชื่อรูปแบบที่กำลังทำงาน
}
// รูปแบบที่ 1: วิ่งจากซ้ายไปขวา
void pattern1() {
displayPattern("Left to Right");
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], HIGH); // เปิด LED ที่ตำแหน่ง i
delay(200);
digitalWrite(ledPins[i], LOW); // ปิด LED ที่ตำแหน่ง i
}
}
// รูปแบบที่ 2: วิ่งจากขวากลับซ้าย
void pattern2() {
displayPattern("Right to Left");
for (int i = numLeds - 1; i >= 0; i--) {
digitalWrite(ledPins[i], HIGH); // เปิด LED ที่ตำแหน่ง i
delay(200);
digitalWrite(ledPins[i], LOW); // ปิด LED ที่ตำแหน่ง i
}
}
// รูปแบบที่ 3: วิ่งสวนกันจากข้างนอกเข้าหากัน
void pattern3() {
displayPattern("Outside In");
for (int i = 0; i < numLeds / 2; i++) {
digitalWrite(ledPins[i], HIGH); // เปิด LED จากซ้าย
digitalWrite(ledPins[numLeds - 1 - i], HIGH); // เปิด LED จากขวา
delay(200);
digitalWrite(ledPins[i], LOW); // ปิด LED จากซ้าย
digitalWrite(ledPins[numLeds - 1 - i], LOW); // ปิด LED จากขวา
}
}
// รูปแบบที่ 4: วิ่งจากกลางออกไปด้านข้าง
void pattern4() {
displayPattern("Center Out");
int middleIndex = numLeds / 2; // ตำแหน่งกลางของอาเรย์
for (int i = 0; i < middleIndex; i++) {
digitalWrite(ledPins[middleIndex - 1 - i], HIGH); // เปิด LED จากกลางไปทางซ้าย
digitalWrite(ledPins[middleIndex + i], HIGH); // เปิด LED จากกลางไปทางขวา
delay(200);
digitalWrite(ledPins[middleIndex - 1 - i], LOW); // ปิด LED จากกลางไปทางซ้าย
digitalWrite(ledPins[middleIndex + i], LOW); // ปิด LED จากกลางไปทางขวา
}
}
// รูปแบบที่ 5: วิ่งสลับไปสลับมา
void pattern5() {
displayPattern("Alternating");
for (int i = 0; i < numLeds; i++) {
if (i % 2 == 0) {
digitalWrite(ledPins[i], HIGH); // เปิด LED ที่ตำแหน่ง i
} else {
digitalWrite(ledPins[numLeds - 1 - i], HIGH); // เปิด LED จากขาตรงข้าม
}
delay(200);
digitalWrite(ledPins[i], LOW); // ปิด LED ที่ตำแหน่ง i
digitalWrite(ledPins[numLeds - 1 - i], LOW); // ปิด LED จากขาตรงข้าม
}
}
// รูปแบบที่ 6: ติดทุกดวงแล้วดับทุกดวง
void pattern6() {
displayPattern("All On then Off");
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], HIGH); // เปิด LED ทุกดวง
}
delay(500);
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW); // ปิด LED ทุกดวง
}
delay(500);
}
/*การเพิ่มเซ็นเซอร์ DHT22 ที่ขา 13 เพื่อแสดงอุณหภูมิและความชื้นบนจอ LCD 2004 I2C สามารถทำได้โดยการเพิ่มไลบรารีสำหรับเซ็นเซอร์ DHT22 และรวมการแสดงผลค่าบนจอ LCD
ขั้นตอนที่ 1: ติดตั้งไลบรารี DHT
คุณจะต้องติดตั้งไลบรารีสำหรับเซ็นเซอร์ DHT ก่อน โดยทำตามขั้นตอนนี้:
เปิด Arduino IDE
ไปที่เมนู Sketch -> Include Library -> Manage Libraries...
ค้นหา "DHT sensor library" และติดตั้งไลบรารีจากผู้พัฒนา Adafruit
ขั้นตอนที่ 2: เพิ่มโค้ด DHT22 และการแสดงผลอุณหภูมิและความชื้นบน LCD
อธิบายเพิ่มเติม:
DHT22:
#include "DHT.h" และ DHT dht(DHTPIN, DHTTYPE); สร้างออบเจ็กต์สำหรับการใช้งานเซ็นเซอร์ DHT22
ฟังก์ชัน dht.readTemperature() และ dht.readHumidity() ใช้สำหรับอ่านค่าอุณหภูมิและความชื้นจากเซ็นเซอร์ DHT22
ค่าที่อ่านได้จะแสดงบนจอ
*/