RF 433mhz + telecommande

Bonjour a Tous,
je m arrache ce qui me reste de cheveux sur le code ci apres .
Pour info, il s agit d une quadruple commande, Ouvrir et fermé pour 2 portails différents, Via Bluetooth ET Via RF avec telecommande 4 boutons.
Via Bluetooth et telephone, ca fonctionne tres correctement, sans soucis donc .

Oui mais voila VIA RF et telecommande, je n ai que 3 boutons sur 4 qui fonctionnent.
le Bouton A ne fonctionne pas quelquesoit l endroit sur lequel je le branche (généralement la 6).
J ai ecarté tout soucis materiel, avec 2 telecommande, 2 arduino, 2 modules RF, les fils etc … !
Donc, est il possible que l arduino “bloque” ou ai je fait une erreur dans le codage ??? je vois pas !

Merci de vos lumières…

int L298N_IN3=8;
int L298N_IN4=9;
int portailOuvre = 10;
int portailFerme=11;
char data[2];
int state = 0; 

void setup()
{
  pinMode(2,INPUT); //VT
  pinMode(3,INPUT); //D0
  pinMode(4,INPUT); //D1
  pinMode(5,INPUT); //D2
  pinMode(6,INPUT); //D3
  pinMode(L298N_IN3,OUTPUT);
  pinMode(L298N_IN4,OUTPUT);
  pinMode(portailOuvre, OUTPUT);
  pinMode(portailFerme, OUTPUT);
  data[0]=0;
  data[1]=0;
  Serial.begin(9600);
  Serial.println("Systeme Pret");
}

void loop()
{
   if(Serial.available() > 0){
 state = Serial.read();
 }
  
 if (state == '1') {
        digitalWrite(portailOuvre, HIGH);
        delay (1500);
        digitalWrite(portailOuvre, LOW);
        state = 0;
 }
  
 else if (state == '2') {
  digitalWrite(portailFerme, HIGH);
  delay (1500);
  digitalWrite(portailFerme, LOW);
  state = 0;
 }

 else if (state == '3') {
  digitalWrite(L298N_IN3,HIGH);
  digitalWrite(L298N_IN4,LOW);
  delay (16000);
  digitalWrite(L298N_IN3,LOW);
  digitalWrite(L298N_IN4,LOW);
  state = 0;
 }
  else if (state == '4') {
    digitalWrite(L298N_IN3,LOW);
    digitalWrite(L298N_IN4,HIGH);
    delay (16000);
    digitalWrite(L298N_IN3,LOW);
    digitalWrite(L298N_IN4,LOW);
    state = 0;
}

  data[0]=(data[0]<<1)+digitalRead(2);
  data[0]=data[0]&0x03;
  
  if(data[0]==0x01)
  {
    data[1]=read_signal();
    switch(data[1])
    {
      case 1:
      {
        Serial.println("Bouton D : Ouvre le Portail");
        digitalWrite(portailOuvre, HIGH);
        delay (1500);
        digitalWrite(portailOuvre, LOW);
        break;
      }
      case 2:
      {
        Serial.println("Bouton C : Ferme le Portail");
        digitalWrite(portailFerme, HIGH);
        delay (1500);
        digitalWrite(portailFerme, LOW);
        break;
      }
      case 3:
      {
        Serial.println("Bouton A : Ouvre le Garage");
        digitalWrite(L298N_IN3,HIGH);
        digitalWrite(L298N_IN4,LOW);
        delay (1000);
        digitalWrite(L298N_IN3,LOW);
        digitalWrite(L298N_IN4,LOW);
        break;
      }
      case 4:
      {
        Serial.println("Bouton B : Ferme le Garage");
         digitalWrite(L298N_IN3,LOW);
         digitalWrite(L298N_IN4,HIGH);
         delay (1000);
         digitalWrite(L298N_IN3,LOW);
         digitalWrite(L298N_IN4,LOW);
         break;
      }
    }
  }
  delay(100);
}

char read_signal()
{
  char i=0;
  if(digitalRead(3)==HIGH) i=i+1;
  if(digitalRead(4)==HIGH) i=i+2;
  if(digitalRead(5)==HIGH) i=i+4;
  if(digitalRead(6)==HIGH) i=i+8;
  return i;
}

bonsoir ton emetteur 4 boutons c'est quoi ? fabrication maison ou produit "commercial" ?

Surement celui-ci ?

Bingo, c est bien celui ci . et comme j en ai eu 2 ... et que j ai le meme probleme avec les 2 .... Cela dit, avec un autre programme, il fonctionne parfaitement, le souci ne vient pas de la

Je n'ai pas analyser le programme de fond en comble mais des choses peuvent etre optimiser.

Certains delay() sont vraiment trop trop long, sachant que c'est une fonction bloquante tout le programme en pâtit.

Si des instructions se répète, n’hésite pas a faire des fonctions qui vont grandement amélioré la lecture du programme.

Par exemple :

