Timer Relay LCD Shield - Hintergrundbeleuchtung

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?

Hier der restliche Code:

  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();

}


}[/

Am einfachsten öffnet ihr einfach den Link im Youtubevideo. Dort findet man einen Downloadlink zum Code. Der ist etwas zu lang um ihn hier rein zu kopieren.

Ja, prima.

Dann würde ich sagen, lege mal los.

Oder gibt es eine Frage, die du noch nicht mitteilen möchtest ?
Und den Sketch kannst du auch alt text-Datei hier anhängen.
Aber nur, wenn er zu groß ist.

Ist so nicht gern gesehen, wenn wir alle irgendwo downloaden müssen.

Wie wäre es, wenn jemand mal eine Arduino-betriebene Glaskugel mit Hellseher-Fähigkeiten entwickeln würde? Müsste doch DER Kassenschlager werden :slight_smile:

@FloMoris:
Ernsthaft, wie können wir dir helfen, wenn du nicht sagst, was du wie verändern willst und wo du aktuell ein Problem hast, mit dem du nicht weiterkommst.

Wie wäre es, wenn jemand mal eine Arduino-betriebene Glaskugel mit Hellseher-Fähigkeiten entwickeln würde?

Meine Kristallkugel funktioniert!

Und die sagt:
Die Beleuchtung geht mit Relais5 an und aus.

Und sie sagt dazu noch:
Man kann die Hintergrundbeleuchtung nur mit Trick abschalten, da der Entwickler des Keypad Shields einen derben Bock geschossen hat.

Tada:

combie:
Arduino Shields....
(ich hasse Arduino Shields)

Gerade Heute hatte ich ein "Schilder-Abenteuer"!

Hier mal die lustige Geschichte:

Es war einmal, ein Sainsmart LCD Keypad Shield....
Lang lag es in der Wühlkiste.
Jetzt sollte es zum Einsatz kommen.

Unter den ganze Anforderungen:
Nach dem ersten Tastendruck soll die Hintergrundbeleuchtung aufblenden.
Auf die Art Bereitschaft signalisieren.
Also: Dimmen auf Pin 10.

Nix da!
Fehlfunktionen, und auch zwischendurch Resets.

Kleine Recherche, Schaltplan schauen, und dann war klar, da muss eine Diode rein. Der Entwickler hat Mist gebaut.

Also Leiterbahn aufgekratzt und Diode dazwischen.
Tot!
Nix mehr Hintergrundbeleuchtung.

Der versteckte Transistor tut nix mehr!
Tot!

Warum? KA. Vielleicht falsche Leiterbahn gekappt....
Kaputt gelötet, oder vorher schon gegrillt, wg zu hohem Basisstrom.
...egal...

Also die Ganze Schaltung außen rum als Drahtverhau neu aufgebaut, diesmal mit Germanium Diode.
Und Voilà, es tut!
Jetzt dimmt es, ohne dass der kleine ATMega an des Todes Grenze geführt wird.
Sieht fürchterlich aus, aber tut.


Es gibt einige verschieden Shields, von anderen Herstellern, mit genau diesem Problem!

Problembeschreibung:

  1. Pin 10 auf Input: Kein Problem (Beleuchtung hell)
  2. Pin 10 auf OUTPUT und Low: kein Problem (Beleuchtung dunkel)
  3. Pin 10 auf OUTPUT und High: Problem! Pin wird über Basis kurzgeschlossen, Überstrom

Beim Dimmen/PWM wird zwischen 2 und 3 gewechselt.

:slight_smile:

Sorry. Dumm gelaufen. Ja war mein Fehler. Habe wohl meine eigentliche Frage durch hin und her kopieren irgendwie gelöscht. War schon etwas spät.....

Aber die Kristallkugel hat funktioniert!

Mein Problem war das beim Start des Arduinos das Display kurz aufblinkt und dann wieder dunkel ist. Habe jetzt den PIN 10 entfernt. Jetzt läuft es so wie es soll.

Habe auch schon eine Antwort des Entwicklers erhalten:

You have to disconnect LCD Keypad pin which is connected to Arduino pin 10. You can cut or bend the pin.

Ich denke das Problem liegt darin das der Entwickler des Codes den Pin 10 für ein Relais nutzt.

Danke trotzdem!