Steuerung LED Lauflicht mit IR FB

Hallo alle zusammen

Ich bin Anfänger im Bereich Arduino. Habe mich an ein kleines projekt mit LED Neopixelstreifen gewagt.
Bin mit dem Ergebniss ganz zufrieden . Led lauflicht funktioniert.Die Geschwindigkeit des Lauflichts läßt sich auch mit IR-FB erhöhen und wieder senke. Leider kann ich die Grund geschwindigkeit des Lauflichts nicht weiter erhöhen dar die Abfrage der IR-FB schlechter wird bis ganz versagt.
Meine Frage ist mein Code so schlecht oder ist es Hardware bedingt.
Würde mich über Antworten freuen

#include <IRremote.h>
#include <Adafruit_NeoPixel.h>
#define LEDStreifen 9 
#define Anzahl 9 
int IR_PIN = 10;
int p=0;
int pause=0; 
int wc = 0;
int i=0;
int a=9;
int b=0;
int gn=0;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(Anzahl, LEDStreifen, NEO_GRB + NEO_KHZ800);
IRrecv irrecv(IR_PIN);
decode_results IRDaten;

void setup() 
{
  Serial.begin(9600);
  irrecv.enableIRIn();
  pixels.begin(); 
}

void loop() 

{
  
 { 
  delay (70);   
  if (irrecv.decode(&IRDaten))  {
     Serial.println(IRDaten.value, DEC);{
  if (IRDaten.value == 16724175){
  p=p+150;};
  
  if (IRDaten.value == 16718055){    
  p=p-150;};

  if (IRDaten.value == 16743045){    
  gn=120;};
  
 if (IRDaten.value ==16738455 ){
 for (int b=0; b<9; b++){
 pixels.setPixelColor(b,0,0,0);
 pixels.show();    
 gn=0;}};
 irrecv.resume(); 
 }
 } 
 }

if (gn==120){ 
for (int b=0; b<9; b++){
pixels.setPixelColor(b,0,gn,0);
gn=121;}; 
pixels.show();
}

if (i<=8){
 pixels.setPixelColor(i, Wheel(wc));
 pixels.setPixelColor(i-1, pixels.Color(0,gn,0));
 i=(i+1);}

if (i==9){
 a=a-1; 
 pixels.setPixelColor(a, Wheel(wc));
 pixels.setPixelColor(a+1, pixels.Color(0,gn,0));}
 


if (a==0){
 i=0;
 a=9;}

 pixels.show();
 
if (p<0){ 
p=0;}

delay (p);

wc++;
  if (wc>255){
    wc=0;}
  
}


uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
    return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
    WheelPos -= 170;
    return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

Wenn das WS2812(B) sind, dann vertragen sich diese nicht mit IR, weil sie die Interrupts abschalten, während sie übertragen.

Gruß Tommy

Sind es.
Welche sind in dem Fall den besser

z.B. APA 102, die haben getrennte Daten- und Taktleitungen und sind damit im Zeitverhalten flexibler.
Die WS2812(b) haben ein sehr eng begrenztes Frequenzfenster für die Datenübertragung und deswegen werden dabei alle Interrupts abgeklemmt, so dass IR nichts mehr empfangen kann.

Gruß Tommy

wede mich mal damit befassen
Danke

Wenn Du das, was Du machen möchtest, mit APA102 oder baugleichen machen kannst, dann nimm bitte die.

Sollte es nicht gehen, gibt es die Multiprozessor-Möglichkeit: Ein Arduino (ATtiny85, ProMini, Nano, nackter ATmega) wertet IR aus, einer bespaßt die WS2812-LEDs, beide kommunizieren per I2C-Bus. Bei Bedarf gibt es mehr Infos :slight_smile:

PS.: Im Thema 2x Nano + IR + WS2812 not all LEDs work wurde das gerade beschrieben.

Danke für den Tip mit I2C-Bus.Habe mich reingelesen und erste Erolge verbuchen.Lauflicht läßt sich sehr gut in der Geschwindigkeit regeln.Mir ist bloß nicht klar warum wenn die WS2812b die interupts abschalten dürfte doch auch I2C nicht gehen. Wie gesagt bin Anfänger.Ich würde mich über eine kurze Erklärung freuen, ich habe immer einen bitteren Beigeschmack wenn ich etwas zum laufen bringe und nicht weiss warum

Mir ist bloß nicht klar warum wenn die WS2812b die interupts abschalten dürfte doch auch I2C nicht gehen.

Der I2C Bus ist hardwareimplementiert, das heißt ein Teil des Kontrollers macht nur das und kann durch andere Aktivitäten nicht gestört werden. Darum funktioniert der unabhängig vom Rest des Controllers.

Grüße Uwe

Danke für die Erklärung