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();
}
}
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
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.
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();
}
}