Sorry for my bad english, but I want this code to have the PIN OFF time to be default in 3 seconds, basically it won't ask me the PIN OFF time anymore. I can't integrate the 3 seconds off in this, maybe someone can help? I'm just a newbie and I wanted to test this code out. This code was made by Hacktuber so credits to him. Any help will be much appreciated.
In this image, I want the PIN 1-8 OFF to be default into 3 seconds, so, the program will not gonna ask me the PIN OFF time anymore. I'll provide more infos, just ask me guys
// ===============================
// ATR v5
// © 2016 Triyan W. Nugroho
// ===============================
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <virtuabotixRTC.h>
// relay pins
#define relay1 0
#define relay2 1
#define relay3 2
#define relay4 3
#define relay5 10
#define relay6 11
#define relay7 12
#define relay8 13
// define pins of RTC module
#define rtcVCC A5
#define rtcGND A4
#define rtcSCLK A3
#define rtcIO A2
#define rtcCE A1
// creation of RTC object
virtuabotixRTC myRTC(rtcSCLK, rtcIO, rtcCE);
// keypad definitions
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// mode definitions
#define modeSETUP 1
#define modeNORMAL 2
int mode = 1; // set default mode
// EEPROM adrressing
#define adr1ON 2
#define adr1OF 4
#define adr2ON 6
#define adr2OF 8
#define adr3ON 10
#define adr3OF 12
#define adr4ON 14
#define adr4OF 16
#define adr5ON 18
#define adr5OF 20
#define adr6ON 22
#define adr6OF 24
#define adr7ON 26
#define adr7OF 28
#define adr8ON 30
#define adr8OF 32
int eepromMin = 0;
int eepromHour = 0;
int eepromHourON = 0;
int eepromHourOF = 0;
int eepromMinON = 0;
int eepromMinOF = 0;
// pins used on LCD Keypad Shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key = 0;
int adc_key_in = 0;
void setup() {
// inisialisasi serial utk debugging
// Serial.begin(9600);
// jadikan semua digital pin sbg output
for (int i = 0; i <= 13; i++) {
pinMode(i, OUTPUT);
}
// activate RTC module
pinMode(rtcVCC, OUTPUT);
pinMode(rtcGND, OUTPUT);
pinMode(rtcSCLK, OUTPUT);
pinMode(rtcIO, OUTPUT);
pinMode(rtcCE, OUTPUT);
digitalWrite(rtcVCC, HIGH);
digitalWrite(rtcGND, LOW);
delay(500);
// lcd initialization
lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(4, 0);
// tampilkan jam:menit:detik
displayTime();
// set & tampilkan relay berdasarkan data eeprom
lcd.setCursor(0, 1);
lcd.print("1");
relayAction(adr1ON, adr1OF, 1, relay1);
lcd.setCursor(2, 1);
lcd.print("2");
relayAction(adr2ON, adr2OF, 3, relay2);
lcd.setCursor(4, 1);
lcd.print("3");
relayAction(adr3ON, adr3OF, 5, relay3);
lcd.setCursor(6, 1);
lcd.print("4");
relayAction(adr4ON, adr4OF, 7, relay4);
lcd.setCursor(8, 1);
lcd.print("5");
relayAction(adr5ON, adr5OF, 9, relay5);
lcd.setCursor(10, 1);
lcd.print("6");
relayAction(adr6ON, adr6OF, 11, relay6);
lcd.setCursor(12, 1);
lcd.print("7");
relayAction(adr7ON, adr7OF, 13, relay7);
lcd.setCursor(14, 1);
lcd.print("8");
relayAction(adr8ON, adr8OF, 15, relay8);
// jika user menekan tombol SELECT, masuk menu setting
if (read_LCD_buttons() == btnSELECT) {
while (read_LCD_buttons() == btnSELECT);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("UP. TIME SETTING");
lcd.setCursor(0, 1);
lcd.print("DN. PIN SETTING");
while (read_LCD_buttons() == btnNONE);
if (read_LCD_buttons() == btnUP) {
while (read_LCD_buttons() == btnUP);
setRTC(); // jika user menekan tombol UP, masuk menu setting RTC
}
else if (read_LCD_buttons() == btnDOWN) {
while (read_LCD_buttons() == btnDOWN);
setPin(); // jika user menekan tombol DOWN, masuk menu setting PIN
}
}
}
void relayAction(int adrON, int adrOF, int pos, int pin) {
myRTC.updateTime();
int MinToday = (myRTC.hours * 60) + myRTC.minutes;
int MinEprON = (EEPROM.read(adrON) * 60) + EEPROM.read(adrON + 1);
int MinEprOF = (EEPROM.read(adrOF) * 60) + EEPROM.read(adrOF + 1);
lcd.setCursor(pos, 1);
if (MinEprON == MinEprOF) { // jika sama berarti tidak dipake
lcd.print(" ");
digitalWrite(pin, LOW);
}
else if (MinEprON < MinEprOF) { // kondisi ON terjadi di hari yg sama
if ((MinEprON <= MinToday) && (MinEprOF > MinToday)) {
lcd.print("*");
digitalWrite(pin, LOW);
}
else {
lcd.print("-");
digitalWrite(pin, HIGH);
}
}
else if (MinEprON > MinEprOF) { // kondisi ON terjadi sampai besoknya
if ((MinEprON >= MinToday) || (MinEprOF < MinToday)) {
lcd.print("*");
digitalWrite(pin, LOW);
}
else {
lcd.print("-");
digitalWrite(pin, HIGH);
}
}
}
/* ================================================== */
/* SETUP Functions */
/* ================================================== */
void setRTC() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIME SETTING");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CURRENT ");
setupShowValue(myRTC.hours, myRTC.minutes, 0);
lcd.setCursor(0, 1);
lcd.print("NEW ");
myRTC.updateTime();
setupShowValue(myRTC.hours, myRTC.minutes, 1);
while (read_LCD_buttons() == btnNONE);
setupChooseValueSetRTC(myRTC.hours, myRTC.minutes, 1);
lcd.setCursor(0,0);
lcd.print("SETTINGS SAVED ");
delay(1000);
lcd.clear();
}
void setPin() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN SETTING");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN 1 ON");
eepromHour = EEPROM.read(adr1ON);
eepromMin = EEPROM.read(adr1ON + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 0);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr1ON, 0);
lcd.setCursor(0, 1);
lcd.print("PIN 1 OFF");
eepromHour = EEPROM.read(adr1OF);
eepromMin = EEPROM.read(adr1OF + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 1);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr1OF, 1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN 2 ON");
eepromHour = EEPROM.read(adr2ON);
eepromMin = EEPROM.read(adr2ON + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 0);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr2ON, 0);
lcd.setCursor(0, 1);
lcd.print("PIN 2 OFF");
eepromHour = EEPROM.read(adr2OF);
eepromMin = EEPROM.read(adr2OF + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 1);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr2OF, 1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN 3 ON");
eepromHour = EEPROM.read(adr3ON);
eepromMin = EEPROM.read(adr3ON + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 0);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr3ON, 0);
lcd.setCursor(0, 1);
lcd.print("PIN 3 OFF");
eepromHour = EEPROM.read(adr3OF);
eepromMin = EEPROM.read(adr3OF + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 1);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr3OF, 1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN 4 ON");
eepromHour = EEPROM.read(adr4ON);
eepromMin = EEPROM.read(adr4ON + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 0);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr4ON, 0);
lcd.setCursor(0, 1);
lcd.print("PIN 4 OFF");
eepromHour = EEPROM.read(adr4OF);
eepromMin = EEPROM.read(adr4OF + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 1);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr4OF, 1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN 5 ON");
eepromHour = EEPROM.read(adr5ON);
eepromMin = EEPROM.read(adr5ON + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 0);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr5ON, 0);
lcd.setCursor(0, 1);
lcd.print("PIN 5 OFF");
eepromHour = EEPROM.read(adr5OF);
eepromMin = EEPROM.read(adr5OF + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 1);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr5OF, 1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN 6 ON");
eepromHour = EEPROM.read(adr6ON);
eepromMin = EEPROM.read(adr6ON + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 0);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr6ON, 0);
lcd.setCursor(0, 1);
lcd.print("PIN 6 OFF");
eepromHour = EEPROM.read(adr6OF);
eepromMin = EEPROM.read(adr6OF + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 1);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr6OF, 1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN 7 ON");
eepromHour = EEPROM.read(adr7ON);
eepromMin = EEPROM.read(adr7ON + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 0);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr7ON, 0);
lcd.setCursor(0, 1);
lcd.print("PIN 7 OFF");
eepromHour = EEPROM.read(adr7OF);
eepromMin = EEPROM.read(adr7OF + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 1);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr7OF, 1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN 8 ON");
eepromHour = EEPROM.read(adr8ON);
eepromMin = EEPROM.read(adr8ON + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 0);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr8ON, 0);
lcd.setCursor(0, 1);
lcd.print("PIN 8 OFF");
eepromHour = EEPROM.read(adr8OF);
eepromMin = EEPROM.read(adr8OF + 1);
if (eepromHour >= 24) eepromHour = 0;
if (eepromMin >= 60) eepromMin = 0;
setupShowValue(eepromHour, eepromMin, 1);
while (read_LCD_buttons() == btnNONE);
setupChooseValue(eepromHour, eepromMin, adr8OF, 1);
lcd.clear();
}
void setupChooseValue(int HourNew, int MinNew, byte Address, byte Pos) {
while (read_LCD_buttons() != btnSELECT) {
if (read_LCD_buttons() == btnRIGHT) {
if (HourNew < 23) {
HourNew++;
}
}
else if (read_LCD_buttons() == btnLEFT) {
if (HourNew > 0) {
HourNew--;
}
}
else if (read_LCD_buttons() == btnUP) {
if (MinNew < 59) {
MinNew++;
}
}
else if (read_LCD_buttons() == btnDOWN) {
if (MinNew > 0) {
MinNew--;
}
}
setupShowValue(HourNew, MinNew, Pos);
delay(150);
}
while (read_LCD_buttons() != btnNONE); // tunggu sampai tombol rilis
EEPROM.write(Address, HourNew);
EEPROM.write(Address + 1, MinNew);
delay(150);
}
void setupChooseValueSetRTC(int HourNew, int MinNew, byte Pos) {
while (read_LCD_buttons() != btnSELECT) {
if (read_LCD_buttons() == btnRIGHT) {
if (HourNew < 23) {
HourNew++;
}
}
else if (read_LCD_buttons() == btnLEFT) {
if (HourNew > 0) {
HourNew--;
}
}
else if (read_LCD_buttons() == btnUP) {
if (MinNew < 59) {
MinNew++;
}
}
else if (read_LCD_buttons() == btnDOWN) {
if (MinNew > 0) {
MinNew--;
}
}
setupShowValue(HourNew, MinNew, Pos);
delay(150);
}
while (read_LCD_buttons() != btnNONE); // tunggu sampai tombol rilis
myRTC.setDS1302Time(00, MinNew, HourNew, 6, 10, 1, 2014);
delay(150);
}
void setupShowValue(int Hour, int Min, int Pos) {
lcd.setCursor(11, Pos);
print2digits(Hour);
lcd.print(":");
print2digits(Min);
}
/* ================================================== */
/* LCD Functions */
/* ================================================== */
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 150) return btnUP;
if (adc_key_in < 300) return btnDOWN;
if (adc_key_in < 500) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;
return btnNONE; // when all others fail, return this.
}
void eeprom_write_int(int p_address, int p_value) {
byte lowByte = ((p_value >> 0) & 0xFF);
byte highByte = ((p_value >> 8) & 0xFF);
EEPROM.write(p_address, lowByte);
EEPROM.write(p_address + 1, highByte);
}
unsigned int eeprom_read_int(int p_address) {
byte lowByte = EEPROM.read(p_address);
byte highByte = EEPROM.read(p_address + 1);
return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
}
void displayTime() {
myRTC.updateTime();
print2digits(myRTC.hours);
lcd.print(":");
print2digits(myRTC.minutes);
lcd.print(":");
print2digits(myRTC.seconds);
}
void print2digits(int number) {
if (number >= 0 && number < 10)
lcd.print('0');
lcd.print(number, DEC);
}