Skocz do zawartości
Komentator

Kurs Arduino II - #2 - diody RGB (tradycyjne oraz WS2812)

Pomocna odpowiedź

vst, kolejny raz dziękuję za uwagi 🙂

Dlaczego listwa jest programowana przez pin A0? Niby wcześniej pojawiła się odpowiedź, ale nie rozwiała wątpliwości. Sugeruje to to, że musi to być pin analogowy, żeby zmieniać wartość od 0 do 255. Zatem nie może to być klasyczny pin stan niski/stan wysoki. Czyli PWM też nie może być, gdyż zapewnia tylko zmienne wypełnienie sygnału prostokątnego. Zatem?

Piny analogowe można wykorzystywać tak jak cyfrowe. Tak właściwie są to piny cyfrowe, które mają drugą funkcję - mogą pracować jako wejścia analogowe. Można z nich korzystać tak samo jak z innych pinów. Wybrałem A0 bez żadnego większego powodu - pewnie wygodnie było mi tam podłączyć przewód 🙂

Udostępnij ten post


Link to post
Share on other sites

Witam,
Mam pytanie, bo po ponownym zainstalowaniu Arduino IDE nie mogę zainstalować biblioteki Adafruit NeoPixel i żadnej innej, i niestety nie wiem dlaczego. Czy ktoś inny może też ma podobną sytuację, może jest to spowodowane nowymi aktualizacjami?

Wyskakuje mi błąd, że w moim folderze posiadam błędne biblioteki.

Udostępnij ten post


Link to post
Share on other sites

Philip, gdzie dokładnie wyskakuje Ci ten błąd? Czy w folderze masz jeszcze jakieś inne biblioteki oprócz wspomnianej Adafruit NeoPixel?

Udostępnij ten post


Link to post
Share on other sites

Mam pytanie. Co robi 13 linijka w ostatnim kodzie (uint32_t kolor = 0;) ?

Tak przy okazji. Cały Forbot to świetne kursy, wszystko jasno wytłumaczone!

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
Tak przy okazji. Cały Forbot to świetne kursy, wszystko jasno wytłumaczone!

Dzięki, miło słyszeć 🙂

Mam pytanie. Co robi 13 linijka w ostatnim kodzie (uint32_t kolor = 0;) ?

Jest zbędna, faktycznie ta zmienna nie była nigdzie później wykorzystana. Gratuluję spostrzegawczości. Już poprawiam 🙂

Udostępnij ten post


Link to post
Share on other sites

Witam

Żałuję że tak późno poznałem arduino i ws2812, ale na forbocie jestem od dłuższego czasu..

A propo ws2812.. Dopiero się uczę ale nie widzę większej różnicy w kodzie między jednym "kogutem" a drugim a dziwi mnie to że w pierwszym diody zapalają się wszystkie na raz a w drugim po kolei, jaka część kodu za to odpowiada? Widzę jakiś podział na 4 ale nie powinny one i tak zapalić się 4 na raz?

Pozdrawiam!

Udostępnij ten post


Link to post
Share on other sites

@Klos, witam na forum!

Zobacz, gdzie znajduje się linijka.show(). W jednym programie jest umieszczona w pętli for, a w drugim poza nią. Dzięki temu w jednym przypadku zmiany na diodach są widoczne po każdym obiegu pętli, a w drugim przypadku zmiany są widoczne dopiero po obiegu całej pętli.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dzięki za szybką odpowiedz, faktycznie to jest to 🙂

Ale mam już kolejne pytanie; czemu linijka.clear(); nie gasi pierwszej diody? da się to jakoś sprawnie załatwić i dodać jeszcze czas po którym pętla znowu startuje?

Udostępnij ten post


Link to post
Share on other sites
27 minut temu, Klos napisał:

Ale mam już kolejne pytanie; czemu linijka.clear(); nie gasi pierwszej diody?

Gasi, ale po tej linijce w przykładach program natychmiast zaczyna wykonywać pętlę, a jej pierwszym krokiem jest włączenie pierwszej diody. Dzieje się to tak szybko, że pozornie dioda ta nigdy nie gaśnie. Dodaj po linijka.clear() opóźnienie to zobaczysz ten efekt 😉

Udostępnij ten post


Link to post
Share on other sites

hmm

Wpłynęło to na czas po jakim wygaśnie linijka a nie odstęp rozpoczęcia pętli, chyba że w złe miejsce to wpisałem?


  linijka.show();
  delay(200);
   }
 linijka.clear();
 delay(100);
}
 

Udostępnij ten post


Link to post
Share on other sites

Hmm, nie mam teraz pod ręką tej linijki. Możesz sprawdzić jak układ zachowa się w poniższym przypadku?

[...]  
  linijka.show();
  delay(200);
   }
 linijka.clear();
 linijka.show();
 delay(100);
}

PS pamiętaj proszę, aby kody programów umieszczać za pomocą odpowiedniej opcji w edytorze 😉

Udostępnij ten post


Link to post
Share on other sites

Działa idealnie 🙂

Dzięki wielkie!

Wybacz, zaraz zapoznam się z całym forum itp.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Super, że działa przy kolejnej aktualizacji dodam tę informację do kursu.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
// Adafruit NeoPixel - Version: Latest 
#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel linijka = Adafruit_NeoPixel(8, A0, NEO_GRB + NEO_KHZ800); //Konfiguracja linijki

void setup() {
    linijka.begin(); //Inicjalizacja
    linijka.show();
}

void loop() {
    int i = 0;
    for(i = 0; i < 4; i++){
      if(i < 4){
        linijka.setPixelColor(i, linijka.Color(255, 0, 0));
        linijka.setPixelColor(7 - i, linijka.Color(0, 0, 255));
      }

     linijka.show();
      delay(100);
      linijka.clear();
    }

    for(i = 2; i > 0; i--){
      linijka.setPixelColor(i, linijka.Color(255, 0, 0));
      linijka.setPixelColor(7 - i, linijka.Color(0, 0, 255));

      linijka.show();
      delay(100);
      linijka.clear();
    }
}

W ramach ćwiczeń stworzyłem prymitywną symulacje odbicia doskonale sprężystego 🙂

Edytowano przez D3binski
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Super, że eksperymentujesz! Pochwalisz się jakimś filmem, na którym widać animację "w praktyce" 🙂?

Udostępnij ten post


Link to post
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »

×