Pages: [1]   Go Down
Author Topic: Besoin d'aide pour liaison série  (Read 1577 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink
Logged

Cergy
Offline Offline
Full Member
***
Karma: 0
Posts: 137
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ...
Logged

Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3737
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink

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:
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);
}
}

« Last Edit: January 10, 2011, 11:16:18 am by B@tto » Logged


Cergy
Offline Offline
Full Member
***
Karma: 0
Posts: 137
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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-)
Logged

Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nickel ! C'est exactement ce que je cherchai smiley

Merci beaucoup !

 smiley-wink
« Last Edit: January 10, 2011, 03:22:54 pm by bernardhadopi » Logged

Pages: [1]   Go Up
Jump to: