Guten Morgen,
ich habe eine LED Lampe die tageszeitabhänig gedimmt werden soll. Zur Zeiterfassung würde ich gerne den DCF77 verwenden.
Nun aber mein Problem: Wenn ich den DCF77 alleine verwende mit den Beispeilprogrammen funktioniert dieser enwandfrei. Integriere ich dieses Programm jedoch in mein Programm bekommt dieser keine Zeit mehr :-/
Ich weiß, dass der DCF77 an Pin 2 angeschlossen sein muss und diesen Interrupt verwendet - dementsprechend habe ich dort auch nichts angeschlossen.
Ansonsten sind noch ein 16x2 LCD und 2 PWM Ports angeschlossen.
/*
* InternalClockSync.pde
* example code illustrating time synced from a DCF77 receiver
* Thijs Elenbaas, 2012
* This example code is in the public domain.
This example shows how to fetch a DCF77 time and synchronize
the internal clock. In order for this example to give clear output,
make sure that you disable logging from the DCF library. You can
do this by commenting out #define VERBOSE_DEBUG 1 in Utils.cpp.
*/
#include <LiquidCrystal.h>
#include "DCF77.h"
#include "Time.h"
#define DCF_PIN 2 // Connection pin to DCF 77 device
#define DCF_INTERRUPT 0 // Interrupt number associated with pin
enum Helligkeit {Nacht, Daemmerung, Vormittag, Mittag, Nachmittag};
int blue =11;
int white =10;
char buffer[100];
bool time_set = false;
LiquidCrystal lcd(12, 13, 4,5,6,7);
time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);
class Lampe {
public:
Lampe(){brightness_blue=0; brightness_white=0; State= Nacht;}
void SetBlue(int b){brightness_blue=b;}
void SetWhite(int w){brightness_white=w;}
int GetBlue(){return brightness_blue;}
int GetWhite(){return brightness_white;}
Helligkeit GetState(){return State;}
void init(){
Helligkeit h;
int b, w;
switch(hour()){
case 8: h=Daemmerung; break;
case 9: h=Daemmerung; break;
case 10: h=Vormittag; break;
case 11: h=Vormittag; break;
case 12: h= Mittag; break;
case 13: h= Mittag; break;
case 14: h= Nachmittag; break;
case 15: h= Nachmittag; break;
case 16: h= Daemmerung; break;
case 17: h= Daemmerung; break;
case 18: h= Nacht; break;
default:h= Nacht; break;
}
switch(h)
{
case Nacht: b=1; w=0; break;
case Daemmerung: b=40; w=40; break;
case Vormittag: b=170; w=170; break;
case Mittag: b=240; w=240; break;
case Nachmittag: b=180; w=180; break;
default: break;
}
analogWrite(white, w);
analogWrite(blue, b);
brightness_blue=b;
brightness_white=w;
State= h;
}
//#################################
void switchLight(Helligkeit h) {
int b=0,w=0, difference;
switch(h)
{
case Nacht: b=1; w=0; break;
case Daemmerung: b=40; w=40; break;
case Vormittag: b=170; w=170; break;
case Mittag: b=240; w=240; break;
case Nachmittag: b=180; w=180; break;
default: break;
}
difference= abs(brightness_blue-b);
for (int i=0; i<difference; i++ )
{
if (h==Daemmerung && brightness_blue==1)
{brightness_white=1;
analogWrite(white, brightness_white);
}
if(brightness_blue<b)
{
analogWrite(white, brightness_white++);
analogWrite(blue, brightness_blue++);
}
if(brightness_blue>b)
{
analogWrite(white, brightness_white--);
analogWrite(blue, brightness_blue--);
}
if (h==Nacht && brightness_blue==1)
{
brightness_white=0;
analogWrite(white, brightness_white);
}
lcd.setCursor(0, 1);
// print the number of seconds since reset:
sprintf(buffer, "S: W:%03d B:%03d" ,brightness_white, brightness_blue);
lcd.print(buffer);
delay(3000);
}
}
void check(){
Helligkeit h;
switch(hour()){
case 8: h=Daemmerung; break;
case 10: h=Vormittag; break;
case 12: h= Mittag; break;
case 14: h= Nachmittag; break;
case 16: h= Daemmerung; break;
case 18: h= Nacht; break;
default: h=State; break;
}
if(h!=State) switchLight(h);
}
private:
int brightness_blue;
int brightness_white;
Helligkeit State;
};
Lampe LED;
void setup() {
setTime(7,50,55,20,3,2014);
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Stefans LED");
Serial.begin(9600);
DCF.Start();
LED.init();
}
void loop() {
delay(1000);
// LED.check();
time_t DCFtime = DCF.getTime(); // Check if new DCF77 time is available
if (DCFtime!=0)
{
Serial.println("Time is updated");
setTime(DCFtime);
lcd.setCursor(0, 0);
lcd.print("Time updated");
time_set=true;
}
lcd.setCursor(0, 1);
// print the current time
sprintf(buffer, "Zeit: %2d:%02d:%02d" ,hour(), minute(), second());
lcd.print(buffer);
digitalClockDisplay();
}
void digitalClockDisplay(){
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
Bemerkenswert ist auch noch: Bei unveränderter Hardware bekomme ich mit dem DCF77 Beispielprogramm die Zeit, mit meinem Programm bekomme ich keine Zeit.
Ich weiß wirklich nocht weiter.
Vielen Dank ![]()