LED Flackert mit RTC / Textuhr

Hallo Zusammen,

ich möchte eine Textuhr bauen, aber leider flackern ein paar LEDs und ich kann es mir nicht erklären. Die Minute 10 und 20 nach flackert. Die gleichen LEDs flackern aber nicht bei 30, 20, 10 Minuten vor jeweilige Stunde. Über Tipps wäre ich dankbar!

Der Teil, um die LEDs anzusteuern sieht so aus:

// "ES IST" Anzeige___"ES IST" Anzeige___"ES IST" Anzeige___"ES IST" Anzeige___

  // Text "Es ist" ist nur bis Minute 30 an _______________________
  if (minute < 61) {
    digitalWrite(38, HIGH);
  }
  else
    digitalWrite(38, LOW);

  //STUNDEN___STUNDEN____STUNDEN____STUNDEN___STUNDEN___STUNDEN______________________

  //Ziffer "8" ist von 19:30 Uhr bis 20 Uhr an___________________________
  if (stunde == 19 && minute >= 30) {
    digitalWrite(32, HIGH);
  }
  else
    digitalWrite(32, LOW);
  //________________________________________

  //Ziffer "8" ist von 20 Uhr bis 20:30 Uhr an__________________________
  if (stunde == 20 && minute < 30)  {
    digitalWrite(32, HIGH);
  }
  else
    digitalWrite(32, LOW);
  //________________________________________

  //Ziffer "9" ist von 20:30 Uhr bis 21 Uhr an___________________________
  if (stunde == 20 && minute >= 30) {
    digitalWrite(30, HIGH);
  }
  else
    digitalWrite(30, LOW);
  //________________________________________

  //Ziffer "9" ist von 21 Uhr bis 21:30 Uhr an___________________________
  if (stunde == 21 && minute < 30) {
    digitalWrite(30, HIGH);
  }
  else
    digitalWrite(30, LOW);
  //________________________________________


  //Ziffer "10" ist von 21:30 Uhr bis 22 Uhr an___________________________
  if (stunde == 21 && minute >= 30)  {
    digitalWrite(28, HIGH);
  }
  else
    digitalWrite(28, LOW);
  //________________________________________

  //Ziffer "10" ist von 22 Uhr bis 22:30 Uhr an___________________________
  if (stunde == 22 && minute < 30) {
    digitalWrite(28, HIGH);
  }
  else
    digitalWrite(28, LOW);
  //________________________________________


  //__MINUTEN____MINUTEN____MINUTEN____MINUTEN____MINUTEN____MINUTEN

  //Minuten Angabe  "10" ist an____________________________
  if (minute >= 10 && minute < 20) {
    digitalWrite(22, HIGH);
  }
  else
    digitalWrite(22, LOW);
  //________________________________________

  //Minuten Angabe  "20" ist an____________________________
  if (minute >= 20 && minute < 30) {
    digitalWrite(24, HIGH);
  }
  else
    digitalWrite(24, LOW);
  //________________________________________

  //Minuten Angabe  "30" ist an____________________________
  if (minute >= 30 && minute < 40) {
    digitalWrite(26, HIGH);
  }
  else
    digitalWrite(26, LOW);
  //________________________________________

  //Minuten Angabe  "20" ist an______________________________
  if (minute >= 40 && minute < 50) {
    digitalWrite(24, HIGH);
  }
  else
    digitalWrite(24, LOW);
  //________________________________________

  //Minuten Angabe  "10" ist an______________________________
  if (minute >= 50 && minute <= 60) {
    digitalWrite(22, HIGH);
  }
  else
    digitalWrite(22, LOW);
  //________________________________________

  //__NACH___VOR___NACH___VOR___NACH___VOR___NACH___VOR___NACH___VOR___NACH___VOR___

  //Info "nach" ist an__________________________________________________
  if (minute >= 10 && minute < 30) {
    digitalWrite(36, HIGH);
  }
  else
    digitalWrite(36, LOW);
  //________________________________________

  //Info "vor" ist an__________________________________________________
  if (minute >= 30 && minute <= 60) {
    digitalWrite(34, HIGH);
  }
  else
    digitalWrite(34, LOW);
  //________________________________________

}

Hi

//Ziffer "8" ist von 19:30 Uhr bis 20 Uhr an___________________________
  if (stunde == 19 && minute >= 30) {
    digitalWrite(32, HIGH);
  }
  else
    digitalWrite(32, LOW);
  //________________________________________

  //Ziffer "8" ist von 20 Uhr bis 20:30 Uhr an__________________________
  if (stunde == 20 && minute < 30)  {
    digitalWrite(32, HIGH);
  }
  else
    digitalWrite(32, LOW);