Serial.println("Bouton B : Ferme le Garage");
         digitalWrite(L298N_IN3,LOW);
         digitalWrite(L298N_IN4,HIGH);
         delay (1000);
         digitalWrite(L298N_IN3,LOW);
         digitalWrite(L298N_IN4,LOW);

Peut devenir :

FermeturePorteGarage();

Oui je suis sur que tu as raison, je suis un debutant en codage, je fais ce que je peux! D autant que les "delay" indiqué en "1000" ne sont meme pas les bons .... ma porte de garage mets 16 secondes pour descendre et autant pour monter. de toute facon j aurais du , par la suite modifier ces lignes. j ai vu qu avec la fonction Millis, il y avait moyen, mais je n ai pas encore compris exactement comment l inclure a mon code.

Donc si tu peux m eclairer sur ( ou et comment l inclure ) :

''Code: [Select]

FermeturePorteGarage();''

je t en serais reconnaissant.

hello peux tu me dire quelle portée tu obtiens avec ces télécommandes ?

mine de rien ... a 25metres , a travers 2 gros murs ca fonctionne toujours, j imagines qu en terrain degagé ... 100metres .

Bon sinon, j ai ré ecris le code, dans un nouvelle fenetre et miracle ! ca fonctionne ! Pourquoi, je sais pas, j ai l impression d avoir tapé la meme chose.

Donc maintenant si StandBy (ou autre posteur bienvenue) peut m aider a optimiser le code .... merci par avance

ci apres mon code "modifié" et fonctionnel

int L298N_IN3=8;
int L298N_IN4=9;
int portailOuvre = 10;
int portailFerme=11;
char data[2];
int state = 0; 

void setup()
{
  pinMode(2,INPUT); //VT
  pinMode(3,INPUT); //D0
  pinMode(4,INPUT); //D1
  pinMode(5,INPUT); //D2
  pinMode(6,INPUT); //D3
  pinMode(L298N_IN3,OUTPUT);
  pinMode(L298N_IN4,OUTPUT);
  pinMode(portailOuvre, OUTPUT);
  pinMode(portailFerme, OUTPUT);
  data[0]=0;
  data[1]=0;
  Serial.begin(9600);
  Serial.println("Systeme Pret");
}

void loop()
{
   if(Serial.available() > 0){
 state = Serial.read();
 }
  
 if (state == '1') {
        digitalWrite(portailOuvre, HIGH);
        delay (1500);
        digitalWrite(portailOuvre, LOW);
        state = 0;
 }
  
 if (state == '2') {
        digitalWrite(portailFerme, HIGH);
        delay (1500);
        digitalWrite(portailFerme, LOW);
        state = 0;
 }
  else if (state == '3') {
        digitalWrite(L298N_IN3,HIGH);
        digitalWrite(L298N_IN4,LOW);
        delay (16000);
        digitalWrite(L298N_IN3,LOW);
        digitalWrite(L298N_IN4,LOW);
        state = 0;
 }
  else if (state == '4') {
        digitalWrite(L298N_IN3,LOW);
        digitalWrite(L298N_IN4,HIGH);
        delay (16000);
        digitalWrite(L298N_IN3,LOW);
        digitalWrite(L298N_IN4,LOW);
        state = 0;
}
  data[0]=(data[0]<<1)+digitalRead(2);
  data[0]=data[0]&0x03;
  
  if(data[0]==0x01)
  {
    data[1]=read_signal();
    switch(data[1])
    {
      case 1:
      {
        Serial.println("D Ouvre le Portail");
        digitalWrite(portailOuvre, HIGH);
        delay (1500);
        digitalWrite(portailOuvre, LOW);
        break;
      }
      case 2:
      {
        Serial.println("B Ferme le Portail");
        digitalWrite(portailFerme, HIGH);
        delay (1500);
        digitalWrite(portailFerme, LOW);
        break;
      }
      case 4:
      {
        Serial.println("C Ouvre Le Garage");
        digitalWrite(L298N_IN3,HIGH);
        digitalWrite(L298N_IN4,LOW);
        delay (1000);
        digitalWrite(L298N_IN3,LOW);
        digitalWrite(L298N_IN4,LOW);
        break;
      }
      case 8:
      {
        Serial.println("A Ferme Le Garage");
        digitalWrite(L298N_IN3,LOW);
        digitalWrite(L298N_IN4,HIGH);
        delay (1000);
        digitalWrite(L298N_IN3,LOW);
        digitalWrite(L298N_IN4,LOW);
        break;
      }
    }
  }
  delay(100);
}

char read_signal()
{
  char i=0;
  if(digitalRead(3)==HIGH) i=i+1;
  if(digitalRead(4)==HIGH) i=i+2;
  if(digitalRead(5)==HIGH) i=i+4;
  if(digitalRead(6)==HIGH) i=i+8;
  return i;
}

quelle antenne sur le recepteur ?

j'ai le meme module et il porte à 2.5m

aucune antenne ! tel que je l ai recu

effectivement, c'est mieux sans antenne additive j'ai tellement lu qu'il fallait une antenne de 17 cm...

merci