Go Down

Topic: Besoin d'aide pour liaison série (Read 1 time) previous topic - next topic

bernard-hadopi

Salut à tous !

Voilà, je souhaite envoyer par liaison série une chaine de la forme suivante :

xxx;yyy;zzz

avec x, y, z : entiers de 0 à 255.

Pour l'envoi pas de problème (pour l'instant j'envoie la chaine "manuellement" via la fenêtre serial du logiciel arduino).

Seulement pour la réception et le traitement je sèche complètement...  :-?

Comment arriver a différencier x, y et z et les convertir en entier ? (car je suppose que l'on envois une série de CHAR par la liaison série).

Je ne sais absolument pas quoi mettre dans

if(Serial.available())
 { ... }

ni quelles variables déclarer...

Pourriez-vous m'éclairer ?

Merci d'avance  ;)

vincelge

Il y a plusieurs possibilités.

Tu peux par exemple initialiser un compteur. Tu incrémentes ce compteur à chaque fois que tu lis un ";".
En fonction de la valeur du compteur,  tu sauvegardes dans une variable (de type char) différente, ou dans un tableau à 2 dimensions. (n'oublie pas de réinitialiser les valeurs de ces variables entre 2 boucles)

Ensuite, tu peux transformer la valeur de type char en int en faisant quelque chose du genre:
int var_int=atoi(var_char)

Pour transformer un char en byte, je ne connais que:
byte var_byte=(byte) atoi(var_char)
mais il y a peut-être plus simple ...
Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

B@tto

#2
Jan 10, 2011, 03:46 pm Last Edit: Jan 10, 2011, 05:16 pm by B@tto Reason: 1
J'ai la soluce mais je l'ai pas sous la main la et je suis pas sûr de la syntaxe ... si j'oublis pas (elle est sur un autre PC) je la ramène et je la publis ;)

EDIT : alors voila : je ne comprends pas à 100% comment ce code fonctionne mais il marche très bien ...

Pour toi ça devrait faire ça :

Code: [Select]
char* Parameter;
char BufferSerie[20]

void setup(){
Serial.Begin(9600);
}

void loop(){

if(Serial.available()){

delay(20);
for (int i=0;i<=20;i++) BufferSerie[i]='\0';
int x=0;
while (Serial.available()) BufferSerie[x++] = Serial.read();

Parameter = strtok (BufferSerie, ";");
xxx=strtol(Parameter,NULL,10);
Parameter = strtok (NULL, ";");
yyy=strtol(Parameter,NULL,10);
Parameter = strtok (NULL, ";");
zzz=strtol(Parameter,NULL,10);
}
}



vincelge

C'est bon à savoir ...
En jetant un peil sur le net, j'ai même vu que strtok acceptait plusieurs séparateurs dans le 2eme paramètre.

J'ai déjà eu à faire ce genre de traitement, si j'avais su ... d'un autre côté, si on utilise tout le temps les mots clés existants, ça devient trop simple  8-)
Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

bernard-hadopi

#4
Jan 10, 2011, 09:20 pm Last Edit: Jan 10, 2011, 09:22 pm by bernardhadopi Reason: 1
Nickel ! C'est exactement ce que je cherchai :)

Merci beaucoup !

;)

Go Up