พอดีทำเครื่องรดน้ำต้นไม้แล้ว มันรดน้ำตลอดจะหยุดก็ต่อเมื่อค่ามากกว่าหรือเท่ากับ 65 อ.เลยแนะนำว่าควรเพิ่มค่าสูงสุดต่ำสุดในการรดน้ำไป ควรแก้ไขโค้ดตรงไหนครับ
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // scl = D1 , SCA = D2 ของจอlcd
#define DHTPIN D6 // ขา dht
#define DHTTYPE DHT22 //ชนิด dht
DHT dht(DHTPIN, DHTTYPE);
int sense_Pin = 0; // ขาเซ็นเซอร์ดิน
float value = 0; // ค่าเริ่มต้น
float T = 0 ; // ค่าที่ตั้งเริ่มต้นเท่ากับ 0
int SW1 = D7 ; // ขาสวิตซ์1
int SW2 = D8 ; // ขาสวิตซ์2
/////////ลูปเริ่มต้น////////////////////
void setup()
{
dht.begin();
pinMode(D3,OUTPUT) ; // ปั๊ม
pinMode(D4,OUTPUT) ; // พัดลม
pinMode(D5,OUTPUT) ; // ไฟแสดงสถานะ
byte tempIcon[8] = // ไอคอนปรอทอุณหภูมิ
{
0b00100,
0b01010,
0b01010,
0b01110,
0b01110,
0b11111,
0b11111,
0b01110
} ;
byte humiIcon[8] = // ไอคอนหยดน้ำ
{
0b00100,
0b00100,
0b01010,
0b01010,
0b10001,
0b10001,
0b10001,
0b01110
} ;
byte gIcon[8] = // ไอคอนต้นไม้
{
0b01110,
0b11111,
0b01110,
0b11111,
0b01110,
0b00100,
0b00100,
0b01110
} ;
byte sIcon[8] = //ไอคอนลูกศร
{
0b00000,
0b00100,
0b00110,
0b11111,
0b00110,
0b00100,
0b00000,
0b00000
} ;
pinMode(SW1,INPUT) ;
pinMode(SW2,INPUT) ;
lcd.begin();
lcd.createChar(1,tempIcon) ; lcd.createChar(2,humiIcon) ; lcd.createChar(3,gIcon) ; lcd.createChar(4,sIcon) ;
/////////// หน้าเริ่มต้น /////////////
lcd.setCursor(4,0); lcd.print("Welcome");
lcd.setCursor(1,1); lcd.print("Soil & Weather");
delay(4000);
lcd.clear();
//////////// หน้าโหลด ////////////
lcd.setCursor(0,0); lcd.print(" LOADING... ");
lcd.setCursor(0,1);
for( int i=0 ; i<20 ; i++ )
{
lcd.print(">");
delay(200);
}
lcd.clear();
/////////////////////////////////////////////////////////////
lcd.setCursor(0, 0);lcd.write(1) ; lcd.setCursor(6, 0);lcd.print("'C");
lcd.setCursor(9, 0);lcd.write(2) ; lcd.setCursor(15 , 0);lcd.print("%");
lcd.setCursor(0, 1);lcd.write(3);
lcd.setCursor(7, 1);lcd.write(3);lcd.setCursor(8, 1);lcd.write(4);lcd.setCursor(9, 1);lcd.print(T);
}
///////////// ฟังก์ชั่นเพิ่ม/ลด ////////////////
void upvalue()//---------------------------เข้าฟังก์ชั่นกดเพิ่ม
{
T=T+1; //เพิ่มทีละ1
if(T>=100) {T=100;}
}
void downvalue()//---------------------------เข้าฟังก์ชั่นกดลด
{
T=T-1; // ลดทีละ1
if(T<=0) {T=0;}
}
////////////////สวิตซ์////////////////////////
void swmanual()
{
int settoup ;
int settodown ;
settoup = digitalRead(SW2) ;
if(settoup == HIGH) // ถ้าสวิตซ์ 2 ถูกกด
{
//delay(300) ;
upvalue() ; // ไปที่ฟังก์ชั่นกดเพิ่ม
lcd.setCursor(9, 1);lcd.print(T); // แสดงค่าที่เพิ่ม
}
settodown = digitalRead(SW1) ;
if(settodown == HIGH) // ถ้าสวิตซ์ 1 ถูกกด
{
//delay(300) ;
downvalue() ; // ไปที่ฟังก์ชั่นกดลด
lcd.setCursor(9, 1);lcd.print(T); // แสดงค่าที่ลด
}
}
//--------------------------------------------------------
/////////ลูปหลัก/////////////////////
void loop()
{
float b = dht.readHumidity();
float a = dht.readTemperature();
value= analogRead(sense_Pin);
value = map(value, 0, 1023, 0, 100); // กำหนดให้ค่าอยู่ 0 - 100
lcd.setCursor(1, 1);lcd.print(value); // แสดงค่าที่อ่านจากเซ็นเซอร์ดิน
lcd.setCursor(1,0); lcd.print(a) ; // แสดงค่าอุณหถูมิที่อ่านจากเซ็นเซอร์dht
lcd.setCursor(10,0); lcd.print(b) ; // แสดงค่าความชื้นที่อ่านจากเซ็นเซอร์dht
delay(300);
swmanual() ; // ให้ฟังก์ชั่นสวิตซ์ทำงานวนลูปหลัก
if(value<T-3) // ค่าเซ็นเซอร์น้อยกว่าค่าที่ตั้ง - 3
{
digitalWrite(D3,HIGH) ; // ปั๊มไม่ทำงาน
digitalWrite(D4,LOW) ; // พัดลมทำงาน
digitalWrite(D5,HIGH) ; //ไฟสถานะกระพริบ
delay(500) ; //
digitalWrite(D5,LOW) ; //
}
if(value>T+3) // ค่าเซ็นเซอร์มากกว่าค่าที่ตั้ง + 3
{
digitalWrite(D3,LOW) ; // ปั๊มทำงาน
digitalWrite(D4,HIGH) ; // พัดลมไม่ทำงาน
if(value>T)
{
digitalWrite(D5,HIGH) ;//ไฟสถานะกระพริบ
delay(500) ; //
digitalWrite(D5,LOW) ; //
}
}
if(value==T) // ค่าเซ็นเซอร์เท่ากับค่าที่ตั้ง
{
digitalWrite(D3,HIGH) ; // ปั๊มไม่ทำงาน
digitalWrite(D4,HIGH) ; // พัดลมไม่ทำงาน
digitalWrite(D5,HIGH) ; // ไฟสถานะติดค้าง
}
}
ทำเครื่องรดน้ำต้นไม้อัตโนมัติ แต่อยากเปลี่ยนให้กำหนดค่าสูงสุดต่ำสุด ควรเพิ่มโค้ดตรงไหนครับ
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // scl = D1 , SCA = D2 ของจอlcd
#define DHTPIN D6 // ขา dht
#define DHTTYPE DHT22 //ชนิด dht
DHT dht(DHTPIN, DHTTYPE);
int sense_Pin = 0; // ขาเซ็นเซอร์ดิน
float value = 0; // ค่าเริ่มต้น
float T = 0 ; // ค่าที่ตั้งเริ่มต้นเท่ากับ 0
int SW1 = D7 ; // ขาสวิตซ์1
int SW2 = D8 ; // ขาสวิตซ์2
/////////ลูปเริ่มต้น////////////////////
void setup()
{
dht.begin();
pinMode(D3,OUTPUT) ; // ปั๊ม
pinMode(D4,OUTPUT) ; // พัดลม
pinMode(D5,OUTPUT) ; // ไฟแสดงสถานะ
byte tempIcon[8] = // ไอคอนปรอทอุณหภูมิ
{
0b00100,
0b01010,
0b01010,
0b01110,
0b01110,
0b11111,
0b11111,
0b01110
} ;
byte humiIcon[8] = // ไอคอนหยดน้ำ
{
0b00100,
0b00100,
0b01010,
0b01010,
0b10001,
0b10001,
0b10001,
0b01110
} ;
byte gIcon[8] = // ไอคอนต้นไม้
{
0b01110,
0b11111,
0b01110,
0b11111,
0b01110,
0b00100,
0b00100,
0b01110
} ;
byte sIcon[8] = //ไอคอนลูกศร
{
0b00000,
0b00100,
0b00110,
0b11111,
0b00110,
0b00100,
0b00000,
0b00000
} ;
pinMode(SW1,INPUT) ;
pinMode(SW2,INPUT) ;
lcd.begin();
lcd.createChar(1,tempIcon) ; lcd.createChar(2,humiIcon) ; lcd.createChar(3,gIcon) ; lcd.createChar(4,sIcon) ;
/////////// หน้าเริ่มต้น /////////////
lcd.setCursor(4,0); lcd.print("Welcome");
lcd.setCursor(1,1); lcd.print("Soil & Weather");
delay(4000);
lcd.clear();
//////////// หน้าโหลด ////////////
lcd.setCursor(0,0); lcd.print(" LOADING... ");
lcd.setCursor(0,1);
for( int i=0 ; i<20 ; i++ )
{
lcd.print(">");
delay(200);
}
lcd.clear();
/////////////////////////////////////////////////////////////
lcd.setCursor(0, 0);lcd.write(1) ; lcd.setCursor(6, 0);lcd.print("'C");
lcd.setCursor(9, 0);lcd.write(2) ; lcd.setCursor(15 , 0);lcd.print("%");
lcd.setCursor(0, 1);lcd.write(3);
lcd.setCursor(7, 1);lcd.write(3);lcd.setCursor(8, 1);lcd.write(4);lcd.setCursor(9, 1);lcd.print(T);
}
///////////// ฟังก์ชั่นเพิ่ม/ลด ////////////////
void upvalue()//---------------------------เข้าฟังก์ชั่นกดเพิ่ม
{
T=T+1; //เพิ่มทีละ1
if(T>=100) {T=100;}
}
void downvalue()//---------------------------เข้าฟังก์ชั่นกดลด
{
T=T-1; // ลดทีละ1
if(T<=0) {T=0;}
}
////////////////สวิตซ์////////////////////////
void swmanual()
{
int settoup ;
int settodown ;
settoup = digitalRead(SW2) ;
if(settoup == HIGH) // ถ้าสวิตซ์ 2 ถูกกด
{
//delay(300) ;
upvalue() ; // ไปที่ฟังก์ชั่นกดเพิ่ม
lcd.setCursor(9, 1);lcd.print(T); // แสดงค่าที่เพิ่ม
}
settodown = digitalRead(SW1) ;
if(settodown == HIGH) // ถ้าสวิตซ์ 1 ถูกกด
{
//delay(300) ;
downvalue() ; // ไปที่ฟังก์ชั่นกดลด
lcd.setCursor(9, 1);lcd.print(T); // แสดงค่าที่ลด
}
}
//--------------------------------------------------------
/////////ลูปหลัก/////////////////////
void loop()
{
float b = dht.readHumidity();
float a = dht.readTemperature();
value= analogRead(sense_Pin);
value = map(value, 0, 1023, 0, 100); // กำหนดให้ค่าอยู่ 0 - 100
lcd.setCursor(1, 1);lcd.print(value); // แสดงค่าที่อ่านจากเซ็นเซอร์ดิน
lcd.setCursor(1,0); lcd.print(a) ; // แสดงค่าอุณหถูมิที่อ่านจากเซ็นเซอร์dht
lcd.setCursor(10,0); lcd.print(b) ; // แสดงค่าความชื้นที่อ่านจากเซ็นเซอร์dht
delay(300);
swmanual() ; // ให้ฟังก์ชั่นสวิตซ์ทำงานวนลูปหลัก
if(value<T-3) // ค่าเซ็นเซอร์น้อยกว่าค่าที่ตั้ง - 3
{
digitalWrite(D3,HIGH) ; // ปั๊มไม่ทำงาน
digitalWrite(D4,LOW) ; // พัดลมทำงาน
digitalWrite(D5,HIGH) ; //ไฟสถานะกระพริบ
delay(500) ; //
digitalWrite(D5,LOW) ; //
}
if(value>T+3) // ค่าเซ็นเซอร์มากกว่าค่าที่ตั้ง + 3
{
digitalWrite(D3,LOW) ; // ปั๊มทำงาน
digitalWrite(D4,HIGH) ; // พัดลมไม่ทำงาน
if(value>T)
{
digitalWrite(D5,HIGH) ;//ไฟสถานะกระพริบ
delay(500) ; //
digitalWrite(D5,LOW) ; //
}
}
if(value==T) // ค่าเซ็นเซอร์เท่ากับค่าที่ตั้ง
{
digitalWrite(D3,HIGH) ; // ปั๊มไม่ทำงาน
digitalWrite(D4,HIGH) ; // พัดลมไม่ทำงาน
digitalWrite(D5,HIGH) ; // ไฟสถานะติดค้าง
}
}