Mindestens hier schaltest Du 'Ziffer 8' von 19:30 bis 20:00 AN - AUS
Danach, zumindest bis 20:30 AUS - AN

Weiter habe ich nicht geschaut - Das fiel mir recht deutlich ins Auge.

Gib diesen 'magic numbers' sprechende Namen, z.B. byte const pin_ziffer_8=32; digitalWrite(_pin_ziffer_8, LOW);
Und Male Dir Mal auf, wann welche 'Ziffer' den Zustand wechselt - hier hast Du je KEINEN Wechsel um 20:00h - weshalb Du auch nicht auf diese Zeit prüfen solltest.

MfG

Vielen Dank für die schnelle Antwort Postmaster, allerdings ist es gewollt, dass der Pin 32 von 19:30 bis 20:30 Uhr auf High steht.

Es ist 30 vor 8
Es ist 20 vor 8
Es ist 10 vor 8
Es ist 8
Es ist 10 nach 8
Es ist 20 nach 8

Andere LEDs sollen dann folgende Wörter bzw. Zahlen zum leuchten bringen.

Auffallend ist, dass die LED an Pin 32 im gleichen Rhythmus flackert, wie sich die real time clock aktualisiert. Weiss aber nicht warum die ausgeht?

Ich frage mich gerade, ob ich die LED auf 19:30 permanent bis 20:30 Uhr anschalten kann. Aber wie mach ich das? Mit if... Else???

Vielen Dank für neue Infos.

Ich frage mich gerade, ob ich die LED auf 19:30 permanent bis 20:30 Uhr anschalten kann. Aber wie mach ich das? Mit if... Else???

Man kann die if Bedingung komplizierter machen, oder z.B. sowas

int zeit = stunde*100 + minute; // Man kann auch *60 machen, dann sind die Vergleichswerte nur schwerer zu lesen
digitalWrite(32, 1930 <= zeit && zeit < 2030); // true (HIGH) 19:30 ... 20:29 sonst LOW

wie immer: ungetestet

Danke für den Tipp Michael,

durch deine vorgeschlagene Schreibweise verkürzt sich mein Code um ein gutes Stück. Allerdings ist das Flackern der LED noch da. Vermutlich liegt das Problem in der Aktualisierung der Real Time Clock. Z. B. im Wechsel von 13:33:11 auf 13:33:12 hat die if-Funktion kein Wert und die LED geht aus. Soweit meine Vermutung. Folglich wäre eine Code super, der z. B. auf 13:30:00 die LED auf HIGH setzt und erst wieder bei 14:30:00 auf LOW. Wie könnte so was gehen?

Rechne die Zeit in Minuten (Sekunden) um und kontrolliere diese. So vereinfachen sich die IF Bedingungen dramatisch.
Grüße Uwe

Das leuchtet mir ein Uwe,

allerdings verstehe ich nicht wie das mein Problem mit der flackernden LED lösen soll?

Grüße David

Hi

2.ter VErsuch:

//Ziffer "8" ist von 19:30 Uhr bis 20 Uhr an
  if (stunde == 19 && minute >= 30) {
    digitalWrite(32, HIGH);                                     //19:35, die LED geht HIGH
  }
  else
    digitalWrite(32, LOW);                                     //20:15, die LED geht LOW
  //Ziffer "8" ist von 20 Uhr bis 20:30 Uhr an
  if (stunde == 20 && minute < 30)  {
    digitalWrite(32, HIGH);                                    //20:15, die LED geht HIGH
  }
  else
    digitalWrite(32, LOW);                                    //19:35, die LED geht LOW

Deine (in diesem Snipped) erste Abfrage prüft, ob die Stunde 19 ist - wenn NICHT, geht die LED auf JEDEN FALL erst Mal aus
Deine (dito) 2.te Abfrage prüft, ob die Stunde 20 ist - wenn NICHT, geht die LED auf JEDEN FALL AUS - folgende Prüfungen könnten Diese wieder ein schalten, so weit habe ich den Code nicht durchgesucht.

Du willst, daß die LED zwischen 19:30...19:59 an ist
Du willst, daß diese LED zwischen 20:00...20:29 an ist
Das ist so weit noch kein Problem, ABER Du darfst die LED NICHT ausschalten, wenn nur EINE dieser Bedingungen nicht erfüllt ist.

Male Dir auf, WANN jedes einzelne Wort beleuchtet sein soll - und schreibe die Abfragen so, daß Das gegeben ist.

MfG

Postmaster hat zwar recht, allerdings passiert das LOW/HIGH setzen so schnell, dass es nicht sichtbar ist (höchstens als dimmen).

Wie so oft, wird es wohl ein Problem woanders sein. ZB da wo die RTC Änderung erkannt wird.