Arduino Polska Forum
Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Diody LED i Multiplexing (https://forum.arduinopolska.pl/dzial-diody-led-i-multiplexing)
+--- Wątek: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR (/watek-problem-z-wyj%C5%9Bciem-z-petli-przy-sterowaniu-efektami-na-ws2812b-za-pomoc%C4%85-pilota-ir)



Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - kubaskubas4 - 21-02-2019

Witam mam problem z tym że jeśli za pomocą pilota wybiorę jakich efekt na moich pasku led WS2812B (300 diód) to nie mogę przełączyć na inny tryb ponieważ jest to otwarzane w nieskończonej pętli.
Pętla musi być ponieważ nie chcę po każdym skończeniu efektu znowu go wybierać. Proszę o pomoc i z góry dziękuje
Arduino Uno R3
Dioda IR 1838B + pilot Car mp3
5m WS2812B 60diód/m


RE: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - error105 - 21-02-2019

Użyj przerwań, zapisuj w zmiennej jaką pętla ma lecieć, jak efekt zobaczy że zmienną nie odpowiada pętli która jest aktualna przerwie ja.


RE: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - kubaskubas4 - 22-02-2019

https://drive.google.com/open?id=1XJwZcMU9AujCKBWvVUqNw3qtZHuDf-jH
Tutaj jest mój obecny kod


RE: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - error105 - 22-02-2019

Niestety nie mam jak pobrać na telefonie.
Nie mniej, masz powyżej odpowiedź co trzeba zrobić Smile


RE: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - kubaskubas4 - 22-02-2019

Tutaj jest kawałek własnie tego kodu

void loop() {
irrecv.blink13(true); // mrugamy diodami w arduino
if (irrecv.decode(&results)) {

switch (results.value) {

case 0x511DBB: //przycisk1 ON
ZMIENNA=0;
poweron();
break;

case 0xE318261B: //przycisk2 OFF
ZMIENNA=0;
poweroff();
break;

case 0xD7E84B1B: //przycisk|<< KOLEJNY KOLOR
ZMIENNA=0;
if(ZMIENNAKOLORU<=9){ZMIENNAKOLORU++;}
USTAWKOLOR(); WYSWIETL();
break;

case 0x52A3D41F: //przycisk>>| COFNIJ KOLOR
ZMIENNA=0;
if(ZMIENNAKOLORU>=2){ZMIENNAKOLORU--;}
USTAWKOLOR(); WYSWIETL();
break;

case 0x9716BE3F: //przycisk1 EFEKT TECZA
ZMIENNA=1;
break;

case 0x3D9AE3F7: //przycisk2 EFEKT TECZA 2
ZMIENNA=2;
break;

case 0x6182021B: //przycisk3 PRZEJSCIE POMIEDZY R G B
ZMIENNA=3;
break;

case 0x8C22657B: //przycisk4 POJAWIĄJĄCE SIĘ LOSOWE ŚWIATEŁKA
ZMIENNA=4;
break;

case 0x488F3CBB: //przycisk5 METEORYT
ZMIENNA=5;
break;

case 0x00000009: //przycisk6
//ZMIENNA=X;
break;

//case 0x00000009: //przycisk6 KOPIA
//ZMIENNA=X;
//break;

}
irrecv.resume();
}
if (ZMIENNA == 1){rainbow(20);}
if (ZMIENNA == 2){theaterChaseRainbow(50);}
if (ZMIENNA == 3){RGBLoop();}
if (ZMIENNA == 4){TwinkleRandom(275, 110, false);}
if (ZMIENNA == 5){ meteorRain(random(0,255),random(0,255),random(0,255),25, 64, true, 30);}
//if (ZMIENNA == X){*efekt*}
//if (ZMIENNA == X){*efekt*}
//if (ZMIENNA == X){*efekt*}
//if (ZMIENNA == X){*efekt*}
//if (ZMIENNA == X){*efekt*} KOPIA
}


RE: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - error105 - 22-02-2019

Dalej twierdzę, że musisz w pętli włączyć wykrywanie kodów pilota i by zmieniał w zależności co odczyta zmienną zmieniająca aktualnie uruchomiona pętlę. I w każdej pętli musi być takie coś.


RE: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - Robson Kerman - 22-02-2019

error105 dobrze prawi.
Struktura kodu jest do przebudowania. Ustaw sobie przerwanie od pilota i wartość zmiennej ZMIENNA ustawiaj w przerwaniu. W każdej pętli odpowiadającej za efekt świetlny, w najbardziej zagnieżdżonej pętli for musisz cyklicznie sprawdzać wartość tej zmiennej i jeśli nie jest tą, która odpowiada za ten efekt, to Break.


RE: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - es2 - 23-02-2019

Przerwanie od pilota zakłóci komunikację z LED. Ponadto, libs Arduino zawieszają przerwania na czas komunikacji z LED. Problem rozwiąże transmisja do LED przez UART w przerwaniu. Wypróbowane w praktyce, poza dekodowaniem IR ok 20 standardów na przerwaniu 15kHz, realizowana jest komunikacja po przez UART z ESP oczywiście w przerwaniach, USB po I2C, zapis na kartę SD i multipleksowany LED 7-SEG, Ostatecznie może być SPI. Najlepiej jednak użyć DMA.


RE: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - es2 - 23-02-2019

Można nie używać DMA i obciążać CPU w 100% i mieć problemy z obsługą pilota.
Można się namęczyć aby na AVR (na ARM tak 7..20 razy łatwiej) sterować LED'ami przez UART na przerwaniach. Z obsługa pilota nie będzie problemu.

Chcesz bez DMA, przerwań, DA SIĘ!
Nakombinujesz się wstawiając jakieś sprawdzania w czasie wystawiania "L" do WS2812 czy jest aktywne wejście odbiornika IR, obsłużysz go. Wszystko będzie chodzić kulawo, bo w czasie transmisji IR LED będzie głupieć.
Ja bym takiego szmelcu nie chciał.

Rób jak uważasz.
Rozwiązanie na USART + IRQ na AVR działa, obciążenie CPU 80..90%.
Z DMA obciążenie 1..2% zależnie od uC, zegara.


RE: Problem z wyjściem z petli przy sterowaniu efektami na WS2812B za pomocą pilota IR - error105 - 23-02-2019

Dostałeś dwa rozwiązania, jedno proste do zastosowania drugie ciut więcej będzie gimnastyki wymagało (chyba że jesteś na tyle biegły w programowaniu, ale czy wtedy szukałbyś pomocy ?).
Tak na prawdę program do migania ledem może być bardziej zaawansowany Smile