0

我有一条切成成对的LED灯条;每对都在自己的灯笼中,我希望灯笼可以交替放置我通过它们放置的任何东西。

我正在使用 FastLED 库。我已经发布了我的想法。它似乎在控制台中工作;生成的数组是正确的(或似乎是)' even[] = {0,1,4,5,8,9...}; 奇数 [] = {2,3,6,7,10,11...}' 但灯笼 #1 由于某种原因不能像其他灯一样工作。

lantern #1 = leds[even[0]] 和 leds[even[1]] 应该都显示 Eval 颜色,但 leds[even[1]] 显示 Oval 颜色。

其他灯笼正常显示

灯笼 #2 = leds[odd[0]] 和 leds[odd[1]] 显示椭圆颜色。

lantern #3 = leds[even[2]] 和 leds[even[3]] 显示 Eval 颜色。

灯笼 #4 = leds[odd[2]] 和 leds[odd[3]] 显示椭圆颜色。

ETC...

#include <FastLED.h>

#define NUM_LEDS 12
#define DATA_PIN 3
#define POT_PIN A0


int potValue;

int even[NUM_LEDS];   //{0,1,4,5,8,9...}
int odd[NUM_LEDS];    //{2,3,6,7,10,11...}
int Epos = 0;   //count position for adding lanterns to even/odd arrays
int Opos = 0;
int lantern = 1; // 1 and 2 switch back and forth between lanterns
int pos = 0;        // count 2 leds per lantern


CRGB leds[NUM_LEDS];

void setup() {

   Serial.begin(9600);

   FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS); 
    
    for (int i=0;i<NUM_LEDS;i++){                  //go through leds
              if (pos == 2){
                  pos = 0;
                  if (lantern == 1){
                       lantern = 2;
                  }  
                  else if (lantern == 2){
                         lantern = 1;
                  } 
              }
                
            switch (lantern){
              case 1:                     // even lantern
                        even[Epos] = i;  // i  = led on strip
                        Epos++;
                        pos++;
              break;                                 
              
              case 2:                     // odd lantern
                          odd[Opos] = i;  // i  = led on strip
                          Opos++;
                          pos++; 
              break;                  
            }

  }
     
 Serial.print("\n even:  ");   
 for (int x=0;x<NUM_LEDS;x++){
     Serial.print(even[x]);
 }
 Serial.print("\n odd:  ");
 for (int x=0;x<NUM_LEDS;x++){
      Serial.print(odd[x]);
}

}

//////////////////////////////////////////////////////////////////////////
void split(){
         
                  
         potValue = analogRead(POT_PIN);
         int Eval;                              
         int Oval;                              
         int Eval = potValue;                        //color value for even lanterns
         int Oval = map(potValue,0,1023, 10,500);    //offset color value for odd lanterns 
       
        for (int i=0;i<NUM_LEDS;i++){
               leds[even[i]] = CHSV(Eval,255,255);
               delay(1);
               leds[odd[i]] = CHSV(Oval,255,255);         
     
        }  


       FastLED.show();
}
///////////////////////////////////////////////////////////////////////////

void loop() {
   split();
}

我对 Arduino 很陌生。我做错了什么吗?这是解决此问题的有效方法吗?

4

0 回答 0