INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
IR-Remote - Case abbruch durch anderes case
03.01.2019, 16:43 (Dieser Beitrag wurde zuletzt bearbeitet: 03.01.2019 16:50 von Snekels.)
Beitrag #1
IR-Remote - Case abbruch durch anderes case
Moin zusammen,

ich bastele momentan an einer programmierbaren LED-Kette und möchte über eine IR-Bedienung verschiedene Farbmodi aufrufen. Dies ist mir soweit ganz gut gelungen, allerdings funktioniert jeder Modus über ein Switch-case. Möchte ich nun das permanent die Farbe gewechselt wird ist dies zwar einfach möglich indem ich bspw. das case 1.000.000 durchlaufen lasse, allerdings komme ich nun nicht mehr aus dieser Funktion raus ohne den Arduino neuzustarten. Meine Frage ist nun wie ich während dieses einen case im loop läuft eine Abbruchbedingung einführe die ebenfalls ein case ist (bestimmter Button auf der Fernbedienung).

Ich hab btw nur bedingtes Wissen wie die IRremote library funktioniert. Ich habe meine LED Modi einfach in den von Arduino bereitgestellten Code eingefügt.
Meine Idee war bis jetzt diese:
Code:
void mood() {
  while (!case 0xFFE21D:) {
    for (int x = 255, i = 0; x > 0 && i < 255; x--, i++) {
    fadeRG(x,i);
    delayMicroseconds(200);
  }

for (int x = 255, i = 0; x > 0 && i < 255; x--, i++) {
   fadeGB(x,i);
   delayMicroseconds(200);
  }

for (int x = 255, i = 0; x > 0 && i < 255; x--, i++) {
   fadeBR(x,i);
   delay(20);
  }
}
}

Vielen lieben Dank schonmal!



Code:
int maxv = 255;
int minv = 0;
int value = 255;
#include "IRremote.h"
#include <stdlib.h>
#include <FastLED.h>
#define NUM_LEDS 90
#define DATA_PIN 6

int randnumber1;
int randnumber2;
int randnumber3;

int r = 0;
int g = 0;
int b = 0;
CRGB leds[NUM_LEDS];

int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11

/*-----( Declare objects )-----*/
IRrecv irrecv(receiver);     // create instance of 'irrecv'
decode_results results;      // create instance of 'decode_results'

/*-----( Function )-----*/

void translateIR() // takes action based on IR code received

// describing Remote IR codes

