Loop onderbreken met ir-signaal

Hallo, ten eerste fijne kerstdagen.

Ik ben met een projectje bezig, onderdelen zijn besteld (aliexpress) en terwijl ik wacht op de onderdelen.
leek het me strak plan om al vast de code te schrijven, maar zit nu beetje vast.
korte nachtjes ivm googlen en fora's lezen maar kom niet verder.

project:
Vervangen van 40 st. 12V 5W halogeen lampjes (plafonlamp) naar 40st ws2812B leds.
omdat die lamp aan het plafon hangt is een knopje niet echt een optie, dus maar met afstandbediening doen. ir ontvanger en a.b. van oude led strip opgeofferd. testopstelling op breadboard (maar dan met ws2801 strip, had ik nog liggen) ir codes van de knoppen opgeschreven, code bij elkaar gejat, en hoppa werkt.

Ontvanger -> ir code binnen -> case uitvoeren (case is aparte void, B.v. alles blauw)

aan, uit, feller, minder fel, alles groen, alles rood, alles blauw, helft blauw, alle kleuren (rainbowfill) enz.

dit zijn (zeg maar) statische weergaven, wil graag ook beetje beweging in die lamp, knipperen, fades, blink, enz.
maar dan krijg je een voidje met een loop er in....... en dat werkt prima.

Maaaaaaaar........

als je die die weergave kiest kan je drukken op de ab wat je wil maar uitzetten of andere weergave kiezen gaat niet (ja lamp echt alles uit zetten. hard switch)
geprobeerd om in die loop iets op te nemen dat ie nog ff checkt of er een ir signaal binnen komt.
maar geen succes tot nu toe. HELP???

code die ik nu heb hier onder, een schema van de opstelling in de attachment (zitten 24 cases in de code heb er een aantal uit gelaten). code zal niet optimaal zijn, en zal beter kunnen. maar goed ik ben geen pro, kloot maar wat aan :wink:
Afstandbediening app (android) die ook werkt klik hier

hoop dat jullie me in de juiste richting kunnen wijzen.

mvg
Mark

// ir sectie

#include <IRremote.h>
int RECV_PIN = 3;

    #define code1  255
    #define code2  32895
    #define code3  16575
    #define code4  49215
    #define code5  8415
    #define code6  41055
    #define code7  24735
    #define code8  57375 
    #define code9  4335
    #define code10 36975
   
    
IRrecv irrecv(RECV_PIN);
    decode_results results;
    
// fastled
  #include "Arduino.h"
  #include <FastLED.h>
  #define NUM_LEDS 40
  CRGB leds[NUM_LEDS];
  
   
void setup() {
   Serial.begin(9600);   // you can comment this line
// ir  
      irrecv.enableIRIn();  // Start the receiver

irrecv.blink13(true); 

// Ledstrip      
   FastLED.addLeds<WS2801, BGR>(leds, NUM_LEDS);
// lamp aan warmwit
  aan();
    
}

void loop() {
  static int brn = 255;
 FastLED.setBrightness(brn);
  ir();

}
void ir() {
  static int brn = 255;
 FastLED.setBrightness(brn);
 if (irrecv.decode(&results)) {
        unsigned int value = results.value;
        switch(value) {
           case code1:
                brn = brn + 10;
                if (brn >= 255) {
                  brn = 255;
                }
                Serial.println(brn); 
               FastLED.show();
                break;

           case code2:
               brn = brn - 10;
               if (brn <= 5) {
                brn = 5;
                }       
              
               Serial.println(brn); 
              FastLED.show();
               break;
          case code3:
               uit();
               break;
          case code4:
               aan();
               break;
          case code5:
              rood();
              break; 
          case code6:
              groen();
              break;
          case code7:
              blauw();
              break; 
          case code8:
              wit();
              break; 
          case code9:
              magenta();
              break;
         
        }
        Serial.println(value); // you can comment this line
        irrecv.resume(); // Receive the next value
     
      }

}

void aan() {
fill_solid( leds, NUM_LEDS, CRGB( 255, 147, 41));
FastLED.show();
}

void aan2() {
fill_solid( leds, (20,40), CRGB::NavajoWhite);
fill_rainbow(leds, 20, 0, 12.75);
FastLED.show();
}

