Code
#include <SoftwareSerial.h> // การอ่านไฟล์จากไดเร็กทอรี หรือโฟลเดอร์ที่กำหนดไว้
#include <DHT11.h>
//=============================================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2); //ฟังก์ชั่นของ lcd กำหนดให้ ตัวอักษรที่16 แถวที่2
SoftwareSerial ArduinoSerial(3, 2); // RX, TX // ฟังก์ชั่นพิเศษ ของSoftwareSerial กำหนดให้ 3คือ rx 2คือ tx
//=============================================
int SW_ON = 4,SW_OFF = 5,pin=6; //กำหนดขา INPUT
int Sun = 9,CSun = 0,Relay1 = 12, Relay2 = 11; //กำหนดขา OUTPUT
int ATL = A0,ATH = A1;//กำหนดขา Analog
int VTL1 = 0,VTH1 = 0,TL = 0,TH =0,VRHL = 50,VRHH = 80;
DHT11 dht11(pin);
//=============================================
void setup() // ฟังก์ชั่นใช้ในการประกาศค่าเริ่มต้น
{
lcd.begin(); // การทำงานเริ่มต้นของ lcd
Serial.begin(115200); //ประกาศการใช้งานการสื่อสารรับส่งข้อมูลผ่าน พอร์ตRS232
ArduinoSerial.begin(4800);
while (!Serial){ // คำสั่ง While คือเงื่อนไขที่จะทำการตรวจสอบว่าเป็นจริงหรือเท็จ
;
}
//=====================================================
lcd.setCursor(0, 0); //ใช้สั่งให้แสดงเคเซอร์บนหน้าจอ ตัวอักษรที่0เเถว0
lcd.print("Elec "); // เเสดงข้อความคำว่า Elec
lcd.setCursor(0, 1); //ใช้สั่งให้แสดงเคเซอร์บนหน้าจอ ตัวอักษรที่0เเถว1
lcd.print("Smart Farm 2018 "); // เเสดงข้อความคำว่า Smart Farm 2018
delay(5000); // หน่วงเวลา
//====================================================
pinMode(Relay1, OUTPUT); //กำหนด Relay 1 ให้เป็น OUTPUT
pinMode(Relay2, OUTPUT); //กำหนด Relay 2 ให้เป็น OUTPUT
pinMode(SW_ON, INPUT); //กำหนด SW_ON ให้เป็น INPUT
pinMode(SW_OFF, INPUT); //กำหนด SW_OFFให้เป็น INPUT
pinMode(Sun, INPUT); //กำหนด SUN ให้เป็น INPUT
digitalWrite(Relay1, HIGH); //ทำหน้าที่เขียนค่า HIGH ไปยังขาดิจิตอล
digitalWrite(Relay2, HIGH); //ทำหน้าที่เขียนค่า HIGH ไปยังขาดิจิตอล
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
}
//=============================================================
void loop()
{
while (ArduinoSerial.available() > 0) { // คำสั่ง While คือเงื่อนไขที่จะทำการตรวจสอบว่าเป็นจริงหรือเท็จ
float val = ArduinoSerial.parseFloat();
if (ArduinoSerial.read() == '\n') {
if (val == 10) {
digitalWrite(13, 1); // ทำหน้าที่เขียนค่า 1 ไปยังขาดิจิตอล
} else if (val == 11) {
digitalWrite(13, 0); //ทำหน้าที่เขียนค่า 0 ไปยังขาดิจิตอล
}
Serial.println(val);
}
}
delay(100);
//========ปรับค่าอุณหภูมิอ้างอิง====================================
CSun = digitalRead(Sun);
int err;
float temp, humi; // ตัวแปรชนิด floating-point หรือตัวแปรที่มีจุดทศนิยม
if((err=dht11.read(humi, temp))==0) // คำสั่งในการตัดสินใจ แบบตัวเลือกเดียว โดยใช้งานร่วมกับ ==, !=, <, >เพื่อใช้ในการ ตัดสินใจในการหาคำ
{
VTL1 = analogRead(ATL);
VTH1 = analogRead(ATH);
TL = map(VTL1,0,1023,10,30);
TH = map(VTH1,0,1023,25,45);
Serial.print("TL :");Serial.print(TL);Serial.println("*C");
Serial.print("TH :");Serial.print(TH);Serial.println("*C");
//===========================================================
int Stemp =(int)(temp);int Shumi=(int)(humi);//ตัดทศนิยม
Serial.print("temp :");Serial.print(Stemp);Serial.println("*C");
Serial.print("humidity :");Serial.print(Shumi);Serial.println("%");
Serial.print("SUN :");Serial.println(CSun);//Serial.println();
//===================================================
lcd.setCursor(0, 0);lcd.print("TL:");lcd.print(TL);
lcd.setCursor(6, 0);lcd.print("TH:");lcd.print(TH);
lcd.setCursor(12, 0);lcd.print("S1:");lcd.print(!CSun);
lcd.setCursor(0, 1);lcd.print("TN:");lcd.print(Stemp);
lcd.setCursor(6, 1);lcd.print("RH:");lcd.print(Shumi);
lcd.setCursor(12, 1);lcd.print("P1:0");lcd.print(Shumi);
delay(1000);
//===================================================
//=======ควบคุมอุณหภูมิ===========================
if(temp < TL && temp < TH ){
digitalWrite(Relay1, HIGH);// ทำหน้าที่เขียนค่า HIGH ไปยังขาดิจิตอล ปั๊มน้ำหยุดทำงาน
lcd.setCursor(12, 1);lcd.print("P1:0");
delay(100); // หน่วงเวลา
digitalWrite(Relay2, LOW);//ทำหน้าที่เขียนค่า HIGH ไปยังขาดิจิตอล หลอดไฟทำงาน
lcd.setCursor(12, 0);lcd.print("L1:1");
delay(60000); //หน่วงเวลา 1 นาที
}else if(temp > TL && temp > TH){
digitalWrite(Relay2, HIGH); //ทำหน้าที่เขียนค่า HIGH ไปยังขาดิจิตอล หลอดไฟไม่ทำงาน
lcd.setCursor(12, 0);lcd.print("L1:0");
delay(100);
digitalWrite(Relay1, LOW); //ทำหน้าที่เขียนค่า LOW ไปยังขาดิจิตอล ปั๊มน้ำทำงาน
lcd.setCursor(12, 1);lcd.print("P1:1");
delay(60000); //หน่วงเวลา 1 นาที
}else if(temp > TL && temp < TH){
//=======ควบคุมความชื้น===========================
if(humi < VRHL && humi < VRHH){
digitalWrite(Relay2, HIGH); //ทำหน้าที่เขียนค่า HIGH ไปยังขาดิจิตอล หลอดไฟไม่ทำงาน
lcd.setCursor(12, 0);lcd.print("L1:0");
delay(100);
digitalWrite(Relay1, LOW); //ทำหน้าที่เขียนค่า LOW ไปยังขาดิจิตอล ปั๊มน้ำทำงาน
lcd.setCursor(12, 1);lcd.print("P1:1");
delay(60000); //หน่วงเวลา 1 นาที
}else if(humi > VRHL && humi > VRHH){
digitalWrite(Relay1, HIGH); //ทำหน้าที่เขียนค่า HIGH ไปยังขาดิจิตอล ปั๊มน้ำหยุดทำงาน
lcd.setCursor(12, 1);lcd.print("P1:0");
delay(100);
digitalWrite(Relay2, LOW); //ทำหน้าที่เขียนค่า LOW ไปยังขาดิจิตอล หลอดไฟทำงาน
lcd.setCursor(12, 0);lcd.print("L1:1");
delay(60000);//หน่วงเวลา 1 นาที
}else if(humi > VRHL && humi < VRHH){
//delay(1000);
digitalWrite(Relay1, HIGH); //ทำหน้าที่เขียนค่า HIGH ไปยังขาดิจิตอล ปั๊มน้ำหยุดทำงาน
lcd.setCursor(12, 1);lcd.print("P1:0");
digitalWrite(Relay2, HIGH); //ทำหน้าที่เขียนค่า HIGH ไปยังขาดิจิตอล หลอดไฟไม่ทำงาน
lcd.setCursor(12, 0);lcd.print("L1:0");
//หน่วงเวลา 1 นาที
}
//=======ENDควบคุมความชื้น===========================
}
//=======ENDควบคุมอุณหภูมิ===========================
}
else
{
Serial.println();Serial.print("Error No :");
Serial.print(err);Serial.println();
}
delay(DHT11_RETRY_DELAY);
}