Je souhaiterais réaliser un transfert d'information avec mon arduino nano en utilisant le port UART.
J'ai déjà réalisé une ébauche de programme. Le problème que je rencontre est le suivant, j'arrive à transmettre des données et des caractères séparément mais pas ensemble.
Mon but transmettre un STX(0x02) pour le début de trame puis un LF pour le début du bloc de donnée, une etiquette en char, puis un HT (séparateur), puis des données (en décimal), puis un HT, puis un checksum et pour finir CR fin du bloc de donnée et ETX fin de trame.
Je souhaiterais réaliser un transfert d'information avec mon arduino nano en utilisant le port UART.
J'ai déjà réalisé une ébauche de programme. Le problème que je rencontre est le suivant, j'arrive à transmettre des données et des caractères séparément mais pas ensemble.
Mon but transmettre un STX(0x02) pour le début de trame puis un LF pour le début du bloc de donnée, une etiquette en char, puis un HT (séparateur), puis des données (en décimal), puis un HT, puis un checksum et pour finir CR fin du bloc de donnée et ETX fin de trame.
Alors j'ai essayé en changeant les string par char mais j'obtiens tjrs la même erreur
C:\Users\dleprovost\Desktop\DL\test transmi\test transmi.ino: In function 'void loop()':
C:\Users\dleprovost\Desktop\DL\test transmi\test transmi.ino:24:28: error: 'class String' has no member named 'toChar'
String Checksum = (Som1.toChar() & 0x3F) + 0x20;
^~~~~~
Le problème n'est pas d'utiliser des String ou des char (bien que l'utilisation des char soit préférable), mais d'utiliser les bon codes pour les caractères de contrôle comme STX ...
Yes mais mon problème c'est que j'ai tout essayé, d'envoyer en decimal hexa, ou bien les caractères STX mais il m'envoi un S puis T puis un X en ascii.
Est-ce une nécessité d'utiliser un protocole STX ETX, sinon pour transférer des données de divers types, il y a les structures.
Ainsi tu mets tes variables diverses dans une structure et tu transmet, en une opération, toutes tes variables avec un: Serial1.write((byte *)&donneesAtransmettre, sizeof donneesAtransmettre);
et tu reçoit, en une opération, à l'autre bout avec: Serial1.readBytes((byte*)&donneesAtransmettre, sizeof donneesAtransmettre);
La structure donneesAtransmettre contient tes variables.
Je dirais oui, on dirait une émulation de compteur électrique
Pour envoyer des données brutes, il suffit de faire des Serial.write(2) ou Serial.write(3) et le problème est réglé.
Beaucoup de personnes pensent qu'il faut construire la chaine complète avant de l'émettre. Mais on peut parfaitement envoyer les infos une par une. Cela économise la RAM puisqu'on ne manipule plus de longues chaines de données.
La première question à se poser est : le protocole est-il imposé ?
Par exemple, il se peut que le récepteur soit un appareil utilisant un protocole bien précis. Dans ce cas, il faut bien se plier à ce protocole.
Il n'y a rien à comparer.
Il s'agit de laisser passer un signal dans certaines conditions.
Ensuite tu mets l'ampli qui va bien pour avoir l'amplitude et la puissance souhaitée.
Éventuellement filtrer avant d'amplifier s'il y a des exigences sur le spectre du signal.