arturo wrote: Tue Feb 07, 2023 12:03 am
Walczę dalej, C++ to nie mój ulubieniec (jeszcze) ale się nie poddaje. Przeanalizowałem repo supla-device wraz z przykładami i doszedłem do wniosku, że chyba najlepiej byłoby nadpisać klasę RGBWBase, zauważyłem że jest tam metoda setRGB która generalnie zawsze ustawia jasność itp. pomyślałem że to ją odbiorę sobie na cel i ja nadpisze po to aby po jej wykonaniu wysłać odpowiednią komendę. Nie jestem pewien czy w dobrym kierunku wiosłuje i trochę liczę, że mnie poprawicie jeśli jestem w błędzie. Natomiast jeśli kombinuje dobrze to czy moglibyście podpowiedzieć jak wysłać ta komendę przez uart?
Wymyśliłem, że stworzę hardwareserial na odpowiednich pinach i wyśle poprzez write() std::string ale tak nie przejdzie bo już na etapie kompilacji się krzaczy że write nie obsługuje typu std::string&. Nie liczę na kod ale chociaż na jakąś podpowiedź. Dzięki!
RGBW base jest jeśli używasz kanałów RGB oraz W(white/dimmer) (jest to też klasa bazowa dla pozostałych rgb i dimmer). Jeśli to jest tylko "dimmer", to użyj "supla/control/dimmer_base.h" Supla::Control::DimmerBase.
Do nadpisania przy dziedziczeniu jest metoda setRGBWValuesOnDevice oraz prawdopodobnie onInit, aby zainicjalizować co trzeba.
Zerknij sobie na pliki "dimmer_leds.h" i "dimmer_leds.cpp" - tam jest pokazana przykładowoa implementacja dimmera, która używa wyjścia PWM. W "onInit" jest ustawiana inicjalizacja GPIO, a w setRGBWValuesOnDevice jest ustawienie konkretnych wartości na GPIO.
Ty prawdopodobnie musisz ustawić jakąś incicjalizację uarta w metodzie onInit, a w setRGBW... ustawiasz wysyłanie komend z konkretną wartością ściemniacza.
setRGBWValuesOnDevice jest uruchamiana czasem wiele razy na sekundę, z różnymi wartościami, aby realizować np. efekt rozjaśniania/śmieniania/soft start itd.
Osobiście, gdy zaczynam pracować z nowym sprzętem, to często tworzę sobie pusty projelkt w arduino ide i próbuję ogarnąć najpierw komunikację z tym urządzeniem. Czyli zainicjalizowałbym tego uarta, a następnie w pętli np co 1 s wysyłał różne wartości na układ, aby zobaczyć czy wszystko działa.
Jak to mam ogarnięte, to wtedy kod przesoszę do klasy w Supli, która ma to obsługiwać.
Dzięki temu nie walczysz na raz z wieloma potencjalnymi problemami, tylko idziesz po kolei .