Also gut... Nur der Code ist ungekürzt und noch mit einigen auskommentierten Funktionen.
Das Programm ansich funktioniert so einigermassen. Wie "Whandall" schon sagte leuchten die LED´s sehr
schwach, werden also nur einmal kurz "angesteuert". Aber sobald ich ein delay einfüge kommt die DCF Dekodierung durcheinander, bzw läuft gar nicht.
Sollte es nicht anders gehen muss ich es mal mit einem Matrix IC 7219 probieren.
Als Board benutze ich Mega 2560.
Hier der noch unübersichtliche
Code
// DCF Uhr mit LCD 16x1 und LED Punktanzeige
#include <LiquidCrystal.h>
#include <Wire.h>
#include <DCF77.h>
#include <Time.h>
#define DCF_PIN 2 // DCF-Signal Input-Pin
#define DCF_INTERRUPT 0 // Interrupt number associated with pin
int flankUp = 0; //
int flankDown = 0; //
int PreviousflankUp; //
bool Up = false; //
const int Zahlenpins[] ={30,31,32,33,34,35,36,37,38}; // LED-Pins für Zahlen (Beispiel)
const int Massepins[] = {40,41,42,43,44,45}; // Masse - Pins
time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);
LiquidCrystal lcd(12, 13, 11, 7, 8, 9, 10); // RS, RW, E, D4, D5, D6, D7
byte AntenneSig[8] = // Antennen- Symbol mit Signal
{
B01110,
B10001,
B10101,
B01110,
B00100,
B00100,
B01110,
B11111};
byte Antenne[8] = // Antennen- Symbol ohne Signal
{
B00000,
B00000,
B00100,
B00100,
B00100,
B00100,
B01110,
B11111};
void setup() {
Wire.begin();
lcd.createChar(1,AntenneSig);
lcd.createChar(2,Antenne);
lcd.begin(8,2);
DCF.Start();
// LED-pins alle als OUTPUT deklarieren
for (int i = 0; i<9; i++)
{
pinMode(Zahlenpins[i],OUTPUT);
}
// ---------------------------------
// Massepins als OUTPUT deklarieren
for (int i = 0; i<6; i++)
{
pinMode(Massepins[i],OUTPUT);
}
//------------------------------------
pinMode(DCF_PIN, INPUT);
}
void loop() {
time_t DCFtime = DCF.getTime(); // Check if new DCF77 time is available
if (DCFtime!=0)
{
setTime(DCFtime);
}
// Ausgabe
// lcd.clear();
lcd.setCursor(0,0);
if(hour() < 10)
lcd.print("0");
lcd.print(hour());
lcd.print(":");
if(minute() < 10)
lcd.print("0");
lcd.print(minute());
lcd.print(":");
if(second() < 10)
lcd.print("0");
lcd.print(second());
// lcd.setCursor(0,1); // Test Zehner / Einer stelle heraus filtern
// lcd.print (hour()%10) ; // Test
lcd.setCursor (8,0);
lcd.print(" ");
lcd.setCursor(1,1);
if(day() < 10)
lcd.print("0");
lcd.print(day());
lcd.print(".");
if(month() < 10)
lcd.print("0");
lcd.print(month());
// lcd.print("");
//lcd.print(year());
// LED´s für Sekunde aufleuchten lassen
/* if (second()%10 ==1)
digitalWrite(A0, HIGH);
else
digitalWrite(A0, LOW);
if (second()%10 ==2)
digitalWrite(23, HIGH);
else
digitalWrite(23, LOW);
if (second()%10 ==3)
digitalWrite(22, HIGH);
else
digitalWrite(22, LOW);
if (second()%10 ==4)
digitalWrite(19, HIGH);
else
digitalWrite(19, LOW);
*/
/*
digitalWrite(45,LOW); // Pin für Sek Einer auf Masse legen
for (int i = 0; i<10; i++)
{
if (second()%10==i)
digitalWrite(30+i,HIGH);
else
digitalWrite(30+i,LOW);
*/
/* if (second()%10==2)
digitalWrite(31,HIGH);
else
digitalWrite(31,LOW);
if (second()%10==3)
digitalWrite(32,HIGH);
else
digitalWrite(32,LOW);
if (second()%10==4)
digitalWrite(33,HIGH);
else
digitalWrite(33,LOW);
if (second()%10==5)
digitalWrite(34,HIGH);
else
digitalWrite(34,LOW);
*/
int sensorValue = digitalRead(DCF_PIN);
if (sensorValue) {
if (!Up) {
flankUp=millis();
Up = true;
lcd.setCursor(7,1);
// lcd.print("*");
lcd.write(1); //Antennensymbol mit Signal
}
} else {
if (Up) {
flankDown=millis();
lcd.setCursor(7,1);
// lcd.print(" ");
lcd.write(2); // Antennensymbol ohne Signal
// lcd.setCursor(0,2);
// lcd.print("Cycle: ");
// lcd.setCursor(8,2);
// lcd.print(" ");
// lcd.setCursor(7,2);
// lcd.print(flankUp-PreviousflankUp);
// lcd.setCursor(12,2);
// lcd.print("ms");
// lcd.setCursor(0,3);
// lcd.print("Pulse : ");
// lcd.setCursor(7,3);
// lcd.print(" ");
// lcd.setCursor(7,3);
// lcd.print(flankDown - flankUp-20); // "-20" bedeutet -20 ms Zeitkoreektur ; variabel
// lcd.setCursor(12,3);
// lcd.print("ms");
PreviousflankUp = flankUp;
Up = false;
// digitalWrite(BLINKPIN, LOW);
}
}
digitalWrite(45,LOW); // Pin für Sek Einer auf Masse legen
for (int i = 0; i<10; i++)
{
if (second()%10==i+1)
digitalWrite(30+i,HIGH);
else
digitalWrite(30+i,LOW);
}
digitalWrite(45,HIGH); // Pin für Sek Einer auf +5v legen
//-----------------------------------------------------------
digitalWrite(44,LOW); // Pin für Sek Zehner auf Masse
for (int i = 0; i<6; i++)
{
if (second()/10==i+1) // Sekunden Zehner
digitalWrite(30+i,HIGH);
else
digitalWrite(30+i,LOW);
}
digitalWrite(44,HIGH);
//-----------------------------------------------------------
digitalWrite(43,LOW); // Pin für Min Einer auf Masse
for (int i = 0; i<10; i++)
{
if (minute()%10==i+1) // Minuten Einer
digitalWrite(30+i,HIGH);
else
digitalWrite(30+i,LOW);
}
digitalWrite(43,HIGH);
//---------------------------------------------------------
digitalWrite(42,LOW); // Pin für Min Zehner auf Masse
for (int i = 0; i<6; i++)
{
if (second()/10==i+1) // Sekunden Zehner
digitalWrite(30+i,HIGH);
else
digitalWrite(30+i,LOW);
}
digitalWrite(42,HIGH);
//-----------------------------------------------------
digitalWrite(41,LOW); // Pin für Stunden Einer auf Masse
for (int i = 0; i<10; i++)
{
if (hour()%10==i+1) // Stunden Einer
digitalWrite(30+i,HIGH);
else
digitalWrite(30+i,LOW);
}
digitalWrite(41,HIGH);
//----------------------------------------------------
digitalWrite(40,LOW); // Pin für Stunden Zehner auf Masse
for (int i = 0; i<3; i++)
{
if (hour()/10==i+1) // Stunden Zehner
digitalWrite(30+i,HIGH);
else
digitalWrite(30+i,LOW);
}
digitalWrite(40,HIGH);
//--------------------------------------------------
}