Hallo zusammen,
ich habe folgendes Projekt gefunden und möchte dies leicht umändern:
Hier der Code:
// ===============================
// 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);
code]
Nach langem hin und her habe ich jetzt endlich geschafft das Projekt auf meinen Arduino Mega zu laden.
Jetzt habe ich das Problem das nach dem Hochladen die Hintergrundbeleuchtung des Displays einmal an geht und dann direkt wieder aus. Die Zeichen sind noch immer zusehen.
Jemand eine Idee voran das liegen kann?