Bonsoir,
Si je débarque ici, ce soir, c'est que toutes mes tentatives et sources ont été épurées. Je ne vais pas mettre la centaines de lien que j'ai consulté en vain.
Je vais parler un peu radio en parlant de ma problématique et donc des solutions envisagées et problèmes rencontrées.
Première étape, je dois faire quoi ? Envoyer des datas (une quantité assez importante si on regarde plus loin que le simple "Hello World"). A savoir une trame qui se composerais de plusieurs éléments :
Mais aussi d'autres possibilités tel que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Adresse(type hexadécimale ressemblant fort à l'IPV6) + Text + Ligne + Colonne + Texte
Bref autant de datas à transmettre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Adresse(type hexadécimale ressemblant fort à l'IPV6) + Clignotement + 1000 + 5000
J'ai donc commencé par étudier un peu la solution full String (oui, pas beau) en me disant que "0010:0000:0000:0000:0000:0000:0000:0000,Text,0,0,Hello world" pouvais passer. Hélas, c'est déjà trop lourd. Voir donc méthode 2 : passer par tableau.
Déjà, c'est beaucoup plus intéressant car on pourra toujours appeler les éléments un par un et comme on le souhaite en réception. Je prendrais donc cela comme point de départ. Mais, il y a un premier mais. J'ai du texte et des chiffres mélangées. De mémoire, sur Arduino (par ce que je ne pratique pas tous les jours) n'aime pas du tout le mélange dans un tableau. Et la galère commence. Comment je peux m'affranchir de ce premier travers ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part tbl[]={'0010','0000','0000','0000','0000','0000','0000','0000', 'Text', '0', '0', 'Hello World'}
Et essayons enfin de sortir d'une première carte pour arriver dans la seconde en mode radio. Alors, dans ce domaine, j'ai vue plusieurs choses. Je vais commencé par celle qui me semble la plus évidente mais pas du tout compatible avec ce que j'ai évoquer plus haut dans la méthode 2. Je vais parler de Hamming + Manchester.
Si je suis bien arrivé à faire fonctionner Manchester un coup sur deux, c'est que déjà la bibliothèque Githubienne est pas tout à fait au point. Pas fiable du tout!
Au final, ce que je cherche à faire c'est transmettre le tableau, soit en entier, soit par infos quitte à borner les infos tel que l'ajout d'un start et d'un stop data (ben oué, faut faire comme en HTML, faut baliser) et transformer ça en modulation de 0/1 qui puissent être modulées par radio ou autre.
J'ai commencé un bout de code m'appuyant finalement sur RadioHead qui fais pas trop mal le travail puisque je vois bien une trame à l'oscilloscope et que je vois bien un retrour sur écran à la réception.
Pour l'émission :
Pour le récepteur :
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 #include <RH_ASK.h> #include <SPI.h> // Not actually used but needed to compile #define speedTR 1000 #define TX_PIN 4 RH_ASK driver(speedTR, "", TX_PIN); void setup() { // put your setup code here, to run once: driver.init(); } void loop() { // put your main code here, to run repeatedly: char data[20]; data[0] = "<"; data[1] = "00AB"; data[2] = "CF2A"; data[3] = "153D"; data[4] = "2BAC"; data[5] = "2384"; data[6] = "A23D"; data[7] = "F2FF"; data[8] = "CA2D"; data[9] = "TEXT"; data[10] = "0"; data[11] = "0"; data[12] = "Hello world !!!!"; data[13] = ">"; driver.send((uint8_t*)data, 20); driver.waitPacketSent(); delay(1000); }
Et le résultat :
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 #include <RH_ASK.h> #include <SPI.h> // Not actually used but needed to compile #define speedTR 1000 #define RX_PIN 5 RH_ASK driver(speedTR, RX_PIN); void setup() { // put your setup code here, to run once: Serial.begin(9600); driver.init(); } void loop() { // put your main code here, to run repeatedly: char receivedData[20] = {0}; uint8_t buflen = sizeof(receivedData); if (driver.recv((uint8_t*)receivedData, &buflen)) { for (byte i = 0; i < 20; i++) { Serial.print(receivedData[i]); Serial.print(" "); } Serial.println(""); } }
Bon, ben CQFD, j'ai bien mon retour mais les valeurs sont éronnées.r t y ~ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ * * * * 8 ,
r t y ~ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ * * * * 8 ,
r t y ~ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ * * * * 8 ,
r t y ~ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ * * * * 8 ,
r t y ~ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ * * * * 8 ,
r t y ~ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ * * * * 8 ,
Voilà, je m'en remet à des mains plus compétentes que les miennes étant dépassé pour le coup.
Merci d'avoir pris le temps de me lire et de m'aider.
Partager