Skocz do zawartości

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


Komentator

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 🙂

Link do komentarza
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.

Link do komentarza
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
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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 🙂

Link do komentarza
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!

Link do komentarza
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
Link do komentarza
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?

Link do komentarza
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 😉

Link do komentarza
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);
}
 

Link do komentarza
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 😉

Link do komentarza
Share on other sites

// 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
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.