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.