Go Down

Topic: Steuerung LED Lauflicht mit IR FB  (Read 132 times) previous topic - next topic

Thorsten4171

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



Code: [Select]

#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);
  }
}

Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Thorsten4171

Sind es.
Welche sind in dem Fall den besser

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Thorsten4171


agmue

#5
Feb 12, 2018, 05:12 pm Last Edit: Feb 12, 2018, 09:11 pm by agmue
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 :)

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

Thorsten4171

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

uwefed

Quote
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

Thorsten4171


Go Up