25-11-2019, 19:48
Niestety pomysł Agregacika nie działa (przynajmniej w moim wykonaniu). Przebudowałem funkcję timera i wygląda ona następująco:
byte lampka = 0;
#define t1Pin 3
// Godzina, minuta, sekunda włączenia obwodu 1
int t1HOn, t1MOn, t1SOn;
// Godzina, minuta, sekunda wyłączenia obwodu 1
int t1HOff, t1MOff, t1SOff;
...
//przyciski z bluetooth
if (wiadomosc == "swit") {
lampka = 1;
wiadomosc = "";
}
if (wiadomosc == "zmierzch") {
lampka = 0;
wiadomosc = "";
}
....
//funkcja timera
boolean timer(int tPin, byte hOn, byte mOn, byte sOn, byte hOff, byte mOff, byte sOff) {
long czWL = (long(hOn) * 3600) + (long(mOn) * 60) + long(sOn);
long czWYL = (long(hOff) * 3600) + (long(mOff) * 60) + long(sOff);
if (czWL < czWYL) {
if (AktualnyCzas >= czWL && AktualnyCzas < czWYL) {
lampka = 1;
}
}
if (czWL > czWYL) {
if (AktualnyCzas >= czWL && AktualnyCzas <= 86399) {
lampka = 1;
}
if (AktualnyCzas >= 0 && AktualnyCzas < czWYL) {
lampka = 1;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (lampka == 1) {
analogWrite(led, jasnosc); // wejscie pwm jest deklarowane na pin leda o okreslonej jasnosci rownej 0
jasnosc += wypelnienie;
if (jasnosc > 255) //jesli jest powyzej 255, to ustalamy spowrotem 255
jasnosc = 255;
}
if (lampka == 0) {
analogWrite(led, jasnosc); // wejscie pwm deklarowane na pin led o jasnosci rownej 0
jasnosc -= wypelnienie;
if (jasnosc < 0) //jesli spadlo nam ponizej zera, to wracamy na wartosc 0.
jasnosc = 0;
}
}
Co do przerwań to czy zmienią one fakt, który opisywałem wcześniej? Nie chodzi mi o to czy czasowo program wpasuje się aby włączyć i wyłączyć lampkę bo robi to dobrze tylko czy po przekroczeniu przedziałów czasowych będe mógł operować manualnie lampką?
byte lampka = 0;
#define t1Pin 3
// Godzina, minuta, sekunda włączenia obwodu 1
int t1HOn, t1MOn, t1SOn;
// Godzina, minuta, sekunda wyłączenia obwodu 1
int t1HOff, t1MOff, t1SOff;
...
//przyciski z bluetooth
if (wiadomosc == "swit") {
lampka = 1;
wiadomosc = "";
}
if (wiadomosc == "zmierzch") {
lampka = 0;
wiadomosc = "";
}
....
//funkcja timera
boolean timer(int tPin, byte hOn, byte mOn, byte sOn, byte hOff, byte mOff, byte sOff) {
long czWL = (long(hOn) * 3600) + (long(mOn) * 60) + long(sOn);
long czWYL = (long(hOff) * 3600) + (long(mOff) * 60) + long(sOff);
if (czWL < czWYL) {
if (AktualnyCzas >= czWL && AktualnyCzas < czWYL) {
lampka = 1;
}
}
if (czWL > czWYL) {
if (AktualnyCzas >= czWL && AktualnyCzas <= 86399) {
lampka = 1;
}
if (AktualnyCzas >= 0 && AktualnyCzas < czWYL) {
lampka = 1;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (lampka == 1) {
analogWrite(led, jasnosc); // wejscie pwm jest deklarowane na pin leda o okreslonej jasnosci rownej 0
jasnosc += wypelnienie;
if (jasnosc > 255) //jesli jest powyzej 255, to ustalamy spowrotem 255
jasnosc = 255;
}
if (lampka == 0) {
analogWrite(led, jasnosc); // wejscie pwm deklarowane na pin led o jasnosci rownej 0
jasnosc -= wypelnienie;
if (jasnosc < 0) //jesli spadlo nam ponizej zera, to wracamy na wartosc 0.
jasnosc = 0;
}
}
Co do przerwań to czy zmienią one fakt, który opisywałem wcześniej? Nie chodzi mi o to czy czasowo program wpasuje się aby włączyć i wyłączyć lampkę bo robi to dobrze tylko czy po przekroczeniu przedziałów czasowych będe mógł operować manualnie lampką?