void haan2() {
fill_solid( leds, (20,40), CRGB::Black);
fill_rainbow(leds, 20, 0, 12.75);
FastLED.show();
}

void uit() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
FastLED.show();
}

void rood() {
fill_solid( leds, NUM_LEDS, CRGB::Red);
FastLED.show();
}

void groen() {
fill_solid( leds, NUM_LEDS, CRGB::Green);
FastLED.show();
}

void blauw() {
fill_solid( leds, NUM_LEDS, CRGB::Blue);
FastLED.show();
}

void hblue() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
fill_solid( leds, (0,20), CRGB::Blue);
FastLED.show();
}

void wit() {
fill_solid( leds, NUM_LEDS, CRGB::White);
FastLED.show();
}

void magenta() {
fill_solid( leds, NUM_LEDS, CRGB::Magenta);
FastLED.show();
}

Even om het taalgebruik juist te houden. een 'voidje' bestaat niet. Je hebt het over een functie(). En als daarvoor 'void' staat, betekent dat, dat deze functie niets teruggeeft. Zet je er bijvoorbeeld 'int' dan geeft deze functie een int terug.
Voor wat betreft jouw oplossingsmogelijkheid:
In de loop moet je eerst de code lezen van de AB.
Afhankelijk van de gekozen kode kies je een programma modus
Afhankelijk van die programma modus, kies je wat je wilt. Zolang het eenvoudige aan/uit acties zijn ed kun je dat in een eenvoudige functie doen.
Wil je nu mooie effecten, dan moet je gaan werken met timers zoals blink without delay. Uiteindelijk wil je op bepaalde momenten iets doen (iets feller, aan zetten, uitzetten, lopen langs de string etc). Op alle andere momenten niets dus ga je gelijk weer uit die functie en zal er wel gereageerd worden op de AB omdat je weer in de hoofdloop kom.

Dank je wel, brengt me weer op ideeen.

gaat nog ff wat aan rommelen

mvg mark

Soort van gelukt, code moet nog op geschoond worden maar het werkt zo als bedoeld

// ir sectie

#include <IRremote.h>
int RECV_PIN = 3;

    #define code1  255
    #define code2  32895
    #define code3  16575
    #define code4  49215
    #define code5  8415
    #define code6  41055
    #define code7  24735
    #define code8  57375 
    #define code9  4335
    #define code10 36975
    #define code11 20655
    #define code12 53295
    #define code13 12495
    #define code14 45135
    #define code15 28815
    #define code16 61455
    #define code17 2295
    #define code18 34935
    #define code19 18615
    #define code20 51255
    #define code21 10455
    #define code22 43095
    #define code23 26775
    #define code24 59415
    
IRrecv irrecv(RECV_PIN);
    decode_results results;
    
// fastled
  #include "Arduino.h"
  #include <FastLED.h>
  #define NUM_LEDS 40
  CRGB leds[NUM_LEDS];
  
//control
  
int program = 4;
int Brightness = 200;

    
void setup() {
   Serial.begin(9600);   // you can comment this line
// ir  
      irrecv.enableIRIn();  // Start the receiver

// irrecv.blink13(true); 

// Ledstrip      
   FastLED.addLeds<WS2801, BGR>(leds, NUM_LEDS);
    
}

void loop() {
  
 FastLED.setBrightness(Brightness);
 Serial.println(program);
 Serial.println(Brightness);

 ir();

 if (program == 1) {
  uit();
 }
 if (program == 2){
  aan();  
 }
 if (program == 3){
  rood();  
 }
 if (program == 4){
  groen();  
 }
 if (program == 5){
  blauw();  
 }
 if (program == 6){
  wit();  
 }
 if (program == 7){
  magenta();  
 }
 if (program == 8){
  LimeGreen();  
 }
 if (program == 9){
  hblue();  
 }
 if (program == 10){
  flash();  
 }
 if (program == 11){
  uit();  
 }
 if (program == 12){
  uit();  
 }
 if (program == 13){
  uit();  
 }
 if (program == 14){
  uit();  
 }
 if (program == 15){
  uit();  
 }
 if (program == 16){
  uit();  
 }
 if (program == 17){
  uit();  
 }
 if (program == 18){
  uit();  
 }
 if (program == 19){
  uit();  
 }
 if (program == 20){
  smooth();  
 }
}

