• 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
Arduino Nano + HC05 - problem z funkcją "millis"
#3
Wychodzi na to, że program działa tak jak go napisałeś:

Kod:
if(Data==('6')){
          if (aktualnyCzas - zapamietanyCzasLED1 >= 500UL) {
            zapamietanyCzasLED1 = aktualnyCzas; // migająca led / Zapamietaj aktualny czas
            if (stanLED1 == LOW) { // migająca led / Zmieniamy stan diody na przeciwny
            stanLED1 = HIGH;
            } else {
            stanLED1 = LOW;
            }
            digitalWrite(SWAwaryjne, stanLED1); // migająca led / ustawiamy nowy stan na diodzie
          }
        }
Działa to w tym momencie tak, że jak mikrokontroler odbierze z bluetooth '6' to zmieni stan diody na przeciwną. Więc żeby dioda migała co 0,5sek musiałoby na bluetooth pojawiać się cyklicznie '6'.

Rozwiązanie podał Ci kolega kaczakat - tworzysz flagę
Kod:
boolean miganie = false;
po odebraniu '6' z bluetooth zmienia się flaga na true, a po odebraniu '3' na false.

Potem w loop() dajesz:
Kod:
         if (miganie && aktualnyCzas - zapamietanyCzasLED1 >= 500UL) {
            zapamietanyCzasLED1 = aktualnyCzas; // migająca led / Zapamietaj aktualny czas
            if (stanLED1 == LOW) { // migająca led / Zmieniamy stan diody na przeciwny
            stanLED1 = HIGH;
            } else {
            stanLED1 = LOW;
            }
            digitalWrite(SWAwaryjne, stanLED1); // migająca led / ustawiamy nowy stan na diodzie
          }
wg. tego, co już masz albo:
Kod:
          if (miganie && aktualnyCzas - zapamietanyCzasLED1 >= 500UL) {
            zapamietanyCzasLED1 = aktualnyCzas; // migająca led / Zapamietaj aktualny czas
            digitalWrite(SWAwaryjne, !digitalRead(SWAwaryjne)); // migająca led / ustawiamy nowy stan na diodzie
          }
zgodnie z tym, co pisał kolega powyżej.

Brakuje mi ewidentnie 
Kod:
sendData("SWAwaryjne ON");

Na pewno w tym wypadku przerostem formy nad treścią jest zmienna stanLED1 jako int. Zajmuje za dużo miejsca tylko po to, żeby sygnalizować stan włącz - wyłącz. Tu masz rozwiązanie z zastosowaniem boolean, czyli 8 bitów. Możesz również jedną zmienną np. byte(8-bitów) spożytkować na 8 różnych stanów reprezentowanych przez 0 i 1. Czyli stanLED1 = 0/1 to 1 bit "zajętego miejsca" i w takiej zmiennej byte możesz takich ledów "zmieścić" 8.

Warto już na samym początku poczytać i zrozumieć o co chodzi w typach zmiennych i ich doborze.
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Arduino Nano + HC05 - problem z funkcją "millis" - przez MadMrQ - 21-11-2022, 19:02

Skocz do:


Przeglądający: 1 gości