#include <avr/wdt.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <OneWire.h>
#include <DallasTemperature.h>
const int pot1Pin = A6; // alamat pin analog potensio1
const int pot2Pin = A7; // alamat pin analog potensio2
const int pot3Pin = A8;
OneWire oneWire(7); // alamat pin digital Ds18b20
DallasTemperature sensors(&oneWire);
const int ValveKuras = 8; // alamat Pin digital Led A
const int ValveIsi = 9; // alamat Pin Digital LED B
const int Heater = 12; // alamat Pin DIgital LED C
const int Cooler = 13; // alamat Pin Digital LED D
const int ValvepHUp = 10;
const int ValvepHDown = 11;
#define row_num 4
#define col_num 4
char keys[row_num][col_num]={
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte row_pins[row_num]={19,18,5,17};
byte col_pins[col_num]={16,14,2,15};
LiquidCrystal_I2C lcd(0x27, 20, 4); //alamat lcd 20 x4
Keypad mykeypad=Keypad(makeKeymap(keys),row_pins,col_pins,row_num,col_num);
void setup() {
// put your setup code here, to run once:
pinMode(ValveKuras, OUTPUT);
pinMode(ValveIsi, OUTPUT);
pinMode(Heater, OUTPUT);
pinMode(Cooler, OUTPUT);
pinMode(ValvepHUp, OUTPUT);
pinMode(ValvepHDown, OUTPUT);
digitalWrite(ValveKuras, LOW);
digitalWrite(ValveIsi, LOW);
digitalWrite(Heater, LOW);
digitalWrite(Cooler, LOW);
digitalWrite(ValvepHUp, LOW);
digitalWrite(ValvepHDown, LOW);
lcd.begin(20, 4); // Inisialisasi LCD
lcd.print(" SIMON KAIHOBA ");
lcd.setCursor(0, 1);
lcd.print("1. Ikan KOI");
lcd.setCursor(0, 2);
lcd.print("2. Ikan DISCUS");
sensors.begin();
Serial.begin(115200);
}
void loop() {
char key = keypad.getKey();
while (key) {
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
int pot1Value = analogRead(pot1Pin); // Potensio 1 Pengganti Sensor pH
float pH = pot1Value * (10.0 / 1023.0); // Conversi dari Potensio 1 ke pH
int pot2Value = analogRead(pot2Pin); // Potensio 2 Pengganti Sensor Turbidity
float turbidity= pot2Value * (100 / 1023.0); // Conversi dari Potensio 2 ke Sensor Turbidity
int pot3Value = analogRead(pot3Pin); // Potensio 3 pengganti sensor WaterLevel
float waterlvl=pot3Value;
float jarak = 0.0;
jarak= 100*waterlvl/1023; // Conversi Dari Potensio 1 menjadi satuan Jarak (Cm)
switch (key) {
case '1': // Tombol 1 Untuk ikan KOI
lcd.setCursor(0, 0);
lcd.print(" IKAN KOI ");
lcd.setCursor(0, 1);
lcd.print("Suhu : ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 2);
lcd.print("pH meter : ");
lcd.print(pH);
lcd.setCursor(0, 3);
lcd.print("Kekeruhan : ");
lcd.print(turbidity);
lcd.print("%");
// "Program SetPoint Sensor suhu Untuk Ikan Koi"
if (temperature > 28) {
digitalWrite(Heater, LOW); // Turn on LED A
digitalWrite(Cooler, HIGH); // Turn off LED B
}
else if (temperature < 20) {
digitalWrite(Heater, HIGH); // Turn off LED A
digitalWrite(Cooler, LOW); // Turn on LED B
}
else {
digitalWrite(Heater, LOW);
digitalWrite(Cooler, LOW);
}
// " Program SetPoint Sensor pH Untuk Ikan Koi"
if (pH >8) {
digitalWrite(ValvepHUp, LOW);
digitalWrite(ValvepHDown, HIGH);
} else if(pH < 6.5){
digitalWrite(ValvepHUp, HIGH);
digitalWrite(ValvepHDown, LOW);
} else {
digitalWrite(ValvepHUp, LOW);
digitalWrite(ValvepHDown, LOW);
}
// " Program SetPoint Sensor Turbidity Untuk Ikan Koi"
if (turbidity > 25) {
if (jarak >= 5.0 && jarak < 15) {
lcd.setCursor(0, 1);
lcd.clear();
lcd.print("menguras Kolam");
lcd.setCursor(0, 2);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print("Cm");
digitalWrite(ValveKuras, HIGH);
digitalWrite(ValveIsi, LOW);
delay(200);
}
else if (jarak >= 15 && jarak < 35 ) {
lcd.clear();
lcd.print("Mengisi Kolam");
lcd.setCursor(0, 2);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print("Cm");
digitalWrite(ValveKuras, LOW);
digitalWrite(ValveIsi, HIGH);
delay(200);
}
else{
lcd.clear();
lcd.print("Kolam Terisi");
lcd.setCursor(0, 2);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print("Cm");
digitalWrite(ValveKuras, LOW);
digitalWrite(ValveIsi, LOW);
wdt_enable(WDTO_15MS);
}
} break;
// Program Tombol 2 Untuk Ikan DISCUS
case '2':
lcd.setCursor(0, 0);
lcd.print(" IKAN DISCUS ");
lcd.setCursor(0, 1);
lcd.print("Suhu : ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 2);
lcd.print("pH meter : ");
lcd.print(pH);
lcd.setCursor(0, 3);
lcd.print("Kekeruhan : ");
lcd.print(turbidity);
lcd.print("%");
// "Program SetPoint Sensor Suhu Untuk Ikan GUPPY"
if (temperature > 30) {
digitalWrite(Heater, LOW); // Turn on LED A
digitalWrite(Cooler, HIGH); // Turn off LED B
}
else if (temperature < 25) {
digitalWrite(Heater, HIGH); // Turn off LED A
digitalWrite(Cooler, LOW); // Turn on LED B
}
else {
digitalWrite(Heater, LOW);
digitalWrite(Cooler, LOW);
}
// "Program SetPoint Sensor pH Untuk Ikan GUPPY"
if (pH > 6.5) {
digitalWrite(ValvepHUp, LOW);
digitalWrite(ValvepHDown, HIGH);
} else if(pH < 5){
digitalWrite(ValvepHUp, HIGH);
digitalWrite(ValvepHDown, LOW);
} else {
digitalWrite(ValvepHUp, LOW);
digitalWrite(ValvepHDown, LOW);
}
// " Program SetPoint Sensor Turbidity Untuk Ikan DISCUS "
if (turbidity > 25) {
if (jarak >= 5.0 && jarak < 15) {
lcd.setCursor(0, 1);
lcd.clear();
lcd.print("menguras Kolam");
lcd.setCursor(0, 2);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print("Cm");
digitalWrite(ValveKuras, HIGH);
digitalWrite(ValveIsi, LOW);
delay(200);
}
else if (jarak >= 15 && jarak < 35 ) {
lcd.clear();
lcd.print("Mengisi Kolam");
lcd.setCursor(0, 2);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print("Cm");
digitalWrite(ValveKuras, LOW);
digitalWrite(ValveIsi, HIGH);
delay(200);
}
else{
lcd.clear();
lcd.print("Kolam Terisi");
lcd.setCursor(0, 2);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print("Cm");
digitalWrite(ValveKuras, LOW);
digitalWrite(ValveIsi, LOW);
wdt_enable(WDTO_15MS);
}
}
break;
}
while (keypad.getKey() == '*') {
wdt_enable(WDTO_15MS);
}
}
}