• 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
Błędnie odczytywane kody [FastLED & IRremote]
#7
Nie wiem jaki masz pilot, ale to może być normalne, wywal wszystko i pobaw się samym pilotem, naucz się go obsługiwać i dowiedz się jak działa - jest też komenda "powtórz", wgraj jakiś szkic do sczytywania kodów. Jak ogarnąć 0 czy błędne kody też masz. Zatrzymanie led, jak otrzymujesz kod to go wtedy masz zweryfikować, poprawny przekazać do zmiennej sterującej, inne zignorować, ja używam tylko 0 by ignorować, bo innych nie odczytałem, ale jak masz ich więcej to wybierasz te 5-10, które zmieniają wartość zmiennej sterującej i resztę wywalasz do śmieci, ignorujesz ich otrzymanie.
Dlatego masz mieć podziała na bloki programu, wszystko co robi biblioteka IR ja zamknąłem w jednym bloku, z niego wychodzi już moja zmienna "kod" po weryfikacji i używam jej w innych blokach.
Nie ważne czy switch case czy if else if, działają podobnie, switch jest dla mnie bardziej czytelny, ale nie mogłem użyć tablicy stałych do wybierania caseów.

Przecież dałem Ci przykład, masz swoją funkcję red(); to wstaw ją w miejsce {}
case 0x16:
{ currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; }

Funkcja Rainbow effect jest napisana źle, masz ją zrobioną tak, że musisz pokazać wszystkie kroki z pętli for(), a powinna być tak napisana, że ją wywołujesz co określony interwał, wykonujesz krok zapamiętywany w zmiennej static, wraca do loop, po kolejnym wywołaniu wykonuje kolejny krok. Wtedy między krokami możesz ją zakończyć, właściwie zmienić nowym kodem, tak są napisane funkcje w szkicu Color palet.
Przyjrzyj się funkcji czas() w moim przykładzie, używam millis tylko raz na początku loop, robię sobie flagi i proste operacje logiczne by wyznaczać interwały 1, 20, 50, 100ms i co tyle wywołuję funkcje, w między czasie program jest gotowy na inne zadania, odebrać kod, odczytać przycisk, wydrukować co się w nim dzieje i zmierzony upływ czasu.
Po krótkim zastanowieniu ograniczenia są tylko w mojej głowie, wystarczy, że nauczysz się mierzyć upływ czasu z tą funkcją czas() w przykładzie, a wtedy po odebraniu błędnego kodu IR można wstrzymać na np. 500ms wykonywanie programu, nie wywoływać funkcji FastLED.show(); i masz te 500ms na spokojne odebranie prawidłowego kodu, a jak nic nie przyleci to wracasz tam gdzie przerwałeś.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Błędnie odczytywane kody [FastLED & IRremote] - przez kaczakat - 25-11-2023, 00:58

Skocz do:


Przeglądający: 1 gości