Probleme avec un switch case

Bonjour à tous, j'ai un petit soucis avec mon code utilisant la librairie rcswitch.

Ce code fonctionne parfaitement, et ma led s'allume quand il faut :

#include <RCSwitch.h>
#define couloir 14643400
#define porte 11591236

int led = 6;
RCSwitch mySwitch = RCSwitch();

void setup() {
    Serial.begin(9600);
    mySwitch.enableReceive(0);
 pinMode (led, OUTPUT);
}

void loop() {
  if (mySwitch.available()) {

    int value = mySwitch.getReceivedValue();

    while (!Serial) ;
    

    switch (value) {
        case porte:
            Serial.println("ouverture!");
            digitalWrite (led, LOW);
            break;

        case couloir:
            Serial.println("fermeturer !");
            digitalWrite (led, HIGH);
            break;

        default:
            Serial.print("Dispositif inconnu: ");
            Serial.println(value);
            break;
    }

    mySwitch.resetAvailable();
  }
}

par contre, j'aimerai me passer du switch case pour plutot utiliser un if afin de comparer plusieurs varaibles (booleen, si fin course contacté , etc)
Mais ce code ne fonctionne pas
Si quelqu'un pouvait me mettre sur la voie

#include <RCSwitch.h>
#define couloir 14643400
#define porte 11591236

int led = 6;
RCSwitch mySwitch = RCSwitch();

void setup() {
    Serial.begin(9600);
    mySwitch.enableReceive(0);
 pinMode (led, OUTPUT);
}

void loop() {
  if (mySwitch.available()) {

    int value = mySwitch.getReceivedValue();


    

    if( value == couloir){
            Serial.println("Quelqu'un a ouvert la porte!");
            digitalWrite (led, HIGH);
    }
      else if (value != couloir){
            Serial.println("Quelqu'un marche dans le couloir !");
            digitalWrite (led, LOW);
      }

    
    

    mySwitch.resetAvailable();
  }
}

Bonjour,

Les affichages ne sont pas en rapport avec les tests
Ne serait ce pas plutôt:

   if( value == couloir){
           Serial.println("Quelqu'un marche dans le couloir !");
           digitalWrite (led, HIGH);
   }
   else if (value != couloir){
           Serial.println("Quelqu'un a ouvert la porte!");
           digitalWrite (led, LOW);
   }

Remarques:

  • le if après le else ne sert à rien car la condition est tjs vraie
  • c'est bien plus clair avec le switch

Quelque chose me tracasse.
Tu définis ça:

#define couloir 14643400

et ensuite tu as ça

int value = mySwitch.getReceivedValue();

   .....

if( value == couloir)

Première chose le define contient un long donc il devrait être suffixé par un L

#define couloir 14643400L

ensuite la valeur que tu reçois est stockée dans un entier que tu compares avec un long.
Il y a manifestement une incohérence dans le type des valeurs que tu manipules.

Oui, mais dans le premier code il n'y a pas de L non plus ?

@kamill, on s'en fout des test du serial, c'est uniquement la led qui me sert de test

Fredericzim:
Oui, mais dans le premier code il n'y a pas de L non plus ?

Alors la constante est tronquée à 16 bits

Bon finalement j'ai réussi en modifiant mon
Int value en long value

hello
dans ton code qui ne marche pas:
_si la 1ere condition est vraie, tu allumes ta led
mais comme ta donnée est tronquée, tu n'entres pas dans le if et tu n'allumes pas ta led
_ensuite ton 2ème if dit que si ce n'est pas la 1ere donnée ("couloir " alors c'est "porte")
ceci sans comparer la donnée avec "porte".
donc tu entres dans le if et tu éteinds une led que tu n'as jamais allumée.
_et finalement tu n'as pas testé si la donnée est valide

testes ce code

#include <RCSwitch.h>
#define couloir 14643400
#define porte 11591236
int led = 6;
RCSwitch mySwitch = RCSwitch();
void setup() 
{
  Serial.begin(9600);
  mySwitch.enableReceive(0);
  pinMode (led, OUTPUT);
}
void loop() {
  if (mySwitch.available()) 
  {
    int value = mySwitch.getReceivedValue();
    if ( value == porte)
    {
      Serial.println("Quelqu'un a ouvert la porte!");
      digitalWrite (led, HIGH);
    }
    if (value == couloir)
    {
      Serial.println("Quelqu'un marche dans le couloir !");
      digitalWrite (led, LOW);
    }
    if ((value != porte) & (value != couloir)
  {
    Serial.println("code inconnu car donnée tronquee !");
      while (1)
      {
        digitalWrite (led, HIGH);
        delay(200);
        digitalWrite (led, LOW);
        delay(200);
      }
    }
    mySwitch.resetAvailable();
  }
}