Witam po dłuższej przerwie.
Jestem w trakcie budowy belki oświetleniowej nad akwarium, sterowanej PWM i mam pewien problem. Znalazłem sketch na jednej ze stron i działa. Ale ja mam takie pytanie do Was, mianowicie, jak najprościej zrobić, by wszystkie kroki od 0 do 255 przechodziły płynnie w określonym przez nas czasie? Innymi słowy chce sterować pełnym rozjaśnieniem i ściemnieniem diod regulując czas w jakim ma się całe zdarzenie odbyć. Ewentualnie zmienić krok rozjaśniania z jednej minuty na jedną sekundę, bo teraz długość trwania jednego kroku to minuta.
Poniżej sketch.
Pozdrawiam
Jestem w trakcie budowy belki oświetleniowej nad akwarium, sterowanej PWM i mam pewien problem. Znalazłem sketch na jednej ze stron i działa. Ale ja mam takie pytanie do Was, mianowicie, jak najprościej zrobić, by wszystkie kroki od 0 do 255 przechodziły płynnie w określonym przez nas czasie? Innymi słowy chce sterować pełnym rozjaśnieniem i ściemnieniem diod regulując czas w jakim ma się całe zdarzenie odbyć. Ewentualnie zmienić krok rozjaśniania z jednej minuty na jedną sekundę, bo teraz długość trwania jednego kroku to minuta.
Poniżej sketch.
Kod:
#include <DS1307.h> //użyte biblioteki
#include <Wire.h> //użyte biblioteki
#define DS1307_ADDRESS 0x68 //zegar
byte zero = 0x00; //zegar
//***********************opis wyjść*************************
int LED1 = 11; //diody 1
int GODZ; //Godzina
int MIN; //Minuta
int SEC; //Sekundy
int dzienG = 10; //początek dnia - godziny
int dzienM = 00; //początek dnia - minuty
int nocG = 21; //początek nocy - godziny
int nocM = 00; //początek nocy - minuty
int maxD1 = 60; //maksymalna moc kanału LED1
int ZMIANA = 60; //długość trwania rozjaśniania
int STEP = 1; //długość trwania jednego kroku
void setup()
{
Wire.begin();
pinMode(LED1, OUTPUT); //diody
Serial.begin(9600); //serial port
}
void loop()
{
int CZAS = (GODZ*60+MIN); //aktualna godzina
int czas1 = (dzienG*60+dzienM); //początek dnia
int czas2 = (nocG*60+nocM); //początek nocy
GODZ = (RTC.get(DS1307_HR,true)); //godzina pobierana z RTC
MIN = (RTC.get(DS1307_MIN,true)); //minuta pobierana z RTC
SEC = (RTC.get(DS1307_SEC,true)); //sekundy pobierana z RTC
static int D1; //stopień rozjaśniania LED1
int mocD1[61] = //stopień rozjaśniania LED1
{
255,230,220,210,200,195,190,185,180,175,
170,165,160,155,150,145,140,135,130,125,
120,115,110,105,100,95,90,85,80,75,
70,65,60,55,50,45,40,35,30,25,
20,19,18,17,16,15,14,13,12,11,
10,9,8,7,6,5,4,3,2,1,0
};
if (CZAS<czas1) //noc
{
D1=0; //digitalWrite(LED1, LOW);
Serial.print("noc ");
}
if ((czas1<=CZAS)&&(CZAS<(czas1+ZMIANA))) //poranek
{
D1=((CZAS-czas1)/STEP);
Serial.print("swit ");
}
if (((czas1+ZMIANA)<=CZAS)&&(CZAS<(czas2-ZMIANA))) //dzień
{
D1=maxD1;
Serial.print("dzien ");
}
if(((czas2-ZMIANA)<=CZAS)&&(CZAS<czas2)) //zmrok
{
D1=((czas2-CZAS)/STEP);
Serial.print("zmrok ");
}
if(czas2<=CZAS) //noc
{
D1=0; //digitalWrite(LED1, LOW);
Serial.print("noc ");
}
analogWrite(LED1, mocD1[D1]);
/*************************** serial monitor **************/
Serial.print("LED:");
Serial.print((D1*100)/maxD1);
Serial.print(" ");
Serial.print(GODZ);
Serial.print(":");
Serial.print(MIN);
Serial.print(":");
Serial.print(SEC);
Serial.println(" MN-Tech.pl _1pwm ");
delay (1000);
}
Pozdrawiam