Arduino et carillon

Je viens de prendre connaissance de votre message.
Premièrement je viens de vérifier votre code qui est correcte :

  • 0xFE2AF2 soit : 111111100010101011110010

vérifié comme ceci :

// programme généré par l'IA à la base, il a été testé en conditions réelles et fonctionne.
#define NB_PAIRS 25          // Nombre constant de paires
#define CODE "111111100010101011110010"       // code binaire recherché

// Tableaux de valeurs pour les signaux et les silences
const unsigned long signals[NB_PAIRS] = { 1508, 1508, 1508, 1508, 1504, 1512, 1512, 512, 512, 516, 1508, 512, 1508, 516, 1500, 512, 1504, 1508, 1508, 1508, 512, 508, 1504, 512, 516};
const unsigned long silences[NB_PAIRS] = { 504, 500, 504, 500, 500, 496, 500, 1496, 1492, 1496, 500, 1496, 500, 1500, 504, 1496, 500, 500, 500, 504, 1496, 1500, 504, 1928, 15124};

// Fonction de conversion d'une chaîne binaire en entier non signé
unsigned long binToULong(const char *bin) {
  unsigned long result = 0;
  while (*bin) {
    if (*bin == '0' || *bin == '1') {
      result = (result << 1) | (*bin - '0');
    } else {
      // Arrête la conversion en cas de caractère non binaire
      break;
    }
    bin++;
  }
  return result;
}

void setup() {
  Serial.begin(115200);
 
  char decoded[NB_PAIRS + 1];  // Chaîne qui contiendra la séquence binaire décodée
  decoded[NB_PAIRS] = '\0';    // Terminaison de la chaîne

  // Décodage de chaque paire pour déterminer le bit correspondant
  // Si signal < silence => signal court et silence long => '0'
  // Si signal > silence => signal long et silence court => '1'
  for (int i = 0; i < NB_PAIRS; i++) {
    if (signals[i] < silences[i]) {
      decoded[i] = '0';
    } else if (signals[i] > silences[i]) {
      decoded[i] = '1';
    } else {
      // Cas particulier : valeurs égales
      decoded[i] = '?';
    }
  }

  Serial.print("Séquence binaire décodée : ");
  Serial.println(decoded);

  // Recherche du motif dans la séquence décodée
  char *pos = strstr(decoded, CODE);
  if (pos != NULL) {
    // Calcul de l'indice de départ dans les paires
    int index = pos - decoded;
    Serial.print("code binaire \"");
    Serial.print(CODE);
    Serial.print("\" trouvé à partir de la paire numéro ");
    Serial.println(index + 1);

    // Affichage des valeurs des paires correspondant au motif
    int len = strlen(CODE);
    for (int i = index; i < index + len; i++) {
      Serial.print("Paire ");
      Serial.print(i + 1);
      Serial.print(" : Signal = ");
      Serial.print(signals[i]);
      Serial.print(", Silence = ");
      Serial.print(silences[i]);
      Serial.print(" => bit = ");
      Serial.println(decoded[i]);
    }

    // Conversion du motif en entier puis en hexadécimal
    unsigned long value = binToULong(CODE);
    Serial.print("La valeur binaire \"");
    Serial.print(CODE);
    Serial.print("\" correspond à 0x");
    Serial.print(value, HEX);
    Serial.println(" en hexadécimal.");
  } else {
    Serial.print("Le code binaire : ");
    Serial.print(CODE);
    Serial.println("\" n'a pas été trouvé dans la séquence.");
  }
}

void loop() {
  // Le programme s'exécute une seule fois dans setup()
}

Ce qui donne bien :

Séquence binaire décodée : 1111111000101010111100100
code binaire "111111100010101011110010" trouvé à partir de la paire numéro 1
Paire 1 : Signal = 1508, Silence = 504 => bit = 1
Paire 2 : Signal = 1508, Silence = 500 => bit = 1
Paire 3 : Signal = 1508, Silence = 504 => bit = 1
Paire 4 : Signal = 1508, Silence = 500 => bit = 1
Paire 5 : Signal = 1504, Silence = 500 => bit = 1
Paire 6 : Signal = 1512, Silence = 496 => bit = 1
Paire 7 : Signal = 1512, Silence = 500 => bit = 1
Paire 8 : Signal = 512, Silence = 1496 => bit = 0
Paire 9 : Signal = 512, Silence = 1492 => bit = 0
Paire 10 : Signal = 516, Silence = 1496 => bit = 0
Paire 11 : Signal = 1508, Silence = 500 => bit = 1
Paire 12 : Signal = 512, Silence = 1496 => bit = 0
Paire 13 : Signal = 1508, Silence = 500 => bit = 1
Paire 14 : Signal = 516, Silence = 1500 => bit = 0
Paire 15 : Signal = 1500, Silence = 504 => bit = 1
Paire 16 : Signal = 512, Silence = 1496 => bit = 0
Paire 17 : Signal = 1504, Silence = 500 => bit = 1
Paire 18 : Signal = 1508, Silence = 500 => bit = 1
Paire 19 : Signal = 1508, Silence = 500 => bit = 1
Paire 20 : Signal = 1508, Silence = 504 => bit = 1
Paire 21 : Signal = 512, Silence = 1496 => bit = 0
Paire 22 : Signal = 508, Silence = 1500 => bit = 0
Paire 23 : Signal = 1504, Silence = 504 => bit = 1
Paire 24 : Signal = 512, Silence = 1928 => bit = 0
La valeur binaire "111111100010101011110010" correspond à 0xFE2AF2 en hexadécimal.

Il y a adéquation entre le code donné par rtl_433 dans le terminal et les valeurs lues dans le fichier RAW
Maintenant je regarde le reste.