void ir() {
 // static int brn = 200;
 //FastLED.setBrightness(brn);
 if (irrecv.decode(&results)) {
        unsigned int value = results.value;
        switch(value) {
           case code1:
                Brightness = Brightness + 10;
                if (Brightness >= 255) {
                  Brightness = 255;
                }
                Serial.println(Brightness); 
               FastLED.show();
                break;

           case code2:
               Brightness = Brightness - 10;
               if (Brightness <= 5) {
                Brightness = 5;
                }       
              
               Serial.println(Brightness); 
              FastLED.show();
               break;
          case code3:
               program = 1;
               break;
          case code4:
               program = 2;
               break;
          case code5:
               program = 3;
               break; 
          case code6:
               program = 4;
               break;
          case code7:
               program = 5;
               break; 
          case code8:
               program = 6;
               break; 
          case code9:
               program = 7;
               break;
          case code10:
               program = 8;
               break;
          case code11:
               program = 9;
               break;    
          case code12:
               program = 10;
               break;
          case code13:
               program = 11;
               break;
          case code14:
               program = 12;
               break;   
          case code15:
               program = 13;
               break;
          case code16:
               program = 14;
               break; 
          case code17:
               program = 15;
               break; 
          case code18:
               program = 17;
               break;         
          case code20:
               program = 18;
               break;
          case code21:
               program = 19;
               break;
          case code24:
               program = 20;
               break;           
        }
        Serial.println  (value); // you can comment this line
        
        irrecv.resume(); // Receive the next value

       
      }

}

void aan() {
fill_solid( leds, NUM_LEDS, CRGB::White);
FastLED.show();
}

void aan2() {
fill_solid( leds, (20,40), CRGB::NavajoWhite);
fill_rainbow(leds, 20, 0, 12.75);
FastLED.show();
}

void haan2() {
fill_solid( leds, (20,40), CRGB::Black);
fill_rainbow(leds, 20, 0, 12.75);
FastLED.show();
}

void uit() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
FastLED.show();
}

void rood() {
fill_solid( leds, NUM_LEDS, CRGB::Red);
FastLED.show();
}

void groen() {
fill_solid( leds, NUM_LEDS, CRGB::Green);
FastLED.show();
}

void blauw() {
fill_solid( leds, NUM_LEDS, CRGB::Blue);
FastLED.show();
}

void hblue() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
FastLED.show();
fill_solid( leds, (0,20), CRGB::Blue);
FastLED.show();
}

void wit() {
fill_solid( leds, NUM_LEDS, CRGB::White);
FastLED.show();
}

void magenta() {
fill_solid( leds, NUM_LEDS, CRGB::Magenta);
FastLED.show();
}

void LimeGreen() {
fill_solid( leds, NUM_LEDS, CRGB::LimeGreen);
FastLED.show();
}

void hLimeGreen() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
fill_solid( leds, (0,20), CRGB::LimeGreen);
FastLED.show();
}

void DeepSkyBlue() {
fill_solid( leds, NUM_LEDS, CRGB::DeepSkyBlue);
FastLED.show();
}

void DarkOrange() {
fill_solid( leds, NUM_LEDS, CRGB::DarkOrange);
FastLED.show();
}

void DeepPink() {
fill_solid( leds, NUM_LEDS, CRGB::DeepPink);
FastLED.show();
}

void hDeepPink() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
fill_solid( leds, (0,20), CRGB::DeepPink);
FastLED.show();
}

void flash() {  
fill_solid( leds, NUM_LEDS, CRGB::White);
FastLED.show();
delay(500);
fill_solid( leds, NUM_LEDS, CRGB::Black);
FastLED.show();
delay(500);
}

void smooth() {
static int j = 0;
fill_rainbow(leds, NUM_LEDS,(0, j), 6.375);
FastLED.show(); 
j++;
  if (j == 255) {
    j = 0;
  } 
  delay(200);
         
}

void hsmooth() {
//static int j = 0;
fill_rainbow(leds, NUM_LEDS, 0, 12.75);
FastLED.show();
}

zoek uit hoe blink without delay werkt, want dan kun je veel sneller scannen of er op een knop gedrukt wordt.
en alle delays weghalen.

goeie tip, thanks

zal van weekend eens gaan studeren

Goedemiddag,

nu snap ik het echt niet meer.

code is voor strip met WS2801 leds.

hier heb ik ook de code mee geschreven omdat ik die nog had liggen
nu zijn me andere leds binnen WS2812B
alles ingebouwd in de lamp code aan passen van ws2801 naar ws2812B
so far so good.

uploaden en gaan, niet dus

als ik fastled vertel dat er ws2812b aan hangt doet de ir-ontvanger raar.
knopje links boven geeft code 255 (ws2801) maar nu zomaar wat en geen een keer het zelfde.
wijzig ik de code terug naar ws2801 leds niks aan de hand.

wijzigingen voor ws2812b

de // voor "define data_pin 6 "gaan weg.
en (in void setup)
FastLED.addLeds<WS2801, BGR>(leds, NUM_LEDS);
wordt
FastLED.addLeds<WS2812b, DATA_PIN, GRB>(leds, NUM_LEDS);

en dan slaat ir-remote op hol.

mis ik wat?

jullie misschien ervaring mee?

code (voor WS2801 led strip)

// ir sectie

#include <IRremote.h>
int RECV_PIN = 3;

    #define code1  255
    #define code2  32895
    #define code3  16575
    #define code4  49215
    #define code5  8415
    #define code6  41055
    #define code7  24735
    #define code8  57375 
    #define code9  4335
    #define code10 36975
    #define code11 20655
    #define code12 53295
    #define code13 12495
    #define code14 45135
    #define code15 28815
    #define code16 61455
    #define code17 2295
    #define code18 34935
    #define code19 18615
    #define code20 51255
    #define code21 10455
    #define code22 43095
    #define code23 26775
    #define code24 59415
    
IRrecv irrecv(RECV_PIN);
    decode_results results;
    
// fastled
  #include "Arduino.h"
  #include <FastLED.h>
 //#define DATA_PIN 6
 //#define CLOCK_PIN 13
  #define NUM_LEDS 40
  CRGB leds[NUM_LEDS];
  
//control
  
int program = 24;
int Brightness = 200;
int Brightnessorg = 0;
int knipper = 0;
int randNumber1 = 0;
int randNumber2 = 0;
int randNumber3 = 0;

// lichtorgel
#define soundpin 8  
int sound;

// twinkle

#define DENSITY 255

    
void setup() {
  
   Serial.begin(9600);   // you can comment this line

// ir  
   irrecv.enableIRIn();  // Start the receiver
   //irrecv.blink13(true); 

// Ledstrip      
   FastLED.addLeds<WS2801,  BGR>(leds, NUM_LEDS);

// licht orgel
   pinMode(soundpin, INPUT);
}

void loop() {
  
 FastLED.setBrightness(Brightness);
// Serial.println(program);
// Serial.println(Brightness);

// check IR
 ir();
 StartProgram();
}

void StartProgram() {
   if (program == 3) {
     uit();
   }
   if (program == 4){
    aan();  
   }
   if (program == 5){
   knipper = 5;
   rood();  
   }
   if (program == 6){
    knipper = 6;
    groen();  
   }
   if (program == 7){
     knipper = 7;
    blauw();  
   }
   if (program == 8){
     knipper = 8;
    wit();  
   }
   if (program == 9){
     knipper = 9;
    magenta();  
   }
   if (program == 10){
    knipper = 10;
   LimeGreen();  
   }
   if (program == 11){
    hblue();  
   }
   if (program == 12){
    flash();  
   }
   if (program == 13){
    knipper = 13;
    DarkOrange();  
   }
   if (program == 14){
    hLimeGreen();  
   }
   if (program == 15){
    uit();  
   }
   if (program == 16){
    lichtorgel();  
   }
   if (program == 17){
    uit();  
   }
   if (program == 18){
    DeepSkyBlue();  
   }
   if (program == 19){
    hMagenta;  
   }
   if (program == 20){
    softtwinkles();  
   }
   if (program == 21){
    looplicht();  
   }
   if (program == 22){
    lichtorgel();  
   }
   if (program == 23){
    hsmooth();  
   }
   if (program == 24){
    smooth();  
 }
 
}

