Professional Documents
Culture Documents
THÊM NÚT NHẤN VÀ RELAY CHO CHẾ ĐỘ ĐIỀU KHIỂN THỦ CÔNG
Mục đích của việc sử dụng nút nhấn và relay là để điều khiển máy bơm và đèn khi cần
thiết. Trong đó có 3 nút nhấn: một nút dùng để điều khiển đèn, một nút dùng để điều
khiển máy bơm và nút còn lại để đọc cảm biến và cập nhập trạng thái.
void loop() {
// Khởi tạo timer
elapsedTime = millis() - startTiming;
readLocalCmd();
if (elapsedTime > (sampleTimingSeconds * 1000))
{
readSensors();
showDataLCD();
startTiming = millis();
}
int getSoilMoist()
{
int i = 0;
int anaValue = 0;
for (i = 0; i < 10; i++)
{
anaValue += analogRead(SOIL_MOIST_1_PIN); //Đọc giá trị
cảm biến độ ẩm đất
delay(50); // Đợi đọc giá trị ADC
}
anaValue = anaValue / (i);
anaValue = map(anaValue, 1023, 0, 0, 100); //Ít nước:0%
==> Nhiều nước 100%
return anaValue;
}
void readSensors(void)
{
DoAmKK = dht.readTemperature(); //Đọc nhiệt độ DHT22
NhietDo = dht.readHumidity(); //Đọc độ ẩm DHT22
DoAmDat = getSoilMoist(); //Đọc cảm biến độ ẩm đất
}
void readLocalCmd()
{
int digiValue = CheckButton(PUMP_ON_BUTTON);
// Serial.println(digiValue);
if (!digiValue)
{
PumpStatus = !PumpStatus;
showDataLCD();
CheckStatus();
}
digiValue = CheckButton(LAMP_ON_BUTTON);
if (!digiValue)
{
LampStatus = !LampStatus;
showDataLCD();
CheckStatus();
}
digiValue = CheckButton(SENSORS_READ_BUTTON);
if (!digiValue)
{
readSensors();
showDataLCD();
}
}
void CheckStatus()
{
if (PumpStatus == 1) digitalWrite(PUMP_CONTROL, LOW);
if (PumpStatus == 0) digitalWrite(PUMP_CONTROL, HIGH);
previousState = digitalRead(pin);
for (int counter = 0; counter < Delay; counter++)
{
delay(1);
state = digitalRead(pin);
if (state != previousState)
{
counter = 0;
previousState = state;
}
}
return state;
}
In thông tin ra màn hình LCD:
void showDataLCD(void)
{
lcd.setCursor(0, 1);
lcd.print(" DoAmKK= ");
lcd.print(DoAmKK);
lcd.println("%" );
lcd.setCursor(1, 0);
lcd.print("NhietDo= ");
lcd.print(NhietDo);
lcd.println("C");
delay(1000);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("DoAmDat = ");
lcd.print(DoAmDat);
lcd.println("%" );
delay(1000);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("MayBom = ");
lcd.print(PumpStatus);
lcd.println(" " );
lcd.setCursor(1, 0);
lcd.print("DEN = ");
lcd.print(LampStatus);
lcd.println("");
delay(1000);
}