{
  
  switch(results.value)

  {
    
  case 0xFFA25D: setblack(); break; //Power-Button
  case 0xFFE21D: Serial.println("FUNK/STOP"); break;
  case 0xFF629D: value = value +40;
                  if (value >= maxv) {
                    value = 255;
                                      }
                                      FastLED.show();
                  break;
  case 0xFF22DD: Serial.println("FAST BACK");    break;
  case 0xFF02FD: Serial.println("PAUSE");    break;
  case 0xFFC23D: Serial.println("FAST FORWARD");   break;
  case 0xFFE01F: Serial.println("DOWN");    break;
  case 0xFFA857: value = value - 40;
                  if (value <= minv) {
                    value = 10;
                    
                  }
                  FastLED.show();
                                break;
  case 0xFF906F: Serial.println("UP");    break;
  case 0xFF9867: Serial.println("EQ");    break;
  case 0xFFB04F: Serial.println("ST/REPT");    break;
  case 0xFF6897: movingleds();    break;
  case 0xFF30CF: for (int i = 0; i < NUM_LEDS; i++) {  
    randnumber1 = random(255);
    randnumber2 = random(255);
    randnumber3 = random(255);
    leds[i] = CRGB(randnumber1,randnumber2,randnumber3);
    FastLED.show();
    delayMicroseconds(50);
  }
  for (int i = NUM_LEDS; i > 0; i--) {  
    randnumber1 = random(255);
    randnumber2 = random(255);
    randnumber3 = random(255);
    leds[i] = CRGB(randnumber1,randnumber2,randnumber3);
    FastLED.show();
    delayMicroseconds(50);
  }
  break;
  case 0xFF18E7: setblue(value);      break;
  case 0xFF7A85: setred(value);       break;
  case 0xFF10EF: setgreen(value);     break;
  case 0xFF38C7: setyellow(value);    break;
  case 0xFF5AA5: setpurple(value);    break;
  case 0xFF42BD: setcyan(value);    break;
  case 0xFF4AB5: setwhite(value);    break;
  case 0xFF52AD:  mood();
     break;
  case 0xFFFFFFFF: Serial.println(" REPEAT");break;  

  default:
    Serial.println(" other button   ");

  }// End Case

  delay(500); // Do not get immediate repeat


} //END translateIR
void setup()  
{
   // put your setup code here, to run once:
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds,NUM_LEDS);
for (int i = 0; i < NUM_LEDS; i++) {
  leds[i] = CRGB( r, g, b);
}
FastLED.show();

  Serial.begin(9600);
  Serial.println("IR Receiver Button Decode");
  irrecv.enableIRIn(); // Start the receiver

}/*--(end setup )---*/


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  if (irrecv.decode(&results)) // have we received an IR signal?

  {
    translateIR();
    irrecv.resume(); // receive the next value
  }  
}/* --(end main loop )-- */
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.01.2019, 17:35 (Dieser Beitrag wurde zuletzt bearbeitet: 03.01.2019 17:36 von Tommy56.)
Beitrag #2
RE: IR-Remote - Case abbruch durch anderes case
Was soll
Code:
while (!case 0xFFE21D:)
bedeuten?
Welche LED verwendest Du? Nicht alle vertragen sich mit IR.
Du darfst nicht blockierend entwickeln (for mit delay, while), weil in dieser Zeit kein IR bearbeitet werden kann.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.01.2019, 17:42
Beitrag #3
RE: IR-Remote - Case abbruch durch anderes case
(03.01.2019 17:35)Tommy56 schrieb:  Was soll while (!case 0xFFE21DSmile bedeuten?
Welche LED verwendest Du? Nicht alle vertragen sich mit IR.
Du darfst nicht blockierend entwickeln (for mit delay, while), weil in dieser Zeit kein IR bearbeitet werden kann.

Gruß Tommy

Jeder Knopf auf der Fernbedienung repräsentiert ein bestimmtes Case, der Knopf mit dem ich den loop beenden will, wird durch das Case 0xFFE21D wiedergegeben, diese Hexazahl steht glaub ich für die empfangene Frequenz. Von mir verwendete LED ist WS2812b, also sehr gängig. Der Empfänger und die Fernbedienung gehören nicht zur LED selbst, diese habe ich aus dem Arduino Sensorkit, welches man auch überall auf Amazon findet.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.01.2019, 17:56
Beitrag #4
RE: IR-Remote - Case abbruch durch anderes case
Du solltest dringend einiges zu if und zu switch/case lesen. Dein case in der Bedingung wird nicht funktionieren.
Die WS2812B ist genau die LED, die sich nicht mit IR verträgt. Sie muss mit einem ziemlich genauen Zeitregime Ihre Daten bekommen. Deshalb schaltet sie, während Daten gesendet werden, alle Interrupts ab. In dieser Zeit können keine IR-Signale empfangen werden. Bei Animationen ist das laufend so.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.01.2019, 19:01
Beitrag #5
RE: IR-Remote - Case abbruch durch anderes case
Verdammt hatte sowas in der Art befürchtet. Aber was solls, dann werde ich das Gehäuse einfach so gestalten das man den Resetknopf einfach drücken kann. Vielen dank trotzdem!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.01.2019, 19:08
Beitrag #6
RE: IR-Remote - Case abbruch durch anderes case
Reset bedienbar machen, weil Du nichts lernen willst?
Meinst Du, das ist der Weg, der Dich weiter bringt?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Sad Neuling verzweifelt braucht Hilfe delay durch timer ersetzen Lois 1 784 06.02.2019 16:15
Letzter Beitrag: Tommy56
  switch case huber5093 8 2.557 08.10.2017 15:44
Letzter Beitrag: hotsystems
  LED-Bilnker: Wechsel durch Interrupt djculture2001 10 2.277 04.10.2017 19:23
Letzter Beitrag: djculture2001
  Motor Steuerung durch Sensoren Werte Zerebrator 14 2.987 12.06.2017 14:36
Letzter Beitrag: Franz54
  switch case funktion ausser halb loop ??? huber5093 13 3.653 12.04.2017 15:26
Letzter Beitrag: Tommy56
  IR Remote LED Blink TEAMHORIZON 2 992 14.01.2017 18:36
Letzter Beitrag: TEAMHORIZON
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 1.447 14.10.2016 21:40
Letzter Beitrag: hotsystems
  Unterschiedliche Programme durch Switch/ Case SpeedShifter 26 4.678 04.10.2016 15:29
Letzter Beitrag: SpeedShifter
  Switch/Case mit chars phischmi 8 3.177 24.07.2016 21:00
Letzter Beitrag: phischmi
  Altes Digitales Display mit Text/Bits durch Genuino Micro versorgen - SPI-Bibliothek? RollingStone 0 1.045 25.06.2016 17:46
Letzter Beitrag: RollingStone

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste