ja, bin ich ....
Oh, ja - ist aber "nur" auf dem Plan falsch. Habe ich falsche gezeichnet. War ja mein erster Versuch
Sketch ist natürlich nicht geheim - da ich absoluter Anfänger bin, habe ich dem zu diesem Problem nicht so viel Bedeutung zugemessen. Hier jetzt im Anhang, auch wenn da noch so gut wie nix passiert - Feedback und Tips erbeten - ist ja mein erster. ![]()
#include <math.h>
#include <Dusk2Dawn.h>
#include <RtcDS3231.h>
#include <time.h>
#include <Wire.h>
#define DS3231
#define MY_TIMEZONE 1
#define myWire TwoWire
#define I2C Wire
RtcDS3231<myWire> Rtc(I2C);
const int BLUE = 10; // Pin für RGB-LED
const int GREEN = 5; // Pin für RGB-LED
const int RED = 6; // Pin für RGB-LED
const int PIR_PIN = 7; // Pin Daten vom HC-S501 Bewegungs-Sensor
const int MOTION_LED = 9; // Pin für die Bewegungs-Kontroll-LED
int sr = 0; // Sonnenaufgang in Minuten ab Mitternacht
int ss = 0; // Sonnenuntergang in Minuten ab Mitternacht
Dusk2Dawn position(53.8666, 10.6848, 1);
void setup()
{
Serial.begin(9600);
Rtc.Begin();
set_zone(MY_TIMEZONE);
// ### PIN Modes
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(MOTION_LED, OUTPUT);
pinMode(PIR_PIN, INPUT);
// ### LEDs aus
analogWrite(RED, 0);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
analogWrite(MOTION_LED, 0);
// Sonnenaufgang / Sonnenuntergang
time_t start = Rtc.GetTime();
struct tm *myTm;
myTm = localtime(&start);
sr = position.sunrise(myTm->tm_year, myTm->tm_mon + 1, myTm->tm_mday, myTm->tm_isdst);
ss = position.sunset(myTm->tm_year, myTm->tm_mon + 1, myTm->tm_mday, myTm->tm_isdst);
// Beep
tone(11, 500, 200);
}
// main loop
void loop()
{
// brechne Zeit seit Mitternacht lokal in Minuten
time_t now = Rtc.GetTime();
struct tm *myTm;
myTm = localtime(&now);
int todaysMins = ((myTm->tm_hour * 60) + myTm->tm_min);
if ((todaysMins < sr) || (todaysMins > ss))
{
analogWrite(RED, 16);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
}
else
{
analogWrite(RED, 128);
analogWrite(GREEN, 32);
analogWrite(BLUE, 0);
}
if (digitalRead(PIR_PIN) == 1)
{
analogWrite(MOTION_LED, 16);
}
else
{
analogWrite(MOTION_LED, 0);
}
delay(100);
}