Bonjour à tous,

Novice en Arduino, mais pas en programmation et je suis électricien automaticien de formation, (mais ça date ))

Ce sont des émetteurs température/humidité

Je me suis inspiré de ce PDF pour le code
J'utilise le bête petit récepteur 433 MHz dont la broche data est en TTL

J'ai les spécifications pour ces émetteurs (en commentaires au début du code) avec notamment ceci : Un bit à 0 est codé par une impulsion de 500 ms suivie d'une impulsion inverse de 1000 ms (2 unités), un bit à 1 par une impulsion de 500ms suivie de l'impulsion inverse de 2000ms (4 unités).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 durH = pulseIn(pin, HIGH);
lit bien l'impulsion, mais je ne vois pas trop pour ce qui est qualifié d'inverse car ne semble pas fonctionner.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
/*
 * 
 * https://cdn.instructables.com/ORIG/FAY/0LCL/H2WERYWD/FAY0LCLH2WERYWD.pdf
 
TFA Dostmann 30.3208.02 Émetteur de rechange pour régulateur thermique 
 
https://www.amazon.fr/Dostmann-30-3208-02-Émetteur-rechange-régulateur-thermique/dp/B00SVDVWAA/
 
Chaque satellite émet à peu près toute les minutes. A chaque fois, il émet le même message 3 fois. 
Le codage se fait par des impulsions dont la durée est un multiple de 500 micro-secondes. 
Le début du message commence par une impulsion de 8 unités (8 x 500 = 4000 micro secondes, 4 millisecondes). 
Le message comporte ensuite 74 impulsions (37 bits). 
Un bit à 0 est codé par une impulsion de 500 ms suivie d'une impulsion inverse de 1000 ms (2 unités), 
  un bit à 1 par une impulsion de 500ms suivie de l'impulsion inverse de 2000ms (4 unités). 
  Le message se décompose de la manière suivante (certains bits ne servent pas):
 
bits 0-7: identifiant du satellite (aléatoire).
bits 8-9: Statut (?)
bits 10-11: Canal (valeur de l'interrupteur derrière le satellite)
bits 16-23: Température en dégrés x10. Par exemple, pour 20,2, on aura 202.
bits 28-35: Humidité en pourcentage.
 */
 
byte pin = 13;
unsigned int durH;
unsigned int durL;
float durR;
 
 
 
void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600); Serial.flush();
}
 
;void loop()
{
 int cpt;
 durH = pulseIn(pin, HIGH);
 if ((durH>3900)&&(durH<4100)) // début de transmission 
 {
    durR=durH/8;
    Serial.print(durR);
    Serial.print(" -:- ");
    do
    {
      durH = pulseIn(pin, HIGH);
      if ((durH>450)&&(durH<550)){
       cpt++;
       Serial.print(".");
       durL=pulseIn(pin,LOW);
       if((durL>900)&&(durL<1100)){
        Serial.print("0");
       }else if ((durL>1800)&&(durL<2200)) {
          Serial.print("1");
       }
      }
     }while(cpt<37);
    }
    if(cpt==37) {Serial.println();}
}
Extrait de la sortie, qui n'est pas fluide !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
509.00 -:- .....................................
495.00 -:- .....................................
502.00 -:- .....................................
494.00 -:- .....................................
490.00 -:- .....................................
492.00 -:- ...0..................................
509.00 -:- .....................................
492.00 -:- ..............................0.......
Je suis preneur d'idées.
Cordialement