[help] Télémétrie et Radio Commande Modèles réduits

Bonjour à tous,

J'essaye sans résultat de reproduire ce qui a été fait ici:

Le cahier des charges est le suivant:

  • Lecture d'une tension de batterie
  • envoi de la trame au récepteur
  • envoi de la trame du récepteur à la télécommande
  • affichage des informations sur la télécommande

Apparement, plusieurs personnes ont déjà planché là dessus et ça fonctionne.

La trame des données est la suivante:

Le code est le suivant: voir la pièce jointe

J'ai envoyé plusieurs mails au créateur Thyzoon chez qui cela fonctionne mais je n'ai eu aucune réponse.

Si quelqu'un avait la possibilité de m'aider pour me débloquer ce serait sympa.

Je pensais dans un premier temps tester si la trame d'envoi est bonne en envoyant un truc bidon du type:

Serial.print ({
0x7c,0x8d,0x00,0xd0,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7d,0x00});

Mais je ne sais pas si cela va fonctionner.

Je n'ai pas assez de connaissances en programmation pour résoudre mon problème.

Petite précision: j'utilise une Arduino Uno à la place d'une Mini, mais je ne pense pas que cela fasse de différences?

LiPoM_0_43.zip (6.39 KB)

Bonjour,

Je pensais dans un premier temps tester si la trame d'envoi est bonne en envoyant un truc bidon du type:

Serial.print ({
0x7c,0x8d,0x00,0xd0,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7d,0x00});

Mais je ne sais pas si cela va fonctionner.

Il n'y a aucune chance que cela fonctionne.

byte data[45] = {
0x7c,0x8d,0x00,0xd0,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7d,0x00};

Serial.write(data, 45);

Mais ça marchera pas non plus vu qu'il faut que tu calcule la checksum.

Tu peut encapsuler tout tes données dans une structure :

typedef struct {
  uint8_t entete[2];  // 0x7C 0x8D
  uint8_t alarme1; 
  uint8_t indentifiant; // 0xD0
  uint8_t alarme2;  
  uint8_t tension_elem[6];
  uint16_t tension_accu[2];
  uint8_t temperature[2]; 
  uint8_t reservoir_percent; 
  uint16_t remplissage;
  uint16_t rotation; 
  uint16_t altitude_relative;
  uint16_t taux_montee_sec;  
  uint8_t taux_montee_3sec; 
  uint16_t courant_A; 
  uint16_t tension_principal; 
  uint16_t courant_mA;
  uint8_t garbage[9]; 
  uint8_t code_fin; // 0x7D
  uint8_t checksum;
} Telemetrie_t;

// Envoi
Serial.write(data, sizeof(Telemetrie_t));

Avant de continuer il faut que tu trouve la méthode de calcul de la checksum (surement une CRC8) :wink:

Pour la ckeksum il la calcule comme ça:

Dans Message.cpp :

// Emission de la trame

void GMessage::send(){
  // Calcul ChekSum
  message_array[CHECKSUM_POS] = checksum(message_array);
  // Emission trame
  for(int i = 0; i < LENGTH; i++){
    Serial.print(message_array[i], BYTE);
    delay(TPS_EM);
  }
}

Bon, après plusieurs tests, il semnlerait que la trame soit bonne, mais que ce soit une histoire de timings.

Soit les 5ms sont un peu juste après réception.

Soit la cadence d'émission est trop élevée ...
#define TPS_EM 2 (message.h)
augmenter TPS_EM (boucle entre octets émis)

Le problème s'est que j'ai fait varier les deux variables sans succès.

Je crois que sans oscillo, je suis perdu...

Pour info, voilà les relevés:
voici la trame émise par le récepteur Graupner12 en me connectant sur la voie 5 (avec rien d'autre de branché mis à part l'alimentation sur la voie 1):

Maintenant voici la trame émise par l'Arduino et prélevée sur le TX Arduino:

Et la trame reçue par l'Arduino prélevée sur le RX:

Par contre j'ai remarqué que quand je tappotte aléatoirement sur la liaison TX, de temps en temps la télécommande me capte quelque chose.
ça veut donc dire que la trame est bonne, et que cela viendrait plutot d'un problème de timing.

Et je ne sais pas pourquoi, mais ma télécommande réagit quand j'upload le programme dans la mémoire Arduino, à la fin