#include <Servo.h>
#include <SPI.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3D
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
LiquidCrystal_I2C lcd(0x27,16,2);
Servo servo1, servo2, servo3;
int buttonPakan = 42;
int pakanHabis = 0;
int buttonState = 0;
unsigned long servo1Interval = 11000;
unsigned long servo2Interval = 17000;
unsigned long servo3Interval = 10000;
unsigned long servo1PreviousMillis = 0;
unsigned long servo2PreviousMillis = 0;
unsigned long servo3PreviousMillis = 0;
int upButton = 7;
int downButton = 6;
int selectButton = 5;
int menu = 1;
int buttonBakBackup = 3;
Servo servoIsi1;
Servo servoIsi2;
Servo servoIsi3;
Servo servoIsi4;
Servo servoBuang2;
Servo servoBuang3;
Servo servoBuang4;
int pinSensorSuhu1 = A0;
int pinSensorSuhu2 = A1;
int pinSensorSuhu3 = A2;
int pinSensorSuhu4 = A3;
int pinSensorpH1 = A4;
int pinSensorpH2 = A5;
int pinSensorpH3 = A6;
int pinSensorpH4 = A7;
int pos = 0;
int pos1 = 90;
int ambangSuhu = 30;
int ambangpH = 7;
int buttonBibit = 50;
int buttonPembesaran = 51;
int buttonPanen = 52;
int buttonBackup = 53;
void setup() {
lcd.init();
lcd.backlight();
servoIsi1.attach(4);
servoIsi2.attach(10);
servoIsi3.attach(9);
servoIsi4.attach(8);
servoBuang2.attach(13);
servoBuang3.attach(12);
servoBuang4.attach(11);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
pinMode(buttonBakBackup, INPUT_PULLUP);
updateMenu();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0, 0);
display.println("Budidaya ikan lele");
display.display();
servo1.attach(46);
servo2.attach(44);
servo3.attach(45);
pinMode(buttonPakan, INPUT_PULLUP);
pinMode(buttonBibit, INPUT_PULLUP);
pinMode(buttonPembesaran, INPUT_PULLUP);
pinMode(buttonPanen, INPUT_PULLUP);
pinMode(buttonBackup, INPUT_PULLUP);
}
void loop() {
int pH1 = map(analogRead(pinSensorpH1), 0, 1023, 6, 14);
int pH2 = map(analogRead(pinSensorpH2), 0, 1023, 6, 14);
int pH3 = map(analogRead(pinSensorpH3), 0, 1023, 6, 14);
int pH4 = map(analogRead(pinSensorpH4), 0, 1023, 6, 14);
int suhu1 = map(analogRead(pinSensorSuhu1), 0, 1023, 26, 100);
int suhu2 = map(analogRead(pinSensorSuhu2), 0, 1023, 26, 100);
int suhu3 = map(analogRead(pinSensorSuhu3), 0, 1023, 26, 100);
int suhu4 = map(analogRead(pinSensorSuhu4), 0, 1023, 26, 100);
if (!digitalRead(downButton)) {
menu++;
updateMenu();
delay(100);
while (!digitalRead(downButton));
}
if (!digitalRead(upButton)) {
menu--;
updateMenu();
delay(100);
while (!digitalRead(upButton));
}
if (!digitalRead(selectButton)) {
executeAction();
updateMenu();
delay(100);
while (!digitalRead(selectButton));
}
if (digitalRead(buttonBakBackup) == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mengisi air... ");
lcd.setCursor(0, 1);
lcd.print("Bak backup ");
bukaServoIsi1();
} else if (digitalRead(buttonBackup) == LOW) {
tutupServoIsi1();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Isi air selesai");
lcd.setCursor(0, 1);
lcd.print("Bak backup ");
delay(1000);
lcd.clear();
}
if(suhu2 > ambangSuhu && pH2 > ambangpH){
if(digitalRead(buttonBibit) == LOW){
tutupServoBuang2();
delay(500);
tutupServoIsi2();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Isi air selesai");
lcd.setCursor(0, 1);
lcd.print("Bak bibit ");
delay(1000);
} else if(digitalRead(buttonBibit) == HIGH) {
bukaServoBuang2();
lcd.setCursor(0, 0);
lcd.print("Menguras air... ");
lcd.setCursor(0, 1);
lcd.print("Bak bibit ");
delay(1500);
bukaServoIsi2();
lcd.clear();
}
}
if(suhu3 > ambangSuhu && pH3 > ambangpH){
if(digitalRead(buttonPembesaran) == LOW){
tutupServoBuang3();
delay(500);
tutupServoIsi3();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Isi air selesai");
lcd.setCursor(0, 1);
lcd.print("Bak pembesaran ");
delay(1000);
}else if(digitalRead(buttonPembesaran) == HIGH){
bukaServoBuang3();
lcd.setCursor(0, 0);
lcd.print("Menguras air... ");
lcd.setCursor(0, 1);
lcd.print("Bak pembesaran ");
delay(1500);
bukaServoIsi3();
}
}
if(suhu4 > ambangSuhu && pH4 > ambangpH){
if(digitalRead(buttonPanen) == LOW){
tutupServoBuang4();
delay(500);
tutupServoIsi4();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Isi air selesai");
lcd.setCursor(0, 1);
lcd.print("Bak panen ");
delay(1000);
}else if(digitalRead(buttonPanen) == HIGH){
bukaServoBuang4();
lcd.setCursor(0, 0);
lcd.print("Menguras air... ");
lcd.setCursor(0, 1);
lcd.print("Bak panen ");
delay(1500);
bukaServoIsi4();
}
}
//CODE PAKAN
unsigned long currentMillis = millis();
buttonState = digitalRead(buttonPakan);
if (buttonState == LOW) {
// Jika push button ditekan, hentikan servo dan tampilkan pesan di OLED display
servo1.write(90);
servo2.write(90);
servo3.write(90);
display.clearDisplay();
display.setCursor(0, 0);
display.println("Pakan ikan");
display.setCursor(0, 30);
display.println("habis!!!");
display.display();
}
else {
if (currentMillis - servo1PreviousMillis >= servo1Interval) {
servo1PreviousMillis = currentMillis;
servo1.write(0);
display.clearDisplay();
display.setCursor(35, 0);
display.println("BAK");
display.setCursor(30, 30);
display.println("bibit");
display.display();
}
if (currentMillis - servo2PreviousMillis >= servo2Interval) {
servo2PreviousMillis = currentMillis;
servo2.write(0);
display.clearDisplay();
display.setCursor(35, 0);
display.println("BAK");
display.setCursor(0, 30);
display.println("pembesaran");
display.display();
}
if (currentMillis - servo3PreviousMillis >= servo3Interval) {
servo3PreviousMillis = currentMillis;
servo3.write(0);
display.clearDisplay();
display.setCursor(35, 0);
display.println("BAK");
display.setCursor(30, 30);
display.println("panen");
display.display();
}
}
delay(1000);
servo1.write(90);
servo2.write(90);
servo3.write(90);
delay(100);
}
void updateMenu() {
switch (menu) {
case 0:
menu = 1;
break;
case 1:
lcd.clear();
lcd.print(">>Bak backup");
lcd.setCursor(0, 1);
lcd.print(" Bak bibit");
break;
case 2:
lcd.clear();
lcd.print(" Bak backup");
lcd.setCursor(0, 1);
lcd.print(">>Bak bibit");
break;
case 3:
lcd.clear();
lcd.print(">>Bak pembesaran");
lcd.setCursor(0, 1);
lcd.print(" Bak panen");
break;
case 4:
lcd.clear();
lcd.print(" Bak pembesaran");
lcd.setCursor(0, 1);
lcd.print(">>Bak panen");
break;
case 5:
menu = 4;
break;
}
}
void executeAction() {
switch (menu) {
case 1:
action1();
break;
case 2:
action2();
break;
case 3:
action3();
break;
case 4:
action4();
break;
}
}
void action1() {
int pH1 = map(analogRead(pinSensorpH1), 0, 1023, 6, 14);
int suhu1 = map(analogRead(pinSensorSuhu1), 0, 1023, 26, 100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu1);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("pH: ");
lcd.print(pH1);
delay(3000);
}
void action2() {
int pH2 = map(analogRead(pinSensorpH2), 0, 1023, 6, 14);
int suhu2 = map(analogRead(pinSensorSuhu2), 0, 1023, 26, 100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu2);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("pH: ");
lcd.print(pH2);
delay(3000);
}
void action3() {
int pH3 = map(analogRead(pinSensorpH3), 0, 1023, 6, 14);
int suhu3 = map(analogRead(pinSensorSuhu3), 0, 1023, 26, 100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu3);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("pH: ");
lcd.print(pH3);
delay(3000);
}
void action4() {
int pH4 = map(analogRead(pinSensorpH4), 0, 1023, 6, 14);
int suhu4 = map(analogRead(pinSensorSuhu4), 0, 1023, 26, 100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu4);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("pH: ");
lcd.print(pH4);
delay(3000);
}
void bukaServoIsi1(){
servoIsi1.write(pos);
}
void tutupServoIsi1(){
servoIsi1.write(pos1);
}
void bukaServoBuang2(){
servoBuang2.write(pos);
}
void tutupServoBuang2(){
servoBuang2.write(pos1);
}
void bukaServoIsi2(){
servoIsi2.write(pos);
}
void tutupServoIsi2(){
servoIsi2.write(pos1);
}
void bukaServoBuang3(){
servoBuang3.write(pos);
}
void tutupServoBuang3(){
servoBuang3.write(pos1);
}
void bukaServoIsi3(){
servoIsi3.write(pos);
}
void tutupServoIsi3(){
servoIsi3.write(pos1);
}
void bukaServoBuang4(){
servoBuang4.write(pos);
}
void tutupServoBuang4(){
servoBuang4.write(pos1);
}
void bukaServoIsi4(){
servoIsi4.write(pos);
}
void tutupServoIsi4(){
servoIsi4.write(pos1);
}