Förra julen började vi sälja X-mas lights by m.nu, en julbelysning baserad på WS2801 och Arduino-kompatibel Nano. Försäljningen fortsätter även i år, men nu har vi lagt till fler färglägen förutom “Snow Glitter” som vi lade till förra julen. Så nu ska vi kort gå igenom koden för dem, för att förklara vad vi gjort! 🙂

Koden för dessa två färglägen använder sig av befintliga hjälpfunktioner, så koden är därför inte så värst omfattande:

if (buttonPushCounter == 5){
    while (true) {
      int i;
      int colorValue = analogRead(analogPin)/4;
      uint32_t color = Wheel(colorValue);
      for (i=0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, color);
      }
      strip.show();
      button();

      if (buttonPushCounter >5) //Button is pressed, exit
        break;
    }
  }
  
  if (buttonPushCounter == 6){
    while (true) {
      int i;
      int colorValue = analogRead(analogPin)/8;
      uint32_t color = Color(colorValue, colorValue, colorValue);
      for (i=0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, color);
      }
      strip.show();
      button();

      if (buttonPushCounter >6) //Button is pressed, exit
        break;
    }
  }

I loopen för buttonPushCounter == 5 läser vi först in värdet på analogPin. Potentiometern ger ett värde mellan 0-1023, och eftersom det är 256 lägen på färgerna delar vi med 4 för att få 0-255.

vi skickar sen in värdet i hjälpfunktionen Wheel, som används i “Rainbow Cycle”, och sätter sen alla LEDs i slingan till den färgen. Slutresultatet blir att man genom att vrida potentiometern kan ställa färgen på hela slingan! 🙂

I buttonPushCounter == 6 gör vi ungefär samma sak, men istället för att dela potentimetervärdet med 4 delar vi det med 8. Detta dels för att energiförbrukningen blir lite väl hög om man maxar alla slingor på vit färg (på ~122 vilket vi använder ligger förbrukningen runt 12W), men också för att det upplevda ljuset inte blir så mycket ljusare därefter.

När vi fått ut värdet skapar vi en Color som har samma värden på R, G och B vilket då såklart ger oss vit färg. Vill man tweaka detta på något sätt, t.ex. för att få lite gulaktigare färg, är det alltså i Color(colorValue, colorValue, colorValue) man ska ändra!

De avslutande raderna är samma som tidigare, strip.show() säger åt LED:arna att uppdatera färgen, button() kollar om knappen tryckts på för att i så fall hoppa till nästa läge i if-satsen under.

Och den färdiga koden då? Jo, här är den:

X-mas lights by m.nu - version 3 (2316 nedladdningar)

 

Ett kort inlägg denna gång, men förhoppningsvis informativt? 🙂

På återseende!