#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int buttonModePin = 18; // Pin untuk tombol mode
const int buttonIncPin = 17; // Pin untuk tombol peningkatan nilai
const int buttonDecPin = 16; // Pin untuk tombol penurunan nilai
const int sensorFlowPin = 4; // Pin untuk membaca nilai Sensor FlowRate
const int sensorOksigenPin = 15; // Pin untuk membaca nilai Sensor Oksigen
const int sensorDHT22Pin = 2; // Pin untuk membaca nilai Sensor DHT22
const int ledValuePin = 12; // Pin untuk output Mosfet IRF520 dan Valve
int hasilPotFlow;
int hasilPotOks;
int hasilPotDHT22;
int currentMode = 1; // Mode awal
int currentTemperature = 25; // Suhu awal (misalnya dalam derajat Celsius)
int currentAirSpeed = 0; // Kecepatan aliran udara awal
int currentFlowRate = 0; // Nilai awal sensor FlowRate
int currentOksigen = 0; // Nilai awal sensor Oksigen
int currentDHT22 = 0; // Nilai awal sensor DHT22
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD 16x4
void setup() {
pinMode(buttonModePin, INPUT);
pinMode(buttonIncPin, INPUT);
pinMode(buttonDecPin, INPUT);
pinMode(sensorFlowPin, INPUT);
pinMode(sensorOksigenPin, INPUT);
pinMode(sensorDHT22Pin, INPUT);
pinMode(ledValuePin, OUTPUT);
Wire.begin();
Serial.begin(115200);
lcd.begin(20, 4); // Inisialisasi LCD
// Menampilkan mode, suhu, dan kecepatan awal pada LCD
updateLCD();
}
void loop() {
//Baca nilai FlowRate dan Oksigen
hasilPotFlow = analogRead(sensorFlowPin);
currentFlowRate = map(hasilPotFlow, 0, 4095, 10, 60);
hasilPotOks = analogRead(sensorOksigenPin);
currentOksigen = map(hasilPotOks, 0, 4095, 20, 100);
hasilPotDHT22 = analogRead(sensorDHT22Pin);
currentDHT22 = map(hasilPotDHT22, 0, 4095, 0, 100);
// Baca status tombol dan lakukan aksi sesuai dengan kondisi
if (digitalRead(buttonModePin) == HIGH) {
delay(50); // Debouncing
currentMode = (currentMode % 2) + 1; // Ganti mode (1, 2)
updateLCD();
while(digitalRead(buttonModePin) == HIGH); // Tunggu sampai tombol dilepas
}
if (digitalRead(buttonIncPin) == HIGH) {
delay(50); // Debouncing
if (currentMode == 1) {
currentAirSpeed = min(currentAirSpeed + 1, 100); // Tambah kecepatan aliran udara (contoh)
} else {
currentTemperature = min(currentTemperature + 1, 100); // Tambah suhu (contoh)
}
updateLCD();
while(digitalRead(buttonIncPin) == HIGH); // Tunggu sampai tombol dilepas
}
if (digitalRead(buttonDecPin) == HIGH) {
delay(50); // Debouncing
if (currentMode == 1) {
currentAirSpeed = max(currentAirSpeed - 1, 0); // Kurangi kecepatan aliran udara (contoh)
} else {
currentTemperature = max(currentTemperature - 1, 0); // Kurangi suhu (contoh)
}
updateLCD();
while(digitalRead(buttonDecPin) == HIGH); // Tunggu sampai tombol dilepas
}
}
void updateLCD() {
lcd.clear();
lcd.setCursor(0, 0);
if (currentMode == 1) {
lcd.print("Mode: Flow Rate");
lcd.setCursor(0, 1);
lcd.print("Flow: ");
lcd.print(currentAirSpeed);
lcd.print(" L/min");
} else {
lcd.print("Mode: Temperature");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(currentTemperature);
lcd.print(" C");
}
lcd.setCursor(0, 2);
lcd.print("Keadaan sekarang: ");
lcd.setCursor(0, 3);
lcd.print("F:");
lcd.print(currentFlowRate);
lcd.setCursor(4, 3);
lcd.print("L/m");
lcd.setCursor(8, 3);
lcd.print("O:");
lcd.print(currentOksigen);
lcd.setCursor(12, 3);
lcd.print("%");
lcd.setCursor(14, 3);
lcd.print("T:");
lcd.print(currentDHT22);
lcd.setCursor(19, 3);
lcd.print("C");
delay(500);
}