7-Segment Uhr einen LDR hinzufügen

Hallo zusammen ich bräuchte Hilfe bei einem Sketch ich möchte einer 7-Segment Uhr einen LDR hinzufügen. Der dann die Helligkeit der Anzeige in Abhängigkeit vom Umgebungslicht (nachts soll das Display dunkler sein als bei Tageslicht) anpasst.
Leider sind meine Kenntnisse was das angeht nicht die besten, vielleicht kann mir jemand beim umschreiben helfen.

/*
Dieser Code ist für das AT24C32 / DS1307 RTC-Modul und
4 Ziffern Sieben Segmentanzeigen.
Stellen Sie sicher, ob Sie eine gemeinsame Anode- oder Kathodenanzeige haben. (Ändern Sie @ Line 26)
 */
#include "Wire.h"
#include "SevSeg.h" //https://github.com/sparkfun/SevSeg/tree/master/src
#include <DS3231.h>
#define DS1307_ADDRESS 0x68
DS3231  rtc(SDA, SCL);

/////////////////////////////////////////////////////////////////////////

#define tombol_bOK A2             // OK-Schaltfläche Anpassen mit Ihrer PIN in Arduino, wo diese an einen analogen Pin angeschlossen ist
#define Jam_bDN A3           //Die Einstellungs Taste, die an der PIN in Ihrem Arduino angepasst ist, wo diese an einen analogen Pin 3 angeschlossen ist

int langkah;

//Erstelle Instanz
SevSeg display7seg;

int valor = 0;
byte zero = 0x00;
unsigned long timer;
void setup()
{
  rtc.begin();
  //rtc.setTime(12, 0, 0);     // Setzen Sie die Zeit auf 12:00:00 (24 Stunden Format)
  Wire.begin();
  //Kommentieren Sie diese Zeile, nachdem Sie das Datum festgelegt haben @ void TimeSelection() below
  //TimeSelection(); Unvollständige diese Zeile, wenn Sie die Zeit einstellen. Set time @ (line 66)


  pinMode(tombol_bOK, INPUT_PULLUP);                                 // PIN Modus als Eingabe mit internem Pull Up
  pinMode(Jam_bDN, INPUT_PULLUP);                                    // PIN Modus als Eingabe mit internem Pull Up

  //attachInterrupt(0, Setting, FALLING);

  //Ändern zu COMMON_ANODE OR  COMMON_CATHODE Wenn Sie ein gemeinsames Display haben.
  int displayType = COMMON_ANODE;
  pinMode(9, OUTPUT);
  int digit1 = 10;
  int digit2 = 11;
  int digit3 = 12;
  int digit4 = 13;

  int segA = 2;
  int segB = 3;
  int segC = 4;
  int segD = 5;
  int segE = 6;
  int segF = 7;
  int segG = 8;
  int segDP = A0;

  int numberOfDigits = 4;

  //Anzeige initialisieren
  display7seg.Begin(displayType, numberOfDigits, digit1, digit2, digit3, digit4, segA, segB, segC, segD, segE, segF, segG, segDP);

  //Helligkeit einstellen
  display7seg.SetBrightness(20);
  timer = millis();
}

void loop()
{
  char tempString[10]; //Wird für Sprintf verwendet
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
  int seconds = ConvertToDecimal(Wire.read());
  int minutes = ConvertToDecimal(Wire.read());
  int hours = ConvertToDecimal(Wire.read() & 0b111111);

  //////kodimgku set menit

  if (digitalRead(Jam_bDN) == LOW) {                               // Einstellung der Minutentaste
    delay(10); minutes++;
    rtc.setTime(hours, minutes, 0);
    if (minutes >= 60) {
      minutes = 0; // Min-Wert-Limit Mehr als 59 Zurück zu 0
      rtc.setTime(hours, minutes, 0);
    }
  }
  while (digitalRead(Jam_bDN) == LOW) {}                          /


  if (digitalRead(tombol_bOK) == LOW) {                               // Uhr Einstellungstaste
    delay(10);
    hours++;
    rtc.setTime(hours, minutes, 0);
    if (hours >= 24) {

      hours = 0; // Stundenwertlimit Größer als 23 Zurück zu 0
      rtc.setTime(hours, minutes, 0);
    }
  }
  while (digitalRead(tombol_bOK) == LOW) {}

  //////

  //rtc.setTime(Stunden, Minuten, 0);
  sprintf(tempString, "%02d%02d", hours, minutes);

  display7seg.DisplayString(tempString, 3);
  if (seconds == 1 || seconds == 3 || seconds == 5 || seconds == 7 || seconds == 9 || seconds == 11 || seconds == 13 || seconds == 15 || seconds == 17 || seconds == 19 || seconds == 21 ||
      seconds == 23 || seconds == 25 || seconds == 27 || seconds == 29 || seconds == 31 || seconds == 33 || seconds == 35 || seconds == 37 || seconds == 39
      || seconds == 41 || seconds == 43 || seconds == 45 || seconds == 47 || seconds == 49 ||
      seconds == 51 || seconds == 53 || seconds == 55 || seconds == 57 || seconds == 59 ) {
    digitalWrite(9, LOW);
  } else  {
    digitalWrite(9, HIGH);

  }


}

void TimeSelection()   //Wählen Sie Datum und Uhrzeit hier unten!!(line 69,70,71)
//nach der Einstellzeit auch Kommentarzeit TimeSelection() @ void setup
{
  byte seconds = 10; //Werte von 0 bis 59
  byte minutes = 38; //Werte von 0 bis 59
  byte hours = 3; //Werte von 0 bis 23
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //Stoppen Sie im CI, damit es die Daten empfangen kann

  //Die folgenden Zeilen schreiben im IC die Werte
  //Datum und Uhrzeit, die in den obigen Variablen platziert wurden
  Wire.write(ConvertToPCD(seconds));
  Wire.write(ConvertToPCD(minutes));
  Wire.write(ConvertToPCD(hours));
  Wire.write(zero);
  Wire.endTransmission();
}

byte ConvertToPCD(byte val)
{
  //Konvertieren von Dezimal in Binärdatei
  return ( (val / 10 * 16) + (val % 10) );
}

byte ConvertToDecimal(byte val)
{
  //Konvertieren von Binärdateien in Dezimalstellen
  return ( (val / 16 * 10) + (val % 16) );
}

Setze Deinen Sketch bitte direkt in Codetags in den Beitrag. Wie das geht, steht hier. Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Die Frage ist wie wurdes Du das Umsetzen ?
Kompliziert ist das nicht.

Da ist Dein Einsprung.
Der .SetBrightness(20) sorgt für die Helligkeit.

Jetzt einen LDR an einen Analogpin mit einem Spannungsteiler und das Eingangssignal des Analogpin gemapt und den den Festwert 20 durch durch diesen variablen Wert ersetzen.

Alternativ:
Anhand der Uhrzeit die 20 gegen irgendwas anderes ersetzen...

Hab vom Script schreiben nicht wirklich viel Ahnung, aber dachte den LDR an einen der Analogen Eingänge. Nur wie ich das dann in den Sketch bekomm ist das Problem.

Dein google kapott?
Meiner funktioniert
https://funduino.de/nr-6-fotowiderstand

Ja soweit war ich auch aber bekomm es einfach nicht zu laufen. Bin was das angeht Absoluter Noob.

So wie dort erklärt wird Schaft das ein Drittklässler, ok übertrieben aber trotz dem.
und statt die LED leuchten lassen änderst Du

display7seg.SetBrightness(20);

Wert,
Probieren, Studieren,

Versteh trotzdem nicht ganz was ersetzt werden muss. Sorry wenn ich mich etwas blöd anstelle. :thinking:

Die 20 in den Klammern.
Wie liest du den Wert des LDRs ein?

Mal mit der 20 rum spielen :wink:

Zeig mall wie der LDR angeklemmt ist, reicht auch Skizze mit Bleistift,.

Image1

Du brauchst bei sowas einen Spannungsteiler mit einem Festwiderstand und dem LDR. Nur dann kannst du auch eine Spannungsänderung messen. So fällt ja immer die gesamte Spannung am Widerstand ab

https://www.electronicsplanet.ch/berechnen-online/ldr-widerstand-anwendung.php

Schau mal wie in dem Beispiel der LDR angeklemmt wird, der Widerstand fehlt,
so wird das nicht funktionieren.

Okay also so in etwa...

Ja und nach dem Beispiel die Werte auslesen hell, dunkel.

Wenn du die werte hast dann Bauen wir das zusammen :wink:
habe kein LDR zu Hand

ich habe einen LDR mit einem Festwiderstand so verdrahtet:

VCC5-LDR-A2-10k-GND

und so mache ich die Helligkeitsregelung:

brightness = analogRead(ldrSensorPin) * 14 / 1024 + 1; 
lc.setIntensity(0, brightness);

Hab viel hin und her probiert aber bekomm es einfach nicht hin die LDR Funktion in mein Sketch zu Integrieren :unamused: da fehlt mir echt noch die Kenntnis. Kann jemand vielleicht starthilfe geben?