24-11-2019, 19:35
Cześc Wam
Tworzę projekt w którym można za pomocą aplikacji ustawić godzinę włączenia i wyłączenia oświetlenia. Ta część programu działa mi bardzo dobrze. Do tego chciałbym aby za pomocą dwóch przycisków w aplikacji (P1 - Świt, P2 - zmierzch) można było włączać i wyłączać oświetlenie manualnie. Na początku programu użyłem dwóch zmiennych: boolean swit = false; boolean zmierzch = false;. Następnie wstawiłem w kodzie w miejscu odbioru danych z bluetooth że w momencie odebrania wiadomości ,,swit" stan zmiennej swit zmieni się na true a zmiennej zmierzch na false. Tak samo z wiadomością do zmiennej zmierzch tylko z odwrotnym wynikiem. Arduino fajnie odbiera wszystko z aplikacji przez bluetooth tylko problem jest ze stanami lampki. Kiedy lampka pracuje w przedziale czasowym ustawionym w aplikacji i nagle wyłączę ją za pomocą przycisków i włączę to następnie jeżeli minie zadany czas świecenia to ona dalej świeci. Tak samo jest kiedy chciałbym ją włączyć w momencie kiedy jest wyłączona i czeka na czas włączenia, jeżeli ją włączę a potem wyłączę to w momencie kiedy jest czas żeby się automatycznie zaświeciła to tego nie zrobi.
Próbowałem wielu metod, kilka było nawet prawie trafnych(coś zawsze nie do końca działało), próbowałem tablic prawdy, ale to na nic. Chciałbym zmieniać stany lampki tak żeby w trakcie jej pracy lub w momencie kiedy nie pracuje, manualnie włączać i wyłączać lampkę.
Czy jest ktoś, kto mógłby mi trochę podpowiedzieć, naprowadzić?
Kod funkcji timera odpowiadającego za załączenie i wyłączenie lampki o odpowiedniej godzinie wygląda tak:
//poczatkowa deklaracja zmiennych typu boolean (początek programu)
boolean swit = false;
booleand zmierzch = false;
//część programu w której arduino odbiera informacje z aplikacji
if (wiadomosc.length() > 0) {
if(wiadomosc == "swit"){ //odwraca stany swit i zmierzch
swit = true;
zmierzch = false;
}
if(wiadomosc == "zmierzch"){ //odwraca stany swit i zmierzch
swit = false;
zmierzch = true;
}
// Własna FUNKCJA TIMER 1 (już poza pętlą loop)
boolean timer( int timerPin, byte hOn, byte mOn, byte sOn, byte hOff, byte mOff, byte sOff, byte timerStatus) {
if (timerStatus == 0) {
digitalWrite(timerPin, OFF);
return false;
};
boolean state = false;
long tOn = (long(hOn) * 3600) + (long(mOn) * 60) + long(sOn);
long tOff = (long(hOff) * 3600) + (long(mOff) * 60) + long(sOff);
if (tOn < tOff) {
if (currentTimeSec >= tOn && currentTimeSec < tOff) {
//czyli jak czas jest wiekszy od momentu wlaczenia lampki i momentu wylaczenia lampki, przedzial w ktorym jest wlaczona lampka
state = true;
}
}
if (tOn > tOff) {
if (currentTimeSec >= tOn && currentTimeSec <= 86399) {
state = true;
}
if (currentTimeSec >= 0 && currentTimeSec < tOff) {
state = true;
}
}
if(swit == true){ //jezeli swit jest true to zmienia sie stan state lampki na true czyli ma swiecic.
state = true;
}
if(zmierzch == true){ //jezeli zmierzch jest true to zmienia sie stan state lampki na false i powiina nie swiecic
state == false;
}
if (state) {
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;
return true; //zwraca wartosc state na true
}
else {
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;
return false; //zwraca wartosc state na false
}
}
Tworzę projekt w którym można za pomocą aplikacji ustawić godzinę włączenia i wyłączenia oświetlenia. Ta część programu działa mi bardzo dobrze. Do tego chciałbym aby za pomocą dwóch przycisków w aplikacji (P1 - Świt, P2 - zmierzch) można było włączać i wyłączać oświetlenie manualnie. Na początku programu użyłem dwóch zmiennych: boolean swit = false; boolean zmierzch = false;. Następnie wstawiłem w kodzie w miejscu odbioru danych z bluetooth że w momencie odebrania wiadomości ,,swit" stan zmiennej swit zmieni się na true a zmiennej zmierzch na false. Tak samo z wiadomością do zmiennej zmierzch tylko z odwrotnym wynikiem. Arduino fajnie odbiera wszystko z aplikacji przez bluetooth tylko problem jest ze stanami lampki. Kiedy lampka pracuje w przedziale czasowym ustawionym w aplikacji i nagle wyłączę ją za pomocą przycisków i włączę to następnie jeżeli minie zadany czas świecenia to ona dalej świeci. Tak samo jest kiedy chciałbym ją włączyć w momencie kiedy jest wyłączona i czeka na czas włączenia, jeżeli ją włączę a potem wyłączę to w momencie kiedy jest czas żeby się automatycznie zaświeciła to tego nie zrobi.
Próbowałem wielu metod, kilka było nawet prawie trafnych(coś zawsze nie do końca działało), próbowałem tablic prawdy, ale to na nic. Chciałbym zmieniać stany lampki tak żeby w trakcie jej pracy lub w momencie kiedy nie pracuje, manualnie włączać i wyłączać lampkę.
Czy jest ktoś, kto mógłby mi trochę podpowiedzieć, naprowadzić?
Kod funkcji timera odpowiadającego za załączenie i wyłączenie lampki o odpowiedniej godzinie wygląda tak:
//poczatkowa deklaracja zmiennych typu boolean (początek programu)
boolean swit = false;
booleand zmierzch = false;
//część programu w której arduino odbiera informacje z aplikacji
if (wiadomosc.length() > 0) {
if(wiadomosc == "swit"){ //odwraca stany swit i zmierzch
swit = true;
zmierzch = false;
}
if(wiadomosc == "zmierzch"){ //odwraca stany swit i zmierzch
swit = false;
zmierzch = true;
}
// Własna FUNKCJA TIMER 1 (już poza pętlą loop)
boolean timer( int timerPin, byte hOn, byte mOn, byte sOn, byte hOff, byte mOff, byte sOff, byte timerStatus) {
if (timerStatus == 0) {
digitalWrite(timerPin, OFF);
return false;
};
boolean state = false;
long tOn = (long(hOn) * 3600) + (long(mOn) * 60) + long(sOn);
long tOff = (long(hOff) * 3600) + (long(mOff) * 60) + long(sOff);
if (tOn < tOff) {
if (currentTimeSec >= tOn && currentTimeSec < tOff) {
//czyli jak czas jest wiekszy od momentu wlaczenia lampki i momentu wylaczenia lampki, przedzial w ktorym jest wlaczona lampka
state = true;
}
}
if (tOn > tOff) {
if (currentTimeSec >= tOn && currentTimeSec <= 86399) {
state = true;
}
if (currentTimeSec >= 0 && currentTimeSec < tOff) {
state = true;
}
}
if(swit == true){ //jezeli swit jest true to zmienia sie stan state lampki na true czyli ma swiecic.
state = true;
}
if(zmierzch == true){ //jezeli zmierzch jest true to zmienia sie stan state lampki na false i powiina nie swiecic
state == false;
}
if (state) {
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;
return true; //zwraca wartosc state na true
}
else {
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;
return false; //zwraca wartosc state na false
}
}