Go Down

Topic: Envoie de donné par "serial" (Read 1 time) previous topic - next topic

Qly1

La premiere partie qui était d'envoyer une donnée sur le port série est opérationnel.

Le probleme maintenant c'est que ce que le nombre que j'envoie varie entre 3 et 36000 or serial.read ne lie qu'un bit a la fois donc j'obtiens par exemple
2
5
4
1
au lieu de 2541.
J'ai vu qu'il était possible de passer par un tableau mais je me demande si cela ne vas pas trop ralentir le programme qui a besoin de tourner rapidement.


osaka

#11
Oct 24, 2011, 03:10 am Last Edit: Oct 24, 2011, 03:16 am by osaka Reason: 1

ne lie qu'un bit a la fois


petit correction sans doute pas fait exprès : "ne lie qu'un byte(octet) à la fois".

Sinon tu envoie des donnée sur le port série via pyton et tu l'affiche comment ?
J'ai du mal à saisir certaine chose avec l'arduino et le port série, comme le fait qu'il envoie le correspondant ascii 'T' au lieu de la véritable valeur de la variable T via Serial.write qui est censé faire un l'envoi d'un flux binaire de la variable (2 byte ici pour un entier) ...

Il est pourtant bien indiqué que pour envoyé la représentation (ascii je suppose) d'une valeur il faut utilisé print à la place de write (et c'est pas ce qu'il voulait) ..., à moins qu'à la réception du coté pyton il fasse également sa propre interprétation du flux ?
http://arduino.cc/en/Serial/Write
Et encore je vois pas comment dans le cas présent il interprèterait la valeur de la variable avec le nom de la variable, qui disparait une fois le code compilé et correspondrait plutôt à une adresse mémoire une fois exécuté ?
Je trouve également étrange qu'avec read on ai l’impression de recevoir 4 caractère au lieu de 2 byte tout court (qu'il affiche la correspondance peut importe), donc voir également l'envoi côté pyton ?
Cette liaison série avec l'arduino me perturbe lol, faudra que je fasse des testes avec autres chose que le programme arduino un jours. :D

fdufnews

Tu veux envoyer les chiffres 2 5 4 1 ou bien l'unsigned long 2541?

Dans le premier cas il faut utiliser Serial.print()
Dans le deuxième cas il faut utiliser Serial.write() en passant par un tableau.

Pour envoyer 36000 il faut à minima utiliser un unsigned int. Dans ce cas il faut faire un cast car micros() retourne des unsigned long.

Qly1

Ce que je veux envoyé c'est bien l'unsigned long 2541.

Je vous explique le fonctionnement du programme.
J'utilise un telemetre a Ultrason SRF 06.
J'envoie dans une boucle infini une impulsion.
Quand je recois en retour l'impulsion de sortie renvoyé par le telemetre  je note le temps T1
Et quand l'impulsion est terminé je note le temps T2.
Je calcule ensuite T=T2-T1 et c'est cette valeur que je dois envoyer sur python car T sera proportionnelle a la distance .

fdufnews

#14
Oct 24, 2011, 12:56 pm Last Edit: Oct 25, 2011, 08:43 am by fdufnews Reason: 1
La méthode la plus élégante définir une union entre un unsigned long et un tableau de 4 unsigned char. (désolé je suis au boulot j'ai pas le temps de développer)
La méthode plus simple copier les 4 octets de l'unsigned long par une boucle:

Code: [Select]

unsigned char octet[4];
temp = T
for (i=0;i<3;i++)
{
   octet[i]= (unsigned char)(temp & 0xFF);
   temp>>=8;
}

Go Up