Erreur de condition

Bonsoir à tous !

Alors voilà, j’ai une pièce sans fenêtre et sans lampe plafonniere (l’idéal quoi), l’éclairage se fait grâce à une prise 230v où est relié un néon.
Le néon n’ayant pas d’interrupteur, je suis constamment obligé de brancher et débrancher la prise.

Ma solution réside dans l’utilisation d’une prise télécommandée 433Mhz qui vient du brico, avec la télécommande devant la porte.

Je veux aller encore plus loin grâce à un arduino : J’ai acheté un détecteur de porte magnétique et un émetteur 433,
le but est d’allumer la prise 433 tant que la porte est ouverte et l’éteindre quand la porte est fermée.

J’ai testé l’émetteur 433, marche nickel, pareil pour le détecteur de porte qui envoie plus ou moins du 3.3v (~670) au duino quand la porte est ouverte et plus ou moins du 5v (1023) quand la porte est fermée.

J’ai terminé le script, le problème est que peu importe l’état de la porte, le duino envoie toutes les secondes plusieurs commandes d’allumage et d’extinction à la prise. J’ai alors bidouillé un débug en Serial, et manifestement l’erreur vient des conditions If, qui s’exécutent en permanence même si la condition n’est pas respectée…

Voici le code ainsi que le retour du debug : http://www.cjoint.com/data/FLswUSeVxec_ScreenShot-435.jpg

Et le code :

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

int state = 0;

void setup()
{
  mySwitch.enableTransmit(3); // PIN ##
  Serial.begin(9600);
}

void loop()
{

if ( (analogRead(A2) < 1000) && (state == 0) )
  Serial.println("CONDITION : A2 inferieur 1000  ET  state = 0");
{
    mySwitch.switchOff(1,1);
    Serial.println("ACTION : switchOFF");
    state = 1;
    Serial.println("VAR : state passe a 1");
}

if ( (analogRead(A2) > 1000) && (state == 1) )
  Serial.println("CONDITION : A2 superieur 1000  ET  state = 1");
{
    mySwitch.switchOn(1,1);
    Serial.println("ACTION : switchON");
    state = 0;
    Serial.println("VAR : state passe a 0");
}
delay(250);
}

(L’idée est de repérer quand la porte, initialement fermée, s’ouvre, puis envoyer une commande d’allumage et modifier une variable. La seconde suivante la porte est toujours ouverte mais la commande n’est pas envoyée parce que la variable est à 1. Et tant que la porte sera ouverte, rien ne se passera. Puis, lorsque la porte sera fermée, une commande d’extinction sera envoyée et la variable sera passée à 0, de sorte à ce que tant que la porte est fermée le duino ne répète pas l’envoi de commandes d’extinction… Le but est d’envoyer une seule commande dès l’ouverture ou la fermeture de la porte, et non toutes les 250 millisecondes…

En espérant avoir été assez clair dans mes explications,

Merci beaucoup :slight_smile:

Regardez bien ou vous avez mis

  Serial.println("CONDITION : A2 inferieur 1000  ET  state = 0");

Ainsi que l'autre

Petit indice

if (condition) {code si vrai}

J-M-L:
Regardez bien ou vous avez mis

  Serial.println("CONDITION : A2 inferieur 1000  ET  state = 0");

Ainsi que l'autre

Petit indice

if (condition) {code si vrai}

Salut ! Merci à toi de m'avoir aidé une fois de plus,

En fait j'ai fait 2 erreurs :
La première était en fait un oubli d'alimentation de l'émetteur 433 (j'avais oublié le bout suivant, étant donné que les 3 pins DATA, VCC et GND de l'émetteur sont branchés sur les pins 3, 4 et 5 du duino) :

void setup()
{
  pinMode(4,OUTPUT); // 5v 433
  pinMode(5,OUTPUT); // Gnd 433
  digitalWrite(4,HIGH); // 5v 433
  digitalWrite(5,LOW); // Gnd 433
  mySwitch.enableTransmit(3); // PIN ##
  //Serial.begin(9600);
}

Et, voyant qu'aucune réaction ne se produisait au niveau de la prise, j'ai pensé que je m'étais foiré avec la variable et que la prise recevait tellement d'instructions en même temps qu'elle restait désactivée, d'où le débug que j'ai inséré par la suite un peu trop vite, donc du coup comme lorsqu'il n'y a qu'une seule action à effectuer après une condition les crochets sont inutiles, le duino passait toujours par le bloc de code suivant...

Un joli fail que je ne devrais plus reproduire de si tôt !

Encore merci à toi !