PROJECT SMART HYDROPONIC VERSI-2
PROJECT SMART HYDROPONIC VERSI-2
//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, 20, 4);
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);
int setTDS = 0;
float setpHmin = 0.0;
float setpHmax = 0.0;
int bintang = 0;
int lcdBaris = 9;
int lcdBarispH = 12;
String dataTDS = "";
String dataminpH1 = "";
String datamaxpH = "";
bool irigasi = false;
bool nutrisi = false;
bool toggleBuzz = false;
bool ledLcd = true;
bool bunyi = false;
unsigned long last = 0L;
float nilaiTDS, nilaipH;
bool inputAsamBasa = HIGH;
bool toggleAsam = false;
bool toggleBasa = false;
void setup(){
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(9, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(8, OUTPUT);
pinMode(A3, INPUT_PULLUP);
pinMode(0, INPUT_PULLUP);
digitalWrite(3, LOW);
digitalWrite(2, LOW);
digitalWrite(9, LOW);
digitalWrite(A2, LOW);
noTone(8);
EEPROM.get(0, setTDS);
EEPROM.get(2, setpHmin);
EEPROM.get(6, setpHmax);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" SMART HYDROPONIC ");
lcd.setCursor(0,1);
lcd.print(" PETANIKODING ");
lcd.setCursor(0,2);
lcd.print(" M. AFDAL ZIKRI ");
lcd.setCursor(0,3);
lcd.print(" BPVP BELITUNG ");
delay(2000);
lcd.clear();
}
void loop(){
if(digitalRead(A3) == LOW && inputAsamBasa == HIGH){
delay(50);
toggleAsam = !toggleAsam;
digitalWrite(9, toggleAsam);
if(toggleAsam){
lcd.setCursor(0,3);
lcd.print("pA");
}
else {
lcd.setCursor(0,3);
lcd.print(" ");
}
}
if(digitalRead(0) == LOW && inputAsamBasa == HIGH){
delay(50);
toggleBasa = !toggleBasa;
digitalWrite(A2, toggleBasa);
if(toggleBasa){
lcd.setCursor(3,3);
lcd.print("pB");
}
else {
lcd.setCursor(3,3);
lcd.print(" ");
}
}
char key = keypad.getKey();
if(bunyi){
lcd.setCursor(18,3);
lcd.print("C");
if(nilaiTDS < setTDS - (setTDS * 0.1) || nilaiTDS > setTDS + (setTDS * 0.1) || nilaipH < setpHmin - (setpHmin *0.1) ||
nilaipH > setpHmax + (setpHmax *0.1)){
buzz();
}
else noTone(8);
}
else {
lcd.setCursor(18,3);
lcd.print(" ");
noTone(8);
}
if (bintang == 0) {
tampilUtama();
}
if (key != NO_KEY) {
if(key == 'A'){
irigasi = !irigasi;
digitalWrite(3, irigasi);
if(irigasi){
lcd.setCursor(16,3);
lcd.print("A");
}
else{
lcd.setCursor(16,3);
lcd.print(" ");
}
}
if(key == 'D'){
nutrisi = !nutrisi;
digitalWrite(2, nutrisi);
if(nutrisi){
lcd.setCursor(19,3);
lcd.print("D");
}
else{
lcd.setCursor(19,3);
lcd.print(" ");
}
}
if(key == 'B'){
ledLcd = !ledLcd;
if(ledLcd) {
lcd.backlight();
lcd.setCursor(17,3);
lcd.print("B");
}
else {
lcd.noBacklight();
lcd.setCursor(17,3);
lcd.print(" ");
}
}
if(key == 'C'){
bunyi = !bunyi;
}
if (key == '*') {
bintang++;
if(bintang > 3) {
bintang = 0;
}
lcd.clear();
lcdBaris = 9;
}
if (bintang == 1) {
lcd.setCursor(0,3);
lcd.print(" Simpan -> Tekan # ");
lcd.setCursor(0,1);
lcd.print("SET PPM: ");
satu(key);
}
if (bintang == 2) {
lcd.setCursor(0,0);
lcd.print(" ex: 65 -> 6.5 ");
lcd.setCursor(0,3);
lcd.print(" Simpan -> Tekan # ");
lcd.setCursor(0,2);
lcd.print("SET pH Min: ");
dua(key);
}
if (bintang == 3){
lcd.setCursor(0,0);
lcd.print(" ex: 65 -> 6.5 ");
lcd.setCursor(0,3);
lcd.print(" Simpan -> Tekan # ");
lcd.setCursor(0,2);
lcd.print("SET pH Max: ");
tiga(key);
}
}
}
void tampilUtama() {
int bacaTDS = analogRead(A1);
nilaiTDS = map(bacaTDS, 0.0, 1023.0, 0.0, 2000.0);
int bacapH = analogRead(A0);
nilaipH = map(bacapH, 0.0, 1023.0, 0.0, 14.0);
lcd.setCursor(0,0);
lcd.print("PPM: " + String(nilaiTDS,0) + " ");
lcd.setCursor(12,0);
lcd.print("pH: " + String(nilaipH,0) + " ");
lcd.setCursor(0,1);
lcd.print("SET PPM: " + String(setTDS) + " ");
lcd.setCursor(0,2);
lcd.print("SET pH : " + String(setpHmin,1) + "-");
lcd.print(String(setpHmax,1)+" ");
}
void satu(char key) {
if (key >= '0' && key <= '9') {
lcd.setCursor(lcdBaris,1);
lcd.print(key);
dataTDS += key;
lcdBaris++;
}
if (key == '#') {
if (dataTDS.length() > 4) {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Format Angka Salah! ");
lcd.setCursor(0, 2);
lcd.print(" Ulangi Lagi! ");
delay(800);
bintang = 0;
lcd.clear();
dataTDS = "";
lcdBaris = 9;
}
else {
setTDS = dataTDS.toInt();
EEPROM.put(0, setTDS);
bintang = 0;
lcd.clear();
dataTDS = "";
lcdBaris = 9;
}
}
}
void dua(char key){
if (key >= '0' && key <= '9') {
lcd.setCursor(lcdBarispH,2);
lcd.print(key);
dataminpH1 += key;
lcdBarispH++;
}
if (key == '#') {
if(dataminpH1 == "10"){
setpHmin = dataminpH1.toFloat();
EEPROM.put(2, setpHmin);
bintang = 0;
lcd.clear();
dataminpH1 = "";
lcdBarispH = 12;
}
else if(dataminpH1.length() < 4){
if(dataminpH1.length() == 2){
setpHmin = dataminpH1.toFloat()/10;
EEPROM.put(2, setpHmin);
bintang = 0;
lcd.clear();
dataminpH1 = "";
}
else if(dataminpH1.length() == 3 && dataminpH1.charAt(0) == '1'){
setpHmin = dataminpH1.toFloat()/10;
EEPROM.put(2, setpHmin);
bintang = 0;
lcd.clear();
dataminpH1 = "";
lcdBarispH = 12;
}
else if(dataminpH1.length() == 1){
setpHmin = dataminpH1.toFloat();
EEPROM.put(2, setpHmin);
bintang = 0;
lcd.clear();
dataminpH1 = "";
lcdBarispH = 12;
}
else {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Format Angka Salah! ");
lcd.setCursor(0, 2);
lcd.print(" Ulangi Lagi! ");
delay(800);
bintang = 0;
lcd.clear();
dataminpH1 = "";
lcdBarispH = 12;
}
}
}
}
void tiga(char key){
if (key >= '0' && key <= '9') {
lcd.setCursor(lcdBarispH,2);
lcd.print(key);
datamaxpH += key;
lcdBarispH++;
}
if (key == '#') {
if(datamaxpH == "10"){
setpHmax = datamaxpH.toFloat();
EEPROM.put(6, setpHmax);
bintang = 0;
lcd.clear();
datamaxpH = "";
lcdBarispH = 12;
}
else if(datamaxpH.length() < 4){
if(datamaxpH.length() == 2){
setpHmax = datamaxpH.toFloat()/10;
EEPROM.put(6, setpHmax);
bintang = 0;
lcd.clear();
datamaxpH = "";
}
else if(datamaxpH.length() == 3 && datamaxpH.charAt(0) == '1'){
setpHmax = datamaxpH.toFloat()/10;
EEPROM.put(6, setpHmax);
bintang = 0;
lcd.clear();
datamaxpH = "";
lcdBarispH = 12;
}
else if(datamaxpH.length() == 1){
setpHmax = datamaxpH.toFloat();
EEPROM.put(6, setpHmax);
bintang = 0;
lcd.clear();
datamaxpH = "";
lcdBarispH = 12;
}
else {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Format Angka Salah! ");
lcd.setCursor(0, 2);
lcd.print(" Ulangi Lagi! ");
delay(800);
bintang = 0;
lcd.clear();
datamaxpH = "";
lcdBarispH = 12;
}
}
}
}
void buzz(){
if (millis() - last >= 500){
toggleBuzz = !toggleBuzz;
last = millis();
}
if (toggleBuzz){
tone(8, 600,300);
}
else{
noTone(8);
}
}