Programme pour faire fonctionner un capteur LiDar

Bonjour,

Dans le code suivant : [https://robu.in/wp-content/uploads/2018/12/Develop-routine-of-TFmini-Plus-in-Arduino.pdf] , j'aimerais savoir ce que signifie la ligne suivante (qu'est-ce que l'on vérifie ?) : "if (uart[8] == (check & 0xff))".
De même, pourquoi pour calculer la distance on fait : dist=uart[2]+uart[3]*256 ? (Pourquoi on multiplie le 4ème octet par 256 et non le 3ème ?)

Un extrait de la trame :

Cordialement,
WhyNot

Bonjour,

On vérifie que le checksum est correct. Comme le checksum reçu est sur un octet on ne prend que l'octet de pois faible avec le &0xff

La distance est codée sur 16 bits. On reconstitue sa valeur en concaténant les deux octets.

C'est l'octet n°3 en parant de 0, donc c'est bien le 4eme octet

oui ok je vois mieux mais je comprends pas pourquoi dans le programme il est écrit "uart[2] + uart[3] * 256" et non "uart[2]*256 + uart[3] * 256"

Et est-ce qu'il est nécessaire d'importer la librairie SoftwareSerial ?

Un nombre sur 16 bits est composé de deux octets

  • un octet de pois faible
  • un octet de pois fort
    Pour avoir la valeur du nombre il faut concaténer les deux octets donc il faut décaler l'octet de poids fort de 8 bits vers la gauche
    uart[2] + (uart[3] << 8)
    C'est équivalent à uart[2] + uart[3] * 256

Ca dépend de la carte que tu utilises
Si tu as seul port série tu peux utiliser ce port, mais il y a des inconvénients: tu ne pourras pas debugger avec le moniteur série et il faudra sans doute débrancher ton capteur pour téléverser. Il est en général préférable d'utiliser SoftwareSerial.

1 Like

Ah oui ok merci beaucoup !