• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zmiana stanów logicznych oświetlenia
#17
Póki co walczę ze stanami prawda i fałsz, trochę przerobiłem kod timera, prawie udaje mi się osiągnąć to co chciałem, no właśnie prawie. Załóżmy że Godzina ON to 10:00 a godzina OFF to godzina 20:00, mam aktualnie godzinę 15:00 czyli mieszczę się  w przedziale. W tej sytuacji mogę bez problemu zapalać i gasić lampkę przyciskami. Wystarczy że aktualny czas przekroczy godzinę 20:00 i już lampka się sama nie wyłączy bo podczas jej pracy ją wyłączyłem przyciskiem czyli ustawiłem stan na false a potem włączyłem i ustawiłem stan na true. Właśnie te ponowne włączenie przyciskiem spowodowało to że program ignoruje już godzinę wyłączenia a jako priorytet traktuje stan true podyktowany przez naciśnięcie przycisku. Tego właśnie nie mogę obejść. Jeżeli rozwiązałbym problem w przypadku gdzie mieszczę się z aktualną godziną w przedziale włączenia i wyłączenia to pozostaje jeszcze przypadek gdzie aktualny czas jest już poza zakresem przedziału działania lampki oraz przypadek gdzie czas włączenia jest większy od czasu wyłączenia.

Niestety nie dam rady zrobić jak polecił mi kolega Semi, mogę spróbować metodą kolegi Agregacika. Tak czy inaczej, bardzo dziękuję Wam za odpowiedzi do mojego posta.

Aktualnie przerobiony kod timera z problemem opisanym wyżej to:

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);

  boolean Stan = false;

  if (zmierzch == true) {
    Stan = false;
  }
  if (swit == true) {
    Stan = true;
  }

  // Przypadek gdzie czas wlaczenia jest mniejszy od wylaczenia ale aktualny czas miesci sie w tym przedziale

  if (czWL < czWYL) {
    if (AktualnyCzas >= czWL && AktualnyCzas < czWYL) {
      Stan = true;
      if (zmierzch == true) {
        Stan = false;
      }
      if (zmierzch == false) {
        Stan = true;
      }
      if (swit == true) {
        Stan = true;
      }
     
    }
  }

  //przypadek gdzie czas wlaczenia jest mniejszy od wylaczenia ale aktualny cza jest juz poza zakresem wlaczenia i wylaczenia

  if (czWL < czWYL) {
    if (AktualnyCzas >= czWL && AktualnyCzas >= czWYL) {
      Stan = false;
      if(swit == true){
        Stan = true;
      }
     
      if(zmierzch == true){
        Stan = false;
      }
    }
  }


  if (czWL > czWYL) {
    if (AktualnyCzas >= czWL && AktualnyCzas <= 86399) {
      Stan = true;
      if (zmierzch == true) {
        Stan = false;
      } else {
        Stan = true;
      }
    }
    if (AktualnyCzas >= 0 && AktualnyCzas < czWYL) {
      Stan = true;
    }
  }

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  if (Stan == true) {
    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 (Stan == false) {
    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;
  }

}
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Zmiana stanów logicznych oświetlenia - przez Krzaczek - 25-11-2019, 19:04

Skocz do:


Przeglądający: 1 gości