Hi,
ich möchte über PWM meine LEDs steuern. Sind insgesamt 4 Stripes.
Wie ihr meinem Script ansehen werdet, bin ich noch kein Profi, damit würde ich aber zumindest eine zeitgesteuerte Dimmung hinbekommen.
Ideal finde ich es allerdings noch nicht. Zum einen würde ich gerne auch LEDs parallel dimmen, zum anderen auch die Zeitausgabe (demnächst über LCD) regelmäßig aktualisieren. Außerdem sollen noch weitere Sensoren mit integriert werden, die ja auch in geregelten Abständen geprüft werden müssen.
So wie ich es jetzt programmier habe, geht quasi ab 7Uhr30 die Sonne auf. Mittags wird sie mit voller Kraft scheinen.
Das Problem ist, dass wenn zB um 7h30 der erste LED Strip startet, der Loop so lange durchläuft,bis max=155 erreicht ist, dauer beträgt dabei 45 Minuten. D.h. während dieser Zeit wird natürlich weder die Zeit aktualisiert, noch könnte ich eine 2te LED starten.
Könnt ihr mir hier helfen?
Gruß
Thorsten
//////////WICHTIGE SETUP-DATEN FÜR REALTIME UHRZEIT//////////////////
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
//////////ENDE WICHTIGE DATEN FÜR REALTIME UHRZEIT////////////////
//////////WICHTIGE SETUP-DATEN FÜR LEDs//////////////////
byte stripePin[] = {8, 9, 10, 11};
int currentStripe = 0;
int dauer=0; //Dauer in Minuten
int i;
int imax;
int imin;
float delayfade=dauer*60000/256;
//////////ENDE WICHTIGE SETUP-DATEN FÜR LEDs//////////////////
//////////FUNKTION FÜR UHRZEIT//////////////////
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set
// bit 6 (also need to change readDateDs1307)
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}
//////////ENDE FUNKTION FÜR UHRZEIT//////////////////
void setup()
{
/////////////UHRZEIT////////////////// ZUM UHRZEIT STELLEN EINTRAGEN UND SETDATE FÜR UPLOAD AKTIVIEREN//////
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
Serial.begin(9600);
// minute = 46;
// hour = 23;
// dayOfWeek = 6;
// dayOfMonth = 5;
// month = 2;
// year = 10;
// setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
//////////////UHRZEIT ENDE//////////////
/////////////LEDs//////////////////
pinMode(stripePin[0], OUTPUT);
digitalWrite(stripePin[0], LOW);
pinMode(stripePin[1], OUTPUT);
digitalWrite(stripePin[1], LOW);
pinMode(stripePin[2], OUTPUT);
digitalWrite(stripePin[2], LOW);
pinMode(stripePin[3], OUTPUT);
digitalWrite(stripePin[3], LOW);
/////////////ENDE LEDs//////////////////
}
void loop()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
//FADEIN//
if (minute == 30 && hour == 7 && second == 0) {
currentStripe=1; //blau
int dauer=45; //Dauer in Minuten
i=0;
imax=155;
FadeIn();
}
if (minute == 30 && hour == 8 && second == 0) {
currentStripe=2; //weiss
int dauer=45; //Dauer in Minuten
i=0;
imax=155;
FadeIn();
}
if (minute == 20 && hour == 9 && second == 0) {
currentStripe=1; //blau
int dauer=30; //Dauer in Minuten
i=155;
imax=255;
FadeIn();
digitalWrite(stripePin[currentStripe], HIGH);
}
if (minute == 55 && hour == 9 && second == 0) {
currentStripe=2; //weiss
int dauer=30; //Dauer in Minuten
i=155;
imax=255;
FadeIn();
digitalWrite(stripePin[currentStripe], HIGH);
}
if (minute == 00 && hour == 10 && second == 0) {
currentStripe=3; // weiss&rot
int dauer=59; //Dauer in Minuten
i=0;
imax=155;
FadeIn();
}
if (minute == 00 && hour == 11 && second == 0) {
currentStripe=4; //blau und UV
int dauer=59; //Dauer in Minuten
i=0;
imax=155;
FadeIn();
}
if (minute == 00 && hour == 12 && second == 0) {
currentStripe=3; // weiss&rot
int dauer=29; //Dauer in Minuten
i=155;
imax=255;
FadeIn();
digitalWrite(stripePin[currentStripe], HIGH);
}
if (minute == 30 && hour == 12 && second == 0) {
currentStripe=4; //blau und UV
int dauer=29; //Dauer in Minuten
i=155;
imax=255;
FadeIn();
digitalWrite(stripePin[currentStripe], HIGH);
}
//FADE OUT//
if (minute == 00 && hour == 16 && second == 0) {
currentStripe=3;
int dauer=29; //Dauer in Minuten
i=255;
imin=100;
FadeOut();
}
if (minute == 30 && hour == 16 && second == 0) {
currentStripe=4;
int dauer=29; //Dauer in Minuten
i=255;
imin=100;
FadeOut();
}
if (minute == 00 && hour == 17 && second == 0) {
currentStripe=3;
int dauer=29; //Dauer in Minuten
i=100;
imin=0;
FadeOut();
digitalWrite(stripePin[currentStripe], LOW);
}
if (minute == 30 && hour == 17 && second == 0) {
currentStripe=4;
int dauer=29; //Dauer in Minuten
i=100;
imin=0;
FadeOut();
digitalWrite(stripePin[currentStripe], LOW);
}
if (minute == 00 && hour == 19 && second == 0) {
currentStripe=2; //weiss
int dauer=29; //Dauer in Minuten
i=255;
imin=100;
FadeOut();
}
if (minute == 30 && hour == 19 && second == 0) {
currentStripe=1; //blau
int dauer=29; //Dauer in Minuten
i=255;
imin=155;
FadeOut();
}
if (minute == 00 && hour == 19 && second == 0) {
currentStripe=2; //weiss
int dauer=29; //Dauer in Minuten
i=100;
imin=0;
FadeOut();
digitalWrite(stripePin[currentStripe], LOW);
}
if (minute == 30 && hour == 19 && second == 0) {
currentStripe=1; //blau
int dauer=29; //Dauer in Minuten
i=155;
imin=0;
FadeOut();
digitalWrite(stripePin[currentStripe], LOW);
}
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(minute, DEC);
Serial.print(":");
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(month, DEC);
Serial.print("/");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(year, DEC);
Serial.print(" Day_of_week:");
Serial.println(dayOfWeek, DEC);
delay(1000);
}
void FadeIn()
{
for(i; i<imax; i++) {
analogWrite(stripePin[currentStripe], i);
delay(delayfade);
}
}
void FadeOut()
{
for(i; i>imin; i--) {
analogWrite(stripePin[currentStripe], i);
delay(delayfade);
}
}