#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
#define LED_Air_Kosong 0 // No pin pada Uno
#define LED_Air_Tengah 1
#define LED_Air_Penuh 2
#define Relay_CutOff 3
#define LED_CutOff 4
#define Relay_Pompa 13
#define Sensor_Air_Kosong 8 // No Pin Uno
#define Sensor_Air_Tengah 9
#define Sensor_Air_Penuh 10
#define CutOff_Button 12
#define Pot_Pin A0
String Level_Air;
String Status_Pompa;
long int Timer_Pompa;
bool CutOff_State;
int PotAnalog_in;
void setup() {
CutOff_State = false;
Timer_Pompa = 0;
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
pinMode(Sensor_Air_Kosong, INPUT);
pinMode(Sensor_Air_Tengah, INPUT);
pinMode(Sensor_Air_Penuh, INPUT);
pinMode(LED_Air_Kosong, OUTPUT);
pinMode(LED_Air_Tengah, OUTPUT);
pinMode(LED_Air_Penuh, OUTPUT);
pinMode(Relay_Pompa, OUTPUT);
pinMode(Relay_CutOff, OUTPUT);
pinMode(LED_CutOff, OUTPUT);
pinMode(CutOff_Button, INPUT_PULLUP);
pinMode(4, OUTPUT);
Status_Pompa = "POMPA MATI";
}
void loop() {
static bool Reset_CutOff;
int val;
Reset_CutOff |= (digitalRead(CutOff_Button) == LOW);
display.setCursor(100, 30);
display.print(Reset_CutOff);
display.display();
delay(10);
if (Reset_CutOff) {
CutOff_State = false;
digitalWrite(Relay_CutOff, LOW);
WaterFull_Tone();
Reset_CutOff = false;
}
if (CutOff_State == true) {
CutOff_Tone();
}
if (CutOff_State == false) {
PotAnalog_in = analogRead(Pot_Pin); // A0
if (digitalRead(Sensor_Air_Kosong) == HIGH) {
digitalWrite(LED_Air_Kosong, HIGH);
} else {
digitalWrite(LED_Air_Kosong, LOW);
}
if (digitalRead(Sensor_Air_Tengah) == HIGH) {
digitalWrite(LED_Air_Tengah, HIGH);
} else {
digitalWrite(LED_Air_Tengah, LOW);
}
if (digitalRead(Sensor_Air_Penuh) == HIGH) {
digitalWrite(LED_Air_Penuh, HIGH);
} else {
digitalWrite(LED_Air_Penuh, LOW);
}
if (digitalRead(Sensor_Air_Kosong) == HIGH) {
digitalWrite(Relay_Pompa, HIGH);
Status_Pompa = "POMPA HIDUP";
} else if (digitalRead(Sensor_Air_Penuh) == HIGH) {
digitalWrite(Relay_Pompa, LOW);
Status_Pompa = "POMPA MATI";
Timer_Pompa = 0;
}
if (digitalRead(Sensor_Air_Penuh) == HIGH) {
Level_Air = "AIR PENUH!";
WaterFull_Tone();
} else if (digitalRead(Sensor_Air_Tengah) == HIGH) {
Level_Air = "AIR SETENGAH";
} else {
Level_Air = "AIR KOSONG";
}
if ((Timer_Pompa == PotAnalog_in) || (CutOff_State == true)) {
Status_Pompa = "POMPA MATI";
digitalWrite(Relay_CutOff, HIGH);
digitalWrite(Relay_Pompa, LOW);
CutOff_State = true;
Timer_Pompa = 0;
}
if (Status_Pompa == "POMPA HIDUP") {
Timer_Pompa++;
PumpRun_Tone();
}
display.clearDisplay();
display.setTextColor(WHITE, BLACK);
display.setCursor(15, 10);
display.print("Timer:");
display.setCursor(55, 10);
display.print(Timer_Pompa);
display.setCursor(80, 10);
display.print("of");
display.setCursor(98, 10);
display.print(PotAnalog_in);
display.setCursor(15, 30);
display.print(Status_Pompa);
display.setCursor(15, 50);
display.print(Level_Air);
display.display();
delay(100);
}
}
void drawCourt() {
display.drawRect(0, 0, 128, 54, WHITE);
}
void PumpRun_Tone() {
tone(11, 2000, 30);
delay(100);
noTone(11);
tone(11, 2000, 30);
delay(750);
noTone(11);
}
void WaterFull_Tone() {
tone(11, 200, 25);
delay(50);
noTone(11);
delay(25);
tone(11, 250, 25);
delay(25);
noTone(11);
}
void CutOff_Tone() {
tone(11, 2200, 50); // Pin, Frequency, duration
digitalWrite(LED_CutOff, HIGH); // LED CutOff
delay(50);
noTone(11);
digitalWrite(LED_CutOff, LOW); // LED CutOff
delay(400);
}
void WaterOverload_Tone() {
tone(11, 220, 25);
delay(50);
noTone(11);
delay(40);
tone(11, 280, 25);
delay(20);
noTone(11);
}