SCANNER de TELECOMMANDE pour PORTAIL de la marque CAME 433Mhz

J’ai perdu ma télécommande de mon portail de la marque CAME. Donc, j’ai fait un scanner avec un ARDUINO MEGA et un transmetteur 433Mhz (FS1000A) sur le port 13.
Avec un buzzer pour compter les tours.
Il m’envoi tous les codes possible sur 13 bits, ( bit start = 0 , 10 bits de code , bit stop = 0 , bit stop =1).
BIT 0 = 300µs , BIT 1 = 600µs.
EX : 0 1000010101 01
Il faut environ 2 minutes 30 secondes pour envoyer trois fois les 1023 codes.
Comme je ne connais pas toute les commandes ARDUINO, j’aimerai savoir s’il y a une façon plus courte de fait le programme que le miens ?
Et d’augmenter la vitesse d’un scanne complet, tout en gardant les temps de 12 ms entre les trois trames de même code et les 60 ms entre chaque codes ?
video sur youtube : scanner Arduino Mega 2560 avec ecran SSD1289 - YouTube

// SCANNER de TELECOMMANDE pour PORTAIL de la marque CAME

#include <VirtualWire.h>

int a,z; // conversion en binaire de "a"
int complement; //boucle de complement de zero pour 10 bit
int combinaison; // 1023 combinaisons possible
int longchaine; // longeur de la chaine
int sortie = 13; // sortie vers le transmetteur 433Mhz
int broche = 5; // sortie vers le buzzer, sonne a chaque teste des 1023 codes
int a600,a300; // frequence du bit, bit 0 = 300µs , bit 1 =  600µs
int compteur; // nombre d'envoi de la trame de bit (3 fois)
String bite = ""; // les 10 bits de code seront stocker un par un dans cette variable

void setup()
{
  pinMode(sortie,OUTPUT);  
  a600 = 593; // 600µs
  a300 = 292; // 300µs  
  longchaine=0;

}

void loop()
{ 
  // Buzzer 1 bip
  tone(broche, 1000, 500);
  
  combinaison=0;
  for (combinaison=0; combinaison<1023;){
    combinaison++;
    String a =  String(combinaison, BIN);// conversion en binaire de "a"
    longchaine=a.length(); // longueur de la chaine "a"
    
    //boucle de complement de "0" pour avoir 10 bits
    complement=0;
    for (complement=0; complement<(10-longchaine);){ 
      a="0"+a;
      complement++;
    } 
  
    // nombre d'envoi de la trame de bit (3 fois)
     for (int compteur = 0; compteur < 3; compteur++) 
    {
      // BIT start 0
      digitalWrite(sortie, LOW); // 0v
      delayMicroseconds(a300); // 300µs
      digitalWrite(sortie, HIGH); // 5v
      delayMicroseconds(a300); // 600µs
      digitalWrite(sortie, LOW); // 0v
      delayMicroseconds(a300); // 300µs
  
      // affectation des 10 bits a la variable "bite"
        z=0;
      for (z=0; z<(10);){ 
        bite = (a.substring(z+1,z)); // extraction des bits
        if (bite=="0"){
          // BIT 0
          digitalWrite(sortie, LOW); // 0v
          delayMicroseconds(a300); // 300µs
          digitalWrite(sortie, HIGH); // 5v
          delayMicroseconds(a300); // 600µs
          digitalWrite(sortie, LOW); // 0v
          delayMicroseconds(a300); // 300µs
        } 
        else {
          //  BIT 1 
          digitalWrite(sortie, HIGH); // 5v
          delayMicroseconds(a600); // 600µs
          digitalWrite(sortie, LOW); // 0v
          delayMicroseconds(a300); // 300µs
        }
        z++;
      } 
     // BIT de stop 0
        digitalWrite(sortie, LOW); // 0v
        delayMicroseconds(a300); // 300µs
        digitalWrite(sortie, HIGH); // 5v
        delayMicroseconds(a300); // 600µs
        digitalWrite(sortie, LOW); // 0v
        delayMicroseconds(a300); // 300µs
      
      // BIT de stop 1
        digitalWrite(sortie, HIGH); // 5v
        delayMicroseconds(a600); // 600µs
        digitalWrite(sortie, LOW); // 0v
        delayMicroseconds(a300); // 300µs  

        delay(12); // intervale entre les 3 trames
    }   
    delay(60); // intervale entre les codes
  } 
  // Buzzer 2 bip
  tone(broche, 2000, 500);
  delay(550);
  tone(broche, 2000, 500);
  
  delay(15000); // Pausse de 15 secondes, avant le prochain teste.
}

SCANNER_PORTAIL_CAME_final_1_ino.ino (2.84 KB)

telecommande-came-TOP432NA-TOP-432NA.jpg