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