Bonjour,
Novice en C et Arduino, j’ai besoin de votre aide, je me suis inspiré de plusieurs exemples :
J’ai testé la fonction télérupteur avec un bouton poussoir :
int rel=9;
int bp=4;
int etat=0;
boolean mem_etat_rel=false;
boolean mem_front_bp=false;
void setup ()
{
pinMode (bp,INPUT);
pinMode (rel,OUTPUT);
digitalWrite (bp,LOW); // permet d'activer la résistance de pull-up interne à l'arduino si besoin
digitalWrite (rel,HIGH);
}
void loop()
{
etat=digitalRead(bp);
if (etat && !mem_etat_rel && !mem_front_bp) {
digitalWrite (rel,LOW);
mem_etat_rel=true;
mem_front_bp=true; //memorisation appui sur bp
}
else if(etat && mem_etat_rel && !mem_front_bp){
digitalWrite (rel,HIGH);
mem_etat_rel=false;
mem_front_bp=true; //memorisation appuie sur bp
}
if (!etat) {
mem_front_bp=false; //raz memoire sur relachement du bp
}
delay(10); // pour filtrer les rebonds du contact si besoin
}
J’ai essayé la fonction télérupteur avec la touche 1 de ma télécommande infrarouge :
#include <IRremote.h>
#include <IRremoteInt.h>
int rel=9;
int ir=7;
int etat=0;
boolean mem_etat_rel=false;
boolean mem_front_ir=false;
IRrecv irrecv(ir);
decode_results results;
void setup ()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode (rel,OUTPUT);
digitalWrite (rel,HIGH);
}
void loop()
{
if (irrecv.decode(&results)){
if (results.value == 0xFF30CF){
if (!mem_etat_rel && !mem_front_ir) {
digitalWrite (rel,LOW);
mem_etat_rel=true;
mem_front_ir=true; //memorisation appui sur telecommande
}
else if(mem_etat_rel && !mem_front_ir){
digitalWrite (rel,HIGH);
mem_etat_rel=false;
mem_front_ir=true; //memorisation appui sur telecommande
}
if (!etat) {
mem_front_ir=false; //raz memoire sur relachement de la telecommande
}
delay(10); // pour filtrer les rebonds du contact si besoin
}
irrecv.resume();
}
}
Les deux fonctionnent séparément, j’ai voulu concaténer les deux, c’est à dire allumer ou éteindre par le BP ou la télécommande, mais j’ai une erreur quelque part :
#include <IRremote.h>
#include <IRremoteInt.h>
int rel=9; //sortie relais sur 9
int ir=7; //entrée infra-rouge sur 7
int bp=4; //entrée bouton poussoir sur 4
int etat=0;
int etat_bp=0;
boolean mem_etat_rel=false;
boolean mem_front_ir=false;
boolean mem_front_bp=false;
IRrecv irrecv(ir);
decode_results results;
void setup ()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode (rel,OUTPUT);
digitalWrite (rel,HIGH);
pinMode (bp,INPUT);
digitalWrite (bp,LOW);
}
void loop()
{
if (irrecv.decode(&results)){
if (results.value == 0xFF30CF){
if (!mem_etat_rel && !mem_front_ir) {
digitalWrite (rel,LOW);
mem_etat_rel=true;
mem_front_ir=true; //memorisation appui sur telecommande
}
else if(mem_etat_rel && !mem_front_ir){
digitalWrite (rel,HIGH);
mem_etat_rel=false;
mem_front_ir=true; //memorisation appui sur telecommande
}
if (!etat) {
mem_front_ir=false; //raz memoire sur relachement de la telecommande
}
delay(10); // pour filtrer les rebonds du contact si besoin
}
irrecv.resume();
}
etat=digitalRead(bp);
if (etat_bp && !mem_etat_rel && !mem_front_bp) {
digitalWrite (rel,LOW);
mem_etat_rel=true;
mem_front_bp=true; //memorisation appui sur bp
}
else if(etat_bp && mem_etat_rel && !mem_front_bp){
digitalWrite (rel,HIGH);
mem_etat_rel=false;
mem_front_bp=true; //memorisation appuie sur bp
}
if (!etat_bp) {
mem_front_bp=false; //raz memoire sur relachement du bp
}
delay(10); // pour filtrer les rebonds du contact si besoin
}
Merci d’avance pour votre aide !