Skocz do zawartości
Komentator

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

Pomocna odpowiedź

(edytowany)
 for (a = 255 ; a > 0; a --) {
   linijka.setPixelColor(0, linijka.Color(0,0,a));
   linijka.setPixelColor(1, linijka.Color(0,0,a));
   linijka.setPixelColor(2, linijka.Color(0,0,a));
   linijka.setPixelColor(3, linijka.Color(0,0,a));
   linijka.setPixelColor(4, linijka.Color(0,0,a));
   linijka.setPixelColor(5, linijka.Color(0,0,a));
   linijka.setPixelColor(6, linijka.Color(0,0,a));
   linijka.setPixelColor(7, linijka.Color(0,0,a));
   linijka.show();
delay(10);

Witam , zależny mi na krótszym zapisie . Jak załączyć diody w jednej linijce zapisu .Proszę o pomoc.

Edytowano przez pawelkucz

Udostępnij ten post


Link to post
Share on other sites

Przede wszystkim przejrzyj funkcje dostępne w tej bibliotece. Jeżeli nie ma takiej która np. ustawia ten sam kolor wszystkim diodkom (lub jakiemuś ich zakresowi), to pozostaje używanie tej pojedynczej, co najwyżej możesz skrócić zapis przez użycie którejś konstrukcji pętli:

for (a = 255; a > 0; a --) {
  for (uint8_t n = 0; n <= 7; n++)
    linijka.setPixelColor(n, linijka.Color(0, 0, a));
  linijka.show();
}
delay(10);

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Witam 

Tego w poradniku nie było 

Już umiem zapalac dany kolor aby "szedł" w lewą strone 

Ale jak zapalac diody od prawej strony? Jedna po drugiej? 

Będzie jeszcze kontynuacja kursu o diodach ws2812? Gdyż ten jest lekko okrojony :(

Pozdrawiam

Udostępnij ten post


Link to post
Share on other sites

@Piro, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.
1 godzinę temu, Piro napisał:

Ale jak zapalac diody od prawej strony? Jedna po drugiej? 

Będzie jeszcze kontynuacja kursu o diodach ws2812? Gdyż ten jest lekko okrojony 😞

To nie był kurs pisany z myślą tylko o diodach, w każdym odcinku opisywane było coś innego. Rozwiązanie Twojego problemu nie jest związane bezpośrednio z diodami. Zapoznaj się z kursem podstaw Arduino, jak opanujesz dobrze temat pętli to żadne włączanie diod (w dowolnym kierunku) nie będzie już stanowiło problemu 😉 Możesz do tego wykorzystać np. pętlę forKurs Arduino – #8 – Sterowanie silnikami DC, pętla for

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

A ja się pochwalę tym co zrobiłem. Program powinien działać (chyba, nie mam jak sprawdzić) w zasadzie z dowolną ilością LED pod warunkiem zdefiniowania tej ilości w "LEDcount". Pewnie jest sporo błędów ale nie zajmuje się programowaniem na co dzień. Inspiracja: kaukaskie wieżowce 😛

 

#include <Adafruit_NeoPixel.h>
#define LEDcount 8
#define background 10
#define diff 150
#define maximum 255
Adafruit_NeoPixel RGBstrip= Adafruit_NeoPixel(LEDcount, A0, NEO_GRB + NEO_KHZ800);

#define opoznienie 100
int i = 0;
int j = 0;

void setup() {
  RGBstrip.begin();
  for(i = 0; i < LEDcount; i++){
    RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, background));
  }
  RGBstrip.show();
}

void loop() {
  for(int i = 0; i < LEDcount; i++){  
    for(int j = 0; j < 255; j++){
      if(i == 0){
        RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum)));
        RGBstrip.setPixelColor(i+1, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff)));
        RGBstrip.setPixelColor(LEDcount-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff)));
        RGBstrip.setPixelColor(LEDcount-2, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background)));
      }
      else if(i == 1){
        RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum)));
        RGBstrip.setPixelColor(i+1, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff)));
        RGBstrip.setPixelColor(i-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff)));
        RGBstrip.setPixelColor(LEDcount-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background)));
      }
      else if((i > 1) && (i < (LEDcount-2))){
        RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum)));
        RGBstrip.setPixelColor(i+1, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff)));
        RGBstrip.setPixelColor(i-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff)));
        RGBstrip.setPixelColor(i-2, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background)));    
      }
      else if(i == LEDcount - 2){
        RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum)));
        RGBstrip.setPixelColor(i+1, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff)));
        RGBstrip.setPixelColor(i-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff)));
        RGBstrip.setPixelColor(i-2, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background)));
      }
      else if(i == LEDcount - 1){
        RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum)));
        RGBstrip.setPixelColor(0, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff)));
        RGBstrip.setPixelColor(i-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff)));
        RGBstrip.setPixelColor(i-2, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background)));
      }
      RGBstrip.show();
      delayMicroseconds(opoznienie);
    }
  }
}

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@Rogal bardzo fajny efekt 🙂 Jeśli chodzi o program to proponowałbym tylko dodać trochę komentarzy. Wiem, że teraz dla Ciebie każda linijka jest oczywista, ale jak wrócisz do swojego kodu za jakiś czas to sam będziesz miał problemy z przypomnieniem sobie o co tam chodziło. Z takich drobiazgów można się jeszcze tylko doczepić nazewnictwa stałych/zmiennych. Jeśli większość jest w języku angielskim to wypadałoby w takiej samej konwencji nazwać stałą "opoznienie". Jednak to są już takie detale 😉

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
2 godziny temu, Treker napisał:

Z takich drobiazgów można się jeszcze tylko doczepić nazewnictwa

Też o tym myślałem. Problem był taki, że "delay" jest już wykorzystane w innym kontekście jako komenda a nic innego na szybko nie wymyśliłem. Co do komentarzy to nie pomyślałem wcześniej. W sumie to mój pierwszy kod do którego mam szanse kiedyś wrócić 🙂

  • Lubię! 1

Udostępnij ten post


Link to post
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!

Gość
Dołącz do dyskusji! Kliknij, aby zacząć 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...