PROJECT SMART HYDROPONIC VERSI-1
PROJECT SMART HYDROPONIC VERSI-1
//CREATED BY M. AFDAL ZIKRI
//BPVP BELITUNG
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
const int baris = 4;
const int kolom = 4;
LiquidCrystal_I2C lcd(0x27, 16, 2);
char kar [4][4]= {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinBaris [baris] = {13,12,11,10};
byte pinKolom [kolom] = {7,6,5,4};
Keypad keypad = Keypad(makeKeymap(kar), pinBaris, pinKolom, baris, kolom);
String data = "";
int kursor = 9;
bool bled = false;
bool led = false;
bool nutrisi = false;
int baca;
bool buzz = false;
float sensor;
unsigned long last =0;
bool lcdOn = true;
bool modeKedip = false;
unsigned int lastKedip = 0;
byte ceklis[8] = {
B01110,
B11011,
B10101,
B10101,
B11111,
B00100,
B01110,
B11111
};
byte noCeklis[8] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000
};
void setup(){
pinMode(8, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
digitalWrite(3, LOW);
digitalWrite(2, LOW);
noTone(8);
EEPROM.get(0, baca);
lcd.init();
lcd.createChar(1, ceklis);
lcd.createChar(2, noCeklis);
lcd.setCursor(0,0);
lcd.print("SET PPM: ");
lcd.print(baca);
}
void loop(){
sensor = analogRead(A1);
float volt = sensor * 5.0 / 1023.0;
float tds = volt * 2000 / 5.0;
lcd.setCursor(0,1);
lcd.print("PPM Air: ");
lcd.print(String(tds,0));
lcd.print(" ");
if(modeKedip){
kedip();
}
char tombol = keypad.getKey();
int hasil = tombol - '0';
if(hasil >= 0 && hasil <= 9) {
modeKedip = true;
lcd.setCursor(kursor,0);
lcd.print(hasil);
lcd.print(" ");
kursor++;
data += hasil;
}
switch(tombol){
case '*' :
EEPROM.put(0,0);
data = "";
kursor = 9;
lcd.noDisplay();
delay(200);
lcd.setCursor(9,0);
lcd.print(" ");
lcd.display();
modeKedip = true;
break;
case 'A':
led = !led;
digitalWrite(3, led);
break;
case 'D':
nutrisi = !nutrisi;
digitalWrite(2, nutrisi);
break;
case 'B':
if (bled){
lcd.noBacklight();
}
else{
lcd.backlight();
}
bled = !bled;
break;
case 'C' :
buzz = !buzz;
lcd.setCursor(15,1);
if(buzz) lcd.write(byte(1));
else lcd.write(byte(2));
break;
case '#':
modeKedip = false;
lcd.setCursor(9,0);
lcd.noDisplay();
delay(200);
if (data.length() <= 4) {
int nilai = data.toInt();
EEPROM.put(0, nilai);
EEPROM.get(0, baca);
lcd.print(baca);
lcd.print(" ");
}
else {
lcd.print("invalid ");
}
lcd.display();
kursor = 9;
data = "";
break;
}
if (buzz){
if(tds > baca +(baca*0.1) || tds < baca-(baca*0.1) ) {
if(millis()-last > 1000){
tone(8, 1000, 100);
last = millis();
}
}
else noTone(8);
}
else noTone(8);
}
void kedip() {
if (millis() - lastKedip >= 500) {
lastKedip = millis();
lcdOn = !lcdOn;
if (lcdOn) {
lcd.display();
} else {
lcd.noDisplay();
}
}
}