void ir() {
 // static int brn = 200;
 //FastLED.setBrightness(brn);
 if (irrecv.decode(&results)) {
        unsigned int value = results.value;
        switch(value) {
           case code1:
                Brightness = Brightness + 10;
                if (Brightness >= 255) {
                  Brightness = 255;
                }
               // Serial.println(Brightness); 
                FastLED.show();
                break;

           case code2:
               Brightness = Brightness - 10;
               if (Brightness <= 5) {
                Brightness = 5;
                }       
              
              // Serial.println(Brightness); 
               FastLED.show();
               break;
          case code3:
               program = 3;
               break;
          case code4:
               program = 4;
               break;
          case code5:
               program = 5;
               break; 
          case code6:
               program = 6;
               break;
          case code7:
               program = 7;
               break; 
          case code8:
               program = 8;
               break; 
          case code9:
               program = 9;
               break;
          case code10:
               program = 10;
               break;
          case code11:
               program = 11;
               break;    
          case code12:
               program = 12;
               break;
          case code13:
               program = 13;
               break;
          case code14:
               program = 14;
               break;   
          case code15:
               program = 15;
               break;
          case code16:
               program = 16;
               break; 
          case code17:
               program = 17;
               break; 
          case code18:
               program = 18;
               break;         
          case code20:
               program = 20;
               break;
          case code21:
               program = 21;
               break;
          case code22:
               program = 22;
               break;    
          case code23:
               program = 23;
               break;    
          case code24:
               program = 24;
               break;           
        }
        Serial.println  (value); // you can comment this line
        
        irrecv.resume(); // Receive the next value
      }
}

void aan() {
fill_solid( leds, NUM_LEDS, CRGB::White);
FastLED.show();
}

void aan2() {
fill_solid( leds, (20,40), CRGB::NavajoWhite);
fill_rainbow(leds, 20, 0, 12.75);
FastLED.show();
}

void haan2() {
fill_solid( leds, (20,40), CRGB::Black);
fill_rainbow(leds, 20, 0, 12.75);
FastLED.show();
}

void uit() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
FastLED.show();
}

void rood() {
fill_solid( leds, NUM_LEDS, CRGB::Red);
FastLED.show();
}

void groen() {
fill_solid( leds, NUM_LEDS, CRGB::Green);
FastLED.show();
}

void blauw() {
fill_solid( leds, NUM_LEDS, CRGB::Blue);
FastLED.show();
}

void hblue() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
FastLED.show();
fill_solid( leds, (0,20), CRGB::Blue);
FastLED.show();
}

void wit() {
fill_solid( leds, NUM_LEDS, CRGB::White);
FastLED.show();
}

void magenta() {
fill_solid( leds, NUM_LEDS, CRGB::Magenta);
FastLED.show();
}

void LimeGreen() {
fill_solid( leds, NUM_LEDS, CRGB::LimeGreen);
FastLED.show();
}

Ik denk dat het beter is dat je eerst de code neerzet die niet goed werkt. Aan je oude code heb ik niet zoveel.

