IR Remote in While-Schleife

moin moin,
Habe folgendes Problem. Ich Experimentiere mit Ws2811 LEd Steifen was ganz gut Klappt.
Habe effekte ,die in einer While - Schleife Laufen, die ich über Ir Funkbedienung Steuern möchte.
zb.:

if (results.value == 16724175) //RGBverlaufquer()
{
 int redVal = 255;
int blueVal = 0;
int greenVal = 0; 
aj =20;
while(1){ 
if(irrecv.decode(&results)) {
   Serial.println(results.value, DEC); 
pulsDauer = pulseIn(eingangsPin, HIGH, 30000);
int z;
if (pulsDauer > 10){ if(aj==20) {z=1;}if(aj==246) {z=-2;}aj = aj+z;}
 LEDS.setBrightness(aj);
if(blueVal == 0 & redVal>0) { 
 if (millis() - previousMillis >interval){ 
 greenVal += 1; 
 redVal -= 1;
  LEDS.showColor(CRGB( redVal, greenVal,blueVal ));
  previousMillis = millis();}  
 }  
if(redVal==0 & greenVal>0) {
  if (millis() - previousMillis >interval){
 blueVal += 1; 
 greenVal -= 1; 
  LEDS.showColor(CRGB( redVal, greenVal,blueVal ));
  previousMillis = millis();}  
    }    
if(greenVal==0 & blueVal>0) {
  if (millis() - previousMillis >interval){
 redVal += 1; 
 blueVal -= 1; 
  LEDS.showColor(CRGB( redVal, greenVal,blueVal ));
   previousMillis = millis();}
}
irrecv.resume();}}

Das ist ein Farbwechesel von Rot nach Grün dann nach Blau und zurück.
das prob ist das im code "" if(irrecv.decode(&results))"" die while-Schleife Stopt.

Was kann ich tun ??

Jede Hilfe ist willkommen
Gruß Paul

hi,

ich hatte auch so meine probleme mit WS2811 und fernbedienung und wollte dann schon einen zweiten atmel nur für die fernsteuerung nehmen, der dann von dem, der die streifen steuert, abgefragt wird, ob was reingekommen ist. das projekt pausiert aber sowieso grad...

malerlein (jürgen) hat vor kurzem hier ganz nebenbei geschrieben, daß seine 2811er und die ir-fernbedienung problemlos miteinander funktionieren und ich wollte ihn ohnehin nach den code fragen. das ist jetzt eine gute gelegenheit.

vielleicht tauscht er den sketch gegen einen anemonenfisch.

gruß stefan

du auch ? Ich fummel mir jetzt schon paar tage die Nerven krumm. Wolen wir mal hiffen das einer ne Erleuchtung hat.

:smiley:

ich hab' ihn mal angestupst.

das timing bei den 2811 ist definitiv so, daß da beim raussenden zu einem kompletten streifen nichts anderes passieren darf.
mit einem interrupt, hat's mir den 2811er-teil gestört, ohne kam meist nur ein teil des ir-befehls an.

jürgen meldet sich sicher bald, sofern er nicht grade fische anmalt...

gruß stefan

Hallo zusammen ich lese gerade hier mit und möchte euch meinen Code einstellen wo ich die WS2611 mit der IR Fernbedienung betreibe. nur der gesamte Code ist zu groß , deshalb habe ich Ihn angehangen, ich hoffe Ihr könnt etwas mit anfangen. Aber es finktioniert alles so wie gepostet. Nur ich habe meine Probleme bei der Fernbediehnung, wenn ich unser TV umschalte ändert sich oft auch die Farbe in meinem Riffaquarium , ich muss mir eine andere Fernbedienung zu legen wo ich die Codes ändern kann.

PS. Meine Fische sind soweit fertig und schön Bunt :slight_smile:

Code IR.txt (11.5 KB)

Wir schreiben etwas aneinander vorbei. Bei einzelnen Farben habe ich das so gelöst.

void ROT(){
for(int i=0; i<NUM_LEDS; i+=1) {
  leds[i] = CRGB( 255, 0, 0);
  FastLED.show();
  delay(1);
if (results.value == 16724175) //RGBverlaufquer()
{
 int redVal = 255;
int blueVal = 0;
int greenVal = 0; 
aj =20;
while(1){
//if(irrecv.decode(&results)) {
   Serial.println(results.value, DEC);
   
pulsDauer = pulseIn(eingangsPin, HIGH, 30000);
int z;
if (pulsDauer > 10){ if(aj==20) {z=1;}if(aj==246) {z=-2;}aj = aj+z;}
 LEDS.setBrightness(aj);
if(blueVal == 0 & redVal>0) { 
 if (millis() - previousMillis >interval){ 
 greenVal += 1; 
 redVal -= 1;
  LEDS.showColor(CRGB( redVal, greenVal,blueVal ));
  previousMillis = millis();}  
 }  
if(redVal==0 & greenVal>0) {
  if (millis() - previousMillis >interval){
 blueVal += 1; 
 greenVal -= 1; 
  LEDS.showColor(CRGB( redVal, greenVal,blueVal ));
  previousMillis = millis();}  
    }    
if(greenVal==0 & blueVal>0) {
  if (millis() - previousMillis >interval){
 redVal += 1; 
 blueVal -= 1; 
  LEDS.showColor(CRGB( redVal, greenVal,blueVal ));
   previousMillis = millis();}
}
irrecv.resume();}}


if (results.value == 16750695) //Taste ROT
{ Serial.println("drin");
ROT();
 while(1){  
   if (irrecv.decode(&results)) {
   LEDS.setBrightness(aj);
  int z=5;
   if ((results.value) == 16748655 ) // Taste Heller
   { for( aj<255; aj+=z; )
 {if(aj>245) z=0;
   pulsDauer = pulseIn(eingangsPin, HIGH);
   if (pulsDauer < 100)break;
   delay (50);
 LEDS.setBrightness(aj);
 ROT();}}
   if ((results.value) == 16758855) {for( aj>20; aj-=z;)
 {if(aj<30) z=0;
   pulsDauer = pulseIn(eingangsPin, HIGH);
   if (pulsDauer < 100)break;
   delay (50);
 LEDS.setBrightness(aj);
 ROT();}}
 int ausstieg = 0;
 if (results.value == 16748655|results.value == 16758855|results.value == 4294967295|results.value == 4294967295|results.value == 16750695) {ausstieg = 1;}
if (results.value > 0 && ausstieg == 0) {break; }     
 irrecv.resume();

/// Das Hier ist im Loop ///

if (results.value == 16750695) //Taste ROT auf FB
{
ROT();
 while(1){  
   if (irrecv.decode(&results)) {
   LEDS.setBrightness(aj);
  int z=5;
   if ((results.value) == 16748655 ) // Taste Heller
{ for( aj<255; aj+=z; )
 {if(aj>245) z=0;
   pulsDauer = pulseIn(eingangsPin, HIGH);
   if (pulsDauer < 100)break;
   delay (50);
 LEDS.setBrightness(aj);
 ROT();}}
   if ((results.value) == 16758855)  //Taste dunkler
{for( aj>20; aj-=z;)
 {if(aj<30) z=0;
   pulsDauer = pulseIn(eingangsPin, HIGH);
   if (pulsDauer < 100)break;
   delay (50);
 LEDS.setBrightness(aj);
 ROT();}}
//// Bereich für Farbwechel /////
 int ausstieg = 0;
 if (results.value == 16748655|results.value == 16758855|results.value == 4294967295|results.value == 4294967295|results.value == 16750695) {ausstieg = 1;}
if (results.value > 0 && ausstieg == 0) {break; }     
 irrecv.resume();
 }}

Kappt so richtig gut,

Nur läuft der Farbwechsel ( siehe oben ) in einer while schleife. Dann komme ich nicht drann um um einen wechsel zu einer anderen Farbe bz. zu einem anderen effekt zu wechseln. Weil wenn ich in der while schleife des Effekts “”
if (irrecv.decode(&results)) “” einfüge die while schleife ja dort stopt.
was ich suche ist ne möhlichkeit ein IR signal einzulesen ohne das die whlile schleife hier
“” if (irrecv.decode(&results)) “” hängen bleibt

Hast Du den einmal versucht die Funktionen ausserhalb mit Void farbwechsel() u verlegen und in der tasten abfrage bei der Fernbediehnung farbwechsel() auf u rufen und u wechseln, so wie es in meinem Code bei dem Larson scanner ist. Ich weis niht ob das funzt, weil ich mache mit While garnichts