Skocz do zawartości

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 🙂

  • 2 miesiące później...

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.

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

  • 5 tygodnie później...

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
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 🙂

  • 2 tygodnie później...

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!

@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

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?

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 😉

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);
}
 

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 😉

  • 2 miesiące później...
(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

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ę »
×
×
  • Utwórz nowe...