kwam dit ook nog tegen [

jurs:
Ws2812b LEDs can only be updated while the interrupts are disabled.
IR remote codes can only be updated while the interrupts are enabled.

So what?

The only way to receive IR codes while using WS2812 is to provide pauses between all the strip.show() commands, that are long enough to receive the IR transmission in full length.

If you want to do strip.show(); and strip.show(); and strip.show(); all the time, then the interrupts are blocked all the time and you cannot receive IR code.

If you want to drive LEDs without disabling interrupts during strip.show();, you better use WS2801 LEDs instead, and NOT WS2812 LEDs!

als die moet geloven moet ik toch een andere oplossing dan ir gaan zoeken.

@Nico hier de "foute code"

// ir sectie

#include <IRremote.h>
int RECV_PIN = 3;

   #define code1  255
   #define code2  32895
   #define code3  16575
   #define code4  49215
   #define code5  8415
   #define code6  41055
   #define code7  24735
   #define code8  57375 
   #define code9  4335
   #define code10 36975
   #define code11 20655
   #define code12 53295
   #define code13 12495
   #define code14 45135
   #define code15 28815
   #define code16 61455
   #define code17 2295
   #define code18 34935
   #define code19 18615
   #define code20 51255
   #define code21 10455
   #define code22 43095
   #define code23 26775
   #define code24 59415
   
IRrecv irrecv(RECV_PIN);
   decode_results results;
   
// fastled
 #include "Arduino.h"
 #include <FastLED.h>
 #define DATA_PIN 6
//#define CLOCK_PIN 13
 #define NUM_LEDS 40
 CRGB leds[NUM_LEDS];
 
//control
 
int program = 24;
int Brightness = 200;
int Brightnessorg = 0;
int knipper = 0;
int randNumber1 = 0;
int randNumber2 = 0;
int randNumber3 = 0;

// lichtorgel
#define soundpin 8  
int sound;

// twinkle

#define DENSITY 255

   
void setup() {
 
  Serial.begin(9600);   // you can comment this line

// ir  
  irrecv.enableIRIn();  // Start the receiver
  //irrecv.blink13(true); 

// Ledstrip      
  FastLED.addLeds<WS2812B, DATA_PIN,  GRB>(leds, NUM_LEDS);

// licht orgel
  pinMode(soundpin, INPUT);
}

void loop() {
 
FastLED.setBrightness(Brightness);
// Serial.println(program);
// Serial.println(Brightness);

// check IR
ir();
StartProgram();
}

void StartProgram() {
  if (program == 3) {
    uit();
  }
  if (program == 4){
   aan();  
  }
  if (program == 5){
  knipper = 5;
  rood();  
  }
  if (program == 6){
   knipper = 6;
   groen();  
  }
  if (program == 7){
    knipper = 7;
   blauw();  
  }
  if (program == 8){
    knipper = 8;
   wit();  
  }
  if (program == 9){
    knipper = 9;
   magenta();  
  }
  if (program == 10){
   knipper = 10;
  LimeGreen();  
  }
  if (program == 11){
   hblue();  
  }
  if (program == 12){
   flash();  
  }
  if (program == 13){
   knipper = 13;
   DarkOrange();  
  }
  if (program == 14){
   hLimeGreen();  
  }
  if (program == 15){
   uit();  
  }
  if (program == 16){
   lichtorgel();  
  }
  if (program == 17){
   uit();  
  }
  if (program == 18){
   DeepSkyBlue();  
  }
  if (program == 19){
   hMagenta;  
  }
  if (program == 20){
   softtwinkles();  
  }
  if (program == 21){
   looplicht();  
  }
  if (program == 22){
   lichtorgel();  
  }
  if (program == 23){
   hsmooth();  
  }
  if (program == 24){
   smooth();  
}

}

void ir() {
// static int brn = 200;
//FastLED.setBrightness(brn);
if (irrecv.decode(&results)) {
       unsigned int value = results.value;
       switch(value) {
          case code1:
               Brightness = Brightness + 10;
               if (Brightness >= 255) {
                 Brightness = 255;
               }
              // Serial.println(Brightness); 
               FastLED.show();
               break;

          case code2:
              Brightness = Brightness - 10;
              if (Brightness <= 5) {
               Brightness = 5;
               }       
             
             // Serial.println(Brightness); 
              FastLED.show();
              break;
         case code3:
              program = 3;
              break;
         case code4:
              program = 4;
              break;
         case code5:
              program = 5;
              break; 
         case code6:
              program = 6;
              break;
         case code7:
              program = 7;
              break; 
         case code8:
              program = 8;
              break; 
         case code9:
              program = 9;
              break;
         case code10:
              program = 10;
              break;
         case code11:
              program = 11;
              break;    
         case code12:
              program = 12;
              break;
         case code13:
              program = 13;
              break;
         case code14:
              program = 14;
              break;   
         case code15:
              program = 15;
              break;
         case code16:
              program = 16;
              break; 
         case code17:
              program = 17;
              break; 
         case code18:
              program = 18;
              break;         
         case code20:
              program = 20;
              break;
         case code21:
              program = 21;
              break;
         case code22:
              program = 22;
              break;    
         case code23:
              program = 23;
              break;    
         case code24:
              program = 24;
              break;           
       }
       Serial.println  (value); // you can comment this line
       
       irrecv.resume(); // Receive the next value
     }
}

void aan() {
fill_solid( leds, NUM_LEDS, CRGB::White);
FastLED.show();
}

void aan2() {
fill_solid( leds, (20,40), CRGB::NavajoWhite);
fill_rainbow(leds, 20, 0, 12.75);
FastLED.show();
}

void haan2() {
fill_solid( leds, (20,40), CRGB::Black);
fill_rainbow(leds, 20, 0, 12.75);
FastLED.show();
}

void uit() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
FastLED.show();
}

