พอดีผมสั่งซื้อ DHT21 / AM2301 โมดูล และ อุปกรณ์ อื่นๆจากทางร้านประจำครับ กำลังหัดทำครับ
*พี่พอจะมีโค้ด ตัวอย่าง หรือเป็นแนวทางให้ผมหน่อยไหมครับ
คือ ผมทำเครื่องควบคุมอุณหภูมิ ครับ ตอนนี้ผมทำให้มันแสดงผมที่จอได้แล้วครับ แต่ติดตรง ทำให้มันตั้งค่าหรือเซ็ตค่าจากสวิตช์ไม่ได้อะครั
//ผมต้องการให้ สวิตช์ ในการตั้งค่า อุณหภูมิ และ ความชื้น เช่น
สวิตช์
ปุ่มที่ 1 เป็นปุ่มตั้งค่า/อุณหภูมิ/กดอีกครั้งหนึ่ง ให้ตั้งค่า ความชื้น/ กดอีกครั้งหนึ่ง ให้บันทึก
ปุ่มที่2 เพิ่ม
ปุ่มที่3 ลด
ปุ่นที่4 cancel
พอจะแนะนำ หรือ มีแนวทางให้ผมไหมครับ
โค้ดที่ผมเขียน
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht;
int led1=8; //สถานะความชื้นทำงาน
int led2=9; //สถานะอุหภูมิทำงาน
int HL=46; //ตัวแปลความชื้นต่ำสุด
int TL=30; //ตัวแปลอุหภูมิต่ำสุด
int HH=46; //ตัวแปลความชื้นสูงสุด
int TH=30; //ตัวแปลอุหภูมิสูงสุด
void setup()
{
lcd.begin();
dht.setup(2); //กำหนดขา INPUT
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(MOL,OUTPUT);
pinMode(MOR,OUTPUT);
lcd.backlight();
lcd.setCursor(3,0); // ไปที่ตัวอักษรที่ 0 แถวที่ 1
lcd.print("Welcome To");
lcd.setCursor(1,1); // ไปที่ตัวอักษรที่ 6 แถวที่ 2
lcd.print("< My Newsoda >");
delay(3000);
lcd.clear();
lcd.setCursor(6,0);
lcd.print("(^_^)");
lcd.setCursor(1,1);
lcd.print("Happy Birthday");
delay(3000);
}
void loop()
{
delay(dht.getMinimumSamplingPeriod());
float temperature = dht.getTemperature(); // ดึงค่าอุณหภูมิ
float humidity = dht.getHumidity(); // ดึงค่าความชื้น
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("<TEMP!> <HUMI!>");
lcd.setCursor(0,1);
lcd.print(" "); //ค่าอุหภูมิจากโมดูล
lcd.print(temperature, 1); //จุดทดสนิย 1 ตำแหน่ง
lcd.print("C");
lcd.print(" "); // ค่าความชื้นจากโมดูล
lcd.print(humidity, 1); //จุดทดสนิย 1 ตำแหน่ง
lcd.print("%");
if(humidity <HL){ //ถ้าความชื้นน้อยกว่า หรือ เท่ากับ...
digitalWrite(led1,HIGH);
}else if(humidity >HH){ //แต่ถ้าความชื้นมากกว่า หรือ เท่ากับ....
digitalWrite(led1,LOW);
delay(100);
}
if(temperature <TL){ //ถ้าอุหภูมิน้อยกว่า หรือ เท่ากับ ....
digitalWrite(led2,HIGH);
}else if(temperature >TH){ //แต่ถ้าอุหภูมิมากกว่า หรือ เท่ากับ ...
digitalWrite(led2,LOW);
delay(100);
}
}
ช่วยหน่อยครับ ผมหาข้อมูลมา 3 วันแระครับ
ขอบคุณครับ
ทดลองเขียนโคดคำสั่ง if ตรวจสอบค่าจากสวิตช์ ตามตัวอย่างนี้ https://www.arduino.cc/en/Tutorial/InputPullupSerial
จากนั้น แนะนำทำตามสเตปนี้ครับ
1. เขียนคำสั่งเป็นฟังก์ชัน เพื่อให้ง่ายในการใช้งาน
2. การบันทีกข้อมูล สามารถบันทึกลงใน eeprom มีตัวอย่างใน Arduino IDE อยู่ด้วยแล้ว
3. คำสั่งอ่านค่าจากสวิตช์ ถ้าสั่งให้วนลูปอ่านค่าจากสวิตช์ โปรแกรมจะไม่สมูทเพราะบางครั้งกดสวิตช์แต่ยังไม่เข้าเงื่อนไขคำสั่งอ่านสวิตช์ ทำให้เหมือนกดได้ไม่ได้บาง แนะนำเขียนโคดให้กระชับ หรือใช้สวิตช์กับคำสั่ง interrupt ลองศึกษาจากตัวอย่างนี้ครับ http://shazsterblog.blogspot.com/2011/11/arduino-interrupt-based-led-with-toggle.html