Funktion aus case aufrufen

Hallo
wenn ich Funktion aus" case Taste8:" aufrufe funktioniert nicht wenn " case Taste8:" herausgenommen und direkt aus Loop Starte dann funktioniert was hab ich da falsch gemacht.

Danke im voraus für eure Bemühungen
Herbert

     case Taste8:
       if (itsONled[3] == 1) {
         digitalWrite(FEU, LOW);
         itsONled[3] = 0;
       } else {
         FeuerFlackern(FEU, 1000);
         itsONled[3] = 1;
       }

       break;
   }  //#### switch (value) ENDE #####

   Serial.println(value); // you can comment this line
   irrecv.resume(); // Receive the next value
 }  //### if Ende ########

 //### wenn aus case Taste8: herausgenommen dann funktionierts ########
 if (itsONled[3] == 1) {
   digitalWrite(FEU, LOW);
   itsONled[3] = 0;
 } else {
   FeuerFlackern(FEU, 1000);
   itsONled[3] = 1;
 }

}
//##### void loop Ende ##################
#include <IRremote.h>

int RECV_PIN = 13;
int EG = 11;          // LED 1
int EG1 = 10;         // LED 2
int FEU = 9;          // LED 3
int DG = 6;           // LED 4
int DG1 = 7;          // LED 5
int ST = 5;           // LED 6
int Frei1 = 4;        // LED 7
int ST1 = 3;          // LED 8
int itsONled[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
int ledPins[] = {11, 10, 9, 6, 7, 5, 4, 3};  //array with all the LED's pins
int i = 0; //LED index for the arrays

//IR Fernbedienugsmanegment-----------------------------------------
#define Taste0  16738455 // code received from button 0
#define Taste1  16724175 // code received from button 1
#define Taste2  16718055 // code received from button 2
#define Taste3  16743045 // code received from button 3
#define Taste4  16716015 // code received from button 4
#define Taste5  16726215 // code received from button 5
#define Taste6  16734885 // code received from button 6
#define Taste7  16728765 // code received from button 7
#define Taste8  16730805 // code received from button 8
#define Taste9  16732845 // code received from button 9
#define Schlange  16750695 // code received from button Schlange
#define TastePlus  16748655 // code received from button Plus
#define TasteMinus  16754775 // code received from button Minus

IRrecv irrecv(RECV_PIN);
decode_results results;
//Zeitmanegment-----------------------------------------
int ze = 500; //=delay / Zeit bei alle Einschalten 2500
int za = 1000; //=delay / Zeit bei alle Ausschalten
//Timen-----------------------------------------
int fadeValue;
int lastCounter = 1;
int counter;

void setup()
{
 Serial.begin(9600);   // you can comment this line
 irrecv.enableIRIn();  // Start the receiver
 randomSeed(0);
 pinMode(EG, OUTPUT);
 pinMode(EG1, OUTPUT);
 pinMode(DG, OUTPUT);
 pinMode(DG1, OUTPUT);
 pinMode(ST, OUTPUT);
 pinMode(ST1, OUTPUT);
 pinMode(FEU, OUTPUT);

}
//------------------------------------------------------
void loop() {

 //###########Schaltet Taste 1-9 EIN oder AUS###########################
 if (irrecv.decode(&results)) {
   unsigned int value = results.value;

   switch (value) {
     case Taste1:
       if (itsONled[1] == 1) {
         digitalWrite(EG, LOW);
         itsONled[1] = 0;
       } else {
         digitalWrite(EG, HIGH);
         itsONled[1] = 1;
       }
       break;
     case Taste2:
       if (itsONled[2] == 1) {
         digitalWrite(EG1, LOW);
         itsONled[2] = 0;
       } else {
         digitalWrite(EG1, HIGH);
         itsONled[2] = 1;
       }
       break;
     case Taste3:
       if (itsONled[3] == 1) {
         digitalWrite(DG, LOW);
         itsONled[3] = 0;
       } else {
         digitalWrite(DG, HIGH);
         itsONled[3] = 1;
       }
       break;
     case Taste4:
       if (itsONled[4] == 1) {
         digitalWrite(DG1, LOW);
         itsONled[4] = 0;
       } else {
         digitalWrite(DG1, HIGH);
         itsONled[4] = 1;
       }
       break;
     case Taste5:
       if (itsONled[5] == 1) {
         digitalWrite(ST, LOW);
         itsONled[5] = 0;
       } else {
         digitalWrite(ST, HIGH);
         itsONled[5] = 1;
       }
       break;
     case Taste6:
       if (itsONled[6] == 1) {
         digitalWrite(ST1, LOW);
         itsONled[6] = 0;
       } else {
         digitalWrite(ST1, HIGH);
         itsONled[6] = 1;
       }
       break;
     case Taste0:
       if (itsONled[1, 2, 3, 4, 5, 6, 7, 8] == 1) {
         digitalWrite(EG, LOW);
         delay(za);
         digitalWrite(EG1, LOW);
         delay(za);
         digitalWrite(DG, LOW);
         delay(za);
         digitalWrite(DG1, LOW);
         delay(za);
         digitalWrite(ST, LOW);
         delay(za);
         digitalWrite(ST1, LOW);
         delay(za);
         digitalWrite(FEU, LOW);
         itsONled[1, 2, 3, 4, 5, 6, 7, 8] = 0;

       } else {
         digitalWrite(EG, HIGH);
         delay(ze);
         digitalWrite(EG1, HIGH);
         delay(ze);
         digitalWrite(DG, HIGH);
         delay(ze);
         digitalWrite(DG1, HIGH);
         delay(ze);
         digitalWrite(ST, HIGH);
         delay(ze);
         digitalWrite(ST1, HIGH);
         delay(ze);
         digitalWrite(FEU, HIGH);
         itsONled[1, 2, 3, 4, 5, 6, 7, 8] = 1;
       }
       break;
     case Taste9:
       if (itsONled[3] == 1) {
         digitalWrite(FEU, LOW);
         itsONled[3] = 0;
       } else {
         digitalWrite(FEU, HIGH);
         itsONled[3] = 1;
       }
       break;
     case TastePlus:
       Timen();
       break;
     case TasteMinus:
       Timen();
       break;

     case Taste8:
       if (itsONled[3] == 1) {
         digitalWrite(FEU, LOW);
         itsONled[3] = 0;
       } else {
         FeuerFlackern(FEU, 1000);
         itsONled[3] = 1;
       }

       break;
   }  //#### switch (value) ENDE #####

   Serial.println(value); // you can comment this line
   irrecv.resume(); // Receive the next value
 }  //### if Ende ########

 //### wenn aus case Taste8: herausgenommen dann funktionierts ########
 if (itsONled[3] == 1) {
   digitalWrite(FEU, LOW);
   itsONled[3] = 0;
 } else {
   FeuerFlackern(FEU, 1000);
   itsONled[3] = 1;
 }

}
//##### void loop Ende ##################


void FeuerFlackern(int thePin, int dauer) {

 int val = 0;                     // variable LED Helligkeit
 int delayval = 0;                // variable LED Wartezeit
 val = random(100, 255);      // Zufallszahl zwischen 100 und 255. 0 = LED aus, 255 = LED maximale Helligkeit.
 analogWrite(thePin, val);   // Setzt das PWM Signal auf die Zufallszahl
 val = random(100, 255);
 analogWrite(thePin, val);
 val = random(50, 255);      // Zufallszahl zwischen 50 und 255. 0 = LED aus, 255 = LED maximale Helligkeit.
 analogWrite(thePin, val);
 val = random(50, 255);
 analogWrite(thePin, val);

 delayval = random(100, 400);  // Zufallszahl zwischen 100 und 400. 50 = schnell, 600 = langsam.
 delay(delayval);             // Setze die Wartezeit auf die Zufallszahl

}

//##### Timen ##################
void Timen() {
 counter = lastCounter;

 if (irrecv.decode(&results))
 {
   if (results.value == 16748655) {
     counter ++;
   }
   if (results.value == 16754775) {
     counter --;
   }
   irrecv.resume();
 }
 if (counter > 8) counter = 8;      //maximum for counter = 5
 if (counter < 2) counter = 1;    //minimum for counter = 1

 switch (counter) {   //depending on the counter the fadevalue is sent to the led
   case 1:
     fadeValue = 00;
     break;

   case 2:
     fadeValue = 4;
     break;

   case 3:
     fadeValue = 8;
     break;

   case 4:
     fadeValue = 16;
     break;

   case 5:
     fadeValue = 32;
     break;

   case 6:
     fadeValue = 64;
     break;

   case 7:
     fadeValue = 128;
     break;

   case 8:
     fadeValue = 255;
     break;

 }
 analogWrite(EG1, fadeValue);
 analogWrite(DG, fadeValue);
 analogWrite(DG1, fadeValue);
 analogWrite(ST, fadeValue);
 analogWrite(FEU, fadeValue);

 lastCounter = counter;          //reset counter
}

Setze deinen Sketch bitte in Code-Tags, so kann man das nicht lesen.
Du kannst das nachträglich mit der </> = Taste machen. Oder du setzt vor den Sketch [code] und hinter den [/code], aber ohne den * Stern.

Dann können wir das auch besser lesen und helfen.

Dann hat die Variable die du in der switch Anweisung abfragst, nicht den Wert Taste8

//### wenn aus case Taste8: herausgenommen dann funktionierts ########

Und braucht auch keine Batterien in deiner Fernbedienung. Super.

Was kommt denn als Ergebnis der Zeile

   Serial.println(value); // you can comment this line

raus? Das ist das einzig interessante im Augenblick. ( Nichts gegen Feuerflackern, aber das wird im Moment auch in Code - Tags nicht relevanter... :wink: )

unsigned int value = results.value;

Wie kannst Du eine 3 Byte Zahl in eine 2 Byte Variable abspeichern?
Nimm eine Variable vom Typ unsigned long.

Grüße Uwe

HotSystems:
Setze deinen Sketch bitte in Code-Tags, so kann man das nicht lesen.
Du kannst das nachträglich mit der </> = Taste machen. Oder du setzt vor den Sketch [code] und hinter den [/code], aber ohne den * Stern.

Dann können wir das auch besser lesen und helfen.

Ist es jetzt richtig so
Sorry Wuste das nicht bin neuling

Kapitano:
Ist es jetzt richtig so
Sorry Wuste das nicht bin neuling

Ja, das ist so richtig und Uwe hat den Fehler gefunden. (wenn es der einzige ist) :wink:

i glaub jetzt nehme ich an strick
weil jetzt glaub ichs selber das ich z bled für des ganze bin

michael_x:
Dann hat die Variable die du in der switch Anweisung abfragst, nicht den Wert Taste8
Und braucht auch keine Batterien in deiner Fernbedienung. Super.

Was kommt denn als Ergebnis der Zeile

   Serial.println(value); // you can comment this line

raus? Das ist das einzig interessante im Augenblick. ( Nichts gegen Feuerflackern, aber das wird im Moment auch in Code - Tags nicht relevanter... :wink: )

wenn ich den serialmonitor offen hatte kamen zb. 16724175 für die taste 1
das ein und ausschalten der LED hatte ich ja hingebracht

Der Fehler den Uwe gefunden hat (eine Variable als int definieren und nicht merken, dass ein Wert wie 16730805 kein int sein kann)
ist kein Grund, sich einen Strick zu suchen.

Hat allerdings nicht jeder Spass daran, sich in solchen Fummelkram reinzuknien.

Wenn du das mit dem Hinweis zum vorigen Sketch ( 2016-03-08, 22:22:01 ) vergleichst:

if (irrecv.decode(&results)) {
    Serial.println(results.value, DEC);
    if (results.value == 16738455) {

// hier springst du in die entsprechende Funktion
    }
    if (results.value == 16724175) { 
    }

hat sich das Problem damals dezent verkniffen

uwefed:

unsigned int value = results.value;

Wie kannst Du eine 3 Byte Zahl in eine 2 Byte Variable abspeichern?
Nimm eine Variable vom Typ unsigned long.

Grüße Uwe

hab ich jetzt geändert LED lässt sich nur ein und ausschalten kein flackern

mfg.
Herbert

michael_x:
Der Fehler den Uwe gefunden hat (eine Variable als int definieren und nicht merken, dass ein Wert wie 16730805 kein int sein kann)
ist kein Grund, sich einen Strick zu suchen.

Hat allerdings nicht jeder Spass daran, sich in solchen Fummelkram reinzuknien.

Wenn du das mit dem Hinweis zum vorigen Sketch ( 2016-03-08, 22:22:01 ) vergleichst:

if (irrecv.decode(&results)) {

Serial.println(results.value, DEC);
    if (results.value == 16738455) {

// hier springst du in die entsprechende Funktion
    }
    if (results.value == 16724175) {
    }




hat sich das Problem damals dezent verkniffen

jetzt hab ich das auf " Serial.println(results.value, DEC); geändert und jetzt geht nix mehr

Prog-Krippe_V2-1-1Forum.ino: In function 'void loop()':
Prog-Krippe_V2-1-1Forum.ino:59:39: error: no matching function for call to 'IRrecv::decode(long unsigned int*, int)'
Prog-Krippe_V2-1-1Forum.ino:59:39: note: candidate is:
In file included from Prog-Krippe_V2-1-1Forum.ino:1:0:
C:\Program Files (x86)\Arduino\libraries\IRremote/IRremote.h:89:7: note: int IRrecv::decode(decode_results*)
int decode(decode_results *results);
^
C:\Program Files (x86)\Arduino\libraries\IRremote/IRremote.h:89:7: note: candidate expects 1 argument, 2 provided
Fehler beim Kompilieren.

mfg
Herbert

Sicher dass du nicht irrecv.decode(&results, DEC) gemacht hast?

if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
unsigned long value = results.value;

switch (value) {
case Taste1:

ich versteh nix mehr nur Arduino geschlossen Sketch neu geöffnet ohne fehler kompiliert
Led lässt sich ein u. ausschalten aber ohne flackern

mfg Herbert

Kannst du feststellen, ob du überhaupt in den "Flacker" - Zweig kommst?

  • Ja, aber es flackert nicht
  • Nein, kommt da nicht hin
  • Keine Ahnung

Was meinst du, wofür die Anweisung   Serial.println(results.value);  gut ist ?

Hast du inzwischen eine Idee, was das case Taste8: bedutet?
Wenn nicht, dann nimm den vorigen Sketch mit

    if (results.value == 16738455) {

....

und erweitere den entsprechend. (Vorausgesetzt, du hast den zum Laufen gebracht und verstanden)