void rood() {
fill_solid( leds, NUM_LEDS, CRGB::Red);
FastLED.show();
}

void groen() {
fill_solid( leds, NUM_LEDS, CRGB::Green);
FastLED.show();
}

void blauw() {
fill_solid( leds, NUM_LEDS, CRGB::Blue);
FastLED.show();
}

void hblue() {
fill_solid( leds, NUM_LEDS, CRGB::Black);
FastLED.show();
fill_solid( leds, (0,20), CRGB::Blue);
FastLED.show();
}

void wit() {
fill_solid( leds, NUM_LEDS, CRGB::White);
FastLED.show();
}

void magenta() {
fill_solid( leds, NUM_LEDS, CRGB::Magenta);
FastLED.show();
}

void LimeGreen() {
fill_solid( leds, NUM_LEDS, CRGB::LimeGreen);
FastLED.show();
}

Ik al eens een zeer groot project gedaan met 350 WS2812b leds gedaan waarbij allerlei functionaliteiten zaten. FastLED.show moet je alleen maar aanroepen als er was is veranderd.
Komt dat niet voor dan moet je dat zeker niet doen want de interrupts worden inderdaad niet afgevangen op dat moment.
Het updaten van de string wordt (zoals in dat stukje zit) niet onderbroken omdat dan de timing in de strip weg is. De duur kun je uitrekenen met een klein test programma.
In mijn belevenis hij jij wel heel veel keer FastLED.show() staan. Ik deed dat toen op een plek en dan alleen maar als er daad werkelijk iets was veranderd.
Als voorbeeld een stukje uit jouw code:

[pre][code]case code1:
               Brightness = Brightness + 10;
               if (Brightness >= 255) {
                 Brightness = 255;
               }
              // Serial.println(Brightness); 
               FastLED.show();
               break;

Je verhoogt de brightness alleen maar als deze < 255. Je zou ook kunnen zetten:


bool updaten = false;
case code1:
               if (Brightness < 255){
                  Brightness = Brightness + 10;
                  if (Brightness >= 255) {
                    Brightness = 255;
                  }
                  updaten = true;
               }
               break;

Verder in jouw programma kun je dan zetten (op maar een plek):

if (updaten) {
 FastLED.show();
 updaten = false;
}

Ik zie dit liever

updaten = (Brightness < 255);
Brightness = min(255,Brightness + 10);

Waarom?
Omdat het zo duidelijk is dat je enkel update als de huidige/vorige Brightness<255
en omdat je duideljk ziet dat Brightness nooit groter wordt dan 255.
en als ik me niet vergis werkt dit ook als Brightness een byte is (spaart alweer een 3 bytes uit)

Met vriendelijke groet
Jantje

Goeie... Met die 350 LEDS en nog wat andere toeters en bellen was die 2K vrij krap :slight_smile:

voor de 2812B,ik heb veel en alles werkt,ja raar he :smiley:

/* Juggle
By: Originally by Mark Kriegsman
Modified By: Andrew Tuline
Date: February 2015
Juggle just moves some balls back and forth. A single ball could be a Cylon effect. I've added several variables to this simple routine.
*/


#include "FastLED.h"

#if FASTLED_VERSION < 3001000
#error "Requires FastLED 3.1 or later; check github for latest code."
#endif

// Fixed definitions cannot change on the fly.
#define LED_DT 6                                            // Data pin to connect to the strip.
//#define LED_CK 11                                             // Clock pin for the strip.
#define LED_TYPE    WS2812
#define COLOR_ORDER BGR
#define NUM_LEDS   16


// Initialize changeable global variables.
uint8_t max_bright = 64;                                      // Overall brightness definition. It can be changed on the fly.

struct CRGB leds[NUM_LEDS];                                   // Initialize our LED array.

// Routine specific variables
uint8_t numdots = 4;                                          // Number of dots in use.
uint8_t faderate = 2;                                         // How long should the trails be. Very low value = longer trails.
uint8_t hueinc = 16;                                          // Incremental change in hue between each dot.
uint8_t thishue = 0;                                          // Starting hue.
uint8_t curhue = 0;                                           // The current hue
uint8_t thissat = 255;                                        // Saturation of the colour.
uint8_t thisbright = 255;                                     // How bright should the LED/display be.
uint8_t basebeat = 5;                                         // Higher = faster movement.


void setup() {
  delay(1000);                                                // Power-up safety delay or something like that.
  Serial.begin(57600);

LEDS.addLeds<LED_TYPE, LED_DT, COLOR_ORDER>(leds, NUM_LEDS);    // Use this for WS2812B
  //LEDS.addLeds<LED_TYPE, LED_DT, LED_CK, COLOR_ORDER>(leds, NUM_LEDS);  // Use this for WS2801 or APA102

  FastLED.setBrightness(max_bright);
  set_max_power_in_volts_and_milliamps(5, 500);               // FastLED power management set at 5V, 500mA.
} // setup()

  
void loop() {
  ChangeMe();
  juggle();
  show_at_max_brightness_for_power();                         // Power managed display of LED's.
} // loop()


void juggle() {                                               // Several colored dots, weaving in and out of sync with each other
  curhue = thishue;                                          // Reset the hue values.
  fadeToBlackBy(leds, NUM_LEDS, faderate);
  for( int i = 0; i < numdots; i++) {
    leds[beatsin16(basebeat+i+numdots,0,NUM_LEDS)] += CHSV(curhue, thissat, thisbright);   //beat16 is a FastLED 3.1 function
    curhue += hueinc;
  }
} // juggle()


void ChangeMe() {                                             // A time (rather than loop) based demo sequencer. This gives us full control over the length of each sequence.
  uint8_t secondHand = (millis() / 1000) % 30;                // IMPORTANT!!! Change '30' to a different value to change duration of the loop.
  static uint8_t lastSecond = 99;                             // Static variable, means it's only defined once. This is our 'debounce' variable.
  if (lastSecond != secondHand) {                             // Debounce to make sure we're not repeating an assignment.
    lastSecond = secondHand;
    if (secondHand ==  0)  {numdots=1; faderate=2;}  // You can change values here, one at a time , or altogether.
    if (secondHand == 10)  {numdots=4; thishue=128; faderate=8;}
    if (secondHand == 20)  {hueinc=48; thishue=random8();}                               // Only gets called once, and not continuously for the next several seconds. Therefore, no rainbows.
  }
} // ChangeMe()

wel de led strip van externe adapter voorzien ,arduino zelf trekt het niet

Er is nooit iemand geweest dat die zegt dat de ws2812b niet werkt. Het is de combi met interrupts.

:o heb nog hoop te leren :wink: ...

Das mooi.
Anders is er ook maar niets aan.

Stom ideetje misschien,
een 2e nano er naast hangen voor de ir is dat een optie?
dat er 1 de ir doet en de ander de led-stip aan stuurd

dat is niet dom,

maar je kunt die ledstrip ook gewoon even stoppen hoor, en als je dan de IR uitleest en weer verder gaat.
Het probleem is meestal dat de software in de voorbeelden voor een taak zijn bedoeld, en als je nog een taak erbij wilt zul je zelf moeten nadenken, waarbij de gebruikte software vaak overlappen vertoont, en dus herschreven moet worden.

DiSrUpTeR:
Stom ideetje misschien,
een 2e nano er naast hangen voor de ir is dat een optie?
dat er 1 de ir doet en de ander de led-stip aan stuurd

Ik zou eerder gaan om het programma te structureren en alleen die dingen doen wanneer het nodig is.

@nico, mee eens, maar op korte termijn gaat dat het denk ik niet worden.
mede omdat mijn kennis daar niet toerijkend voor is.(nog lange niet).
goeie oefening denk je dan. ja maar de "directie"wordt ongeduldig, die wil dr lamp terug asap.

ik snap jullie goed, maar weet je is niet mijn vak of zo ben al blij als het werkt. en hoe maakt me niet uit.

dus als ik de ir-code er uit vis en op een aparte nano zet.
en de waarde van de functie() program naar de led nano stuur.
zou het moeten werken, toch?.