Wpis z mikrobloga

#arduino #elektronika #cpp
hej miruny
wpadłem ostatnio na pomysł regulowania mojego paska ledowego za pomocą jakiegoś pokrętła.
pasek ledowy WS2812B - standardowy z ali 5V
program do arduino ściągnięty z neta, oparty na bibliotece FastLED.h
kod - dotyczy trzeciej opisanej tutaj próby.
tryb oświetlenia wybieram w programie Prismatik (screen grabbing, static itp)

pierwsza próba to było bezpośrednie regulowanie napięcia zasilającego pasek - słabo wyszło, kolory oprócz przyciemniania zmieniały barwę, szczególnie te jasne przechodziły w czerwień
druga próba - potencjometr na wejście analogowe i wywołanie metody setBrightness z klasy FastLED na początku głównej pętli programu. wejście z potencjometra przeliczone na zakres 0-255 wchodziło jako argument tamtej metody.
ta opcja działała nawet spoko, o ile kolory wyświetlane były dynamicznie - czyli screen grabbing, kolorowa tęcza, fire. nie działało, gdy chciałem wyświetlić stały jasny kolor - wtedy regulacja nic nie dawała - program najwyraźniej utyka w którejś pętli, jeśli kolor się nie chce zmienić.

trzecia próba zakładała skorzystanie z biblioteki "TimeInterrupt.h" - jej opis. Jest to biblioteka, która pozwala w prosty sposób wywoływać pseudo przerwania czasowe. Chciałem wywołać co 200 milisekund funkcję, która sprawdzi czy wejście z potencjometru się zmieniło, a jeśli tak to odpowiednio ustawi jasność.
I tutaj niestety nie wiem co się dzieje, mimo że pokładałem w niej duże nadzieje. Kolory są zupełnie inne niż powinny, nie działa screen grabbing, nic. Tyle dobrego, że faktycznie ustala jasność taką jak powinna być.

Ma ktoś pomysł co zrobić, żeby jedna z tych metod działała poprawnie? albo ewentualnie zaproponować jakąś inną, zupełnie inną?
  • 15
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@ZydowskiZarzadPowierniczy: po opisie mogę wysnuć ze skoro przy zmianie koloru zmienia jasność przy drugiej metodzie a jak zostaje ten sam kolor to nie zmienia to strzelałbym ze nie robisz po ustawieniu jasności metody pixelsDraw albo stripDraw tj. to ze ustawiasz jasność to nie znaczy że od razu się to robi. Trzeba wysłać komendy do ledow
  • Odpowiedz
@daczka92: nom. tutaj chyba za to odpowiada

FastLED.show();
próbowałem to wywołać w cyklicznym przerwaniu po zmianie koloru, ale nadal bzdury.

jutro albo jeszcze dzisiaj spróbuję wpiąć jakieś ledy w płytkę, żeby za ich pomocą "zdebugować", w której pętli while utyka program przy statycznym kolorze i tam spróbować coś wcisnąć.
chyba, że znacie jakąś lepszą metodę debugowania. println odpada, gdy Serial jest zajęty.
  • Odpowiedz
@ZydowskiZarzadPowierniczy: jak dla mnie to zrobiłeś w pętli setBrightness a nie zrobiłeś show(), pamiętaj że ledy po ustawieniu początkowego inputa potrzebują już tylko zasilanie, koloru/jasności nie będą zmieniać i tak są przygotowane przykłady dla tej biblioteki przy stałym kolorze
  • Odpowiedz
@bruuh: tak. tylko wydaje mi się, że problem jest w tym, że program siedzi w którejś pętli while (!Serial.available()); i nie wykonuje instrukcji aktualizowania ledów.

spróbuję dać timerek do pierwszej z nich i instrukcję skoku na koniec programu, gdzie będzie setBrightness() i show()
  • Odpowiedz
@ZydowskiZarzadPowierniczy: tak działa sterowanie jasnością w diodach (zmieniasz szerokość impulsu), widocznie dałeś tak krótki impuls że dioda zdąży zgasnąć przez to mruganie, jak nisko możesz zejść bez tego efektu zależy już od konkretnego paska ledów
btw goto w kodzie, mordo plz xD
  • Odpowiedz