Üzerinde çalıştığım bir proje için renklerin birbirine geçmesini sağlamaya çalışıyordum.Bunu Adafruit'un örnek kodundan bazılarının gökkuşağı etkisi ile başardım, ancak renkleri seçebilmek istiyorum ( Örneğin koyu maviden açık maviye).
Renkler değişiyor ve soluyor, ancak solma tüm LED'leri kapatıyor ve yeni rengin parlaklığını artırmaya başlıyor. Renklerin solup parlaklığı artırmak yerine karışması gerekiyor.
Biri beni doğru yönü gösterebilecek mi?
#include "LPD8806.h" #include "SPI.h" #define stripSize 64int nLEDs = 160; int dataPin = 2; int clockPin = 3; // İlk parametre, sarmaldaki LED'lerin sayısıdır. LED şeritler // metre başına 32 LED'dir, ancak şeridi uzatabilir veya kesebilirsiniz. Sonraki iki parametre // SPI verisi ve saat pinleridir: LPD8806 strip = LPD8806 (64, dataPin, clockPin); // İsteğe bağlı olarak daha hızlı yazma için donanım SPI kullanabilirsiniz, sadece // veri ve saat pin parametrelerini dışarıda bırakın. Ancak bu, kullanımı Arduino'daki çok // özel pinlerle sınırlar. "Klasik" Arduino'lar için (Uno, Duemilanove, // vb.), Data = pin 11, clock = pin 13. Arduino Mega için, data = pin 51, // clock = pin 52. 32u4 Breakout Board + ve Teensy için veri = pin B2, // saat = pin B1. Leonardo için bu YALNIZCA ICSP pinlerinde yapılabilir.//LPD8806 strip = LPD8806 (nLEDs); void setup () {// LED strip strip.begin (); // Şeridi güncelleyin, bunların hepsi 'kapalı' olacaktır strip.show ();} void loop () {//turnAllOn(strip.Color(30,30,30),4000); solmaya (0, 127, 0, 100); // kırmızı, yeşil, mavi, gecikme - tüm pikselleri tek renk soldur //turnAllOn(strip.Color(30,100,30),4000); solmaya (50, 127, 02, 100); // kırmızı, yeşil, mavi, gecikme - tüm pikselleri tek renk soldur //turnAllOn(strip.Color(100,30,100),4000); solmaya (50, 127, 50, 100); // kırmızı, yeşil, mavi, gecikme - tüm pikselleri tek renk karartır} void fade (uint32_t r, uint32_t g, uint32_t b, uint32_t bekleme) {int i, j; for (j = 0; j < 384; j ++) {
for (i = 0; i < strip.numPixels (); i ++) {strip.setPixelColor (i, strip.Color ((r * j) / 1000, (g * j) / 1000, (b * j) / 1000 )); } strip.show (); } gecikme (bekle);} void turnAllOn (uint32_t c, uint32_t bekleme) {int i; for (i = 0; i < strip.numPixels (); i ++) {strip.setPixelColor (i, c); // tüm pikselleri açın} strip.show (); // tüm pikselleri gecikmeye yaz (bekleyin); } uint32_t Tekerlek (uint16_t WheelPos) {byte r, g, b; anahtar (WheelPos / 128) {case 0: r = 127 - WheelPos% 128; // Kırmızı aşağı g = WheelPos% 128; // Yeşer b = 0; // mavi kapalı ara; durum 1: g = 127 - WheelPos% 128; // yeşil aşağı b = WheelPos% 128; // mavi yukarı r = 0; // kırmızı kapalı mola; durum 2: b = 127 - WheelPos% 128; // mavi aşağı r = WheelPos% 128; // kırmızı yukarı g = 0; // yeşil kapalı mola; } return (strip.Color (r, g, b));}