Comment envoyer la distance à mon robot ?

dav1307 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
dav1307 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis en train de faire un programme sous LabVIEW qui doit communiquer avec une brique Lego Mindstorms (brique qui sert à contrôler un robot fait en Lego) (La communication labview/brique se fait par infrarouges). Cette brique contient un programme esclave (programmé en C). Pour communiquer avec cette brique, je dois lui envoyer des ordres sous forme de chaînes de caractères depuis Labview. A chaque chaîne de caractères reçue correspond une partie du programme à exécuter (le programme esclave interprète les infos envoyées par Labview).
Explications : le programme esclave est fait de la manière suivante (en gros):

[code/]
#define toto "AVANCE" /* toto est le nom de la chaîne lorsque la brique reçoit l'orde AVANCE depuis labview */
#define tata "STOP"
int variable;

...blablabla...

if ( strcmp(msg, toto) == 0 ) /* là on test si le message reçu est toto (ou AVANCE c'est pareil) */
{
variable = 0;
}


int main (void) /* programme principal */
{

if (variable == 0)
{
le robot va en avant;
}
}
/code

Bon, ça c'est pas un problème.
Maintenant je voudrais envoyer non seulement des ordres (avance, stop, tourne à droite,…) mais aussi des consignes (ex: stop quand distance parcourue = 15mm). Le problème est que la brique ne doit recevoir que des chaînes de caractères. Faudrait donc que je convertisse cette distance en chaîne (sous labview). Le problème c'est que je n'ai pas envie de déclarer une chaîne (dans mon programme esclave) pour chaque distance à parcourir…

Comme solution, je pensais à ça : je décompose la distance en unités, dizaines, centaines… je converti les unités en chaîne (ex: 0=A, 1=B,…,9=I) que j'envoie à la brique. Le programme esclave se charge ensuite de reconvertir cette chaîne en nombre décimal. Idem pour les dizaines et centaines. Ensuite je fais la somme et je retrouve ma distance à parcourir.

Que pensez vous de cette idée ?
Y'a pas moins farfelu ?

1 réponse

dav1307 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Plutôt que de traiter la distance en unité, dizaine et centaine, je devrais-je plutôt envoyer une chaine dans ce genre "DISTANCE_273" ?
Ensuite le programme esclave cherche si à l'intérieur de cette chaîne il y a "DISTANCE", si oui il extrait les 3 derniers caractères.

int test;  
msg = (char * ) malloc((len+1) * sizeof(char));  /*copie du message reçu*/

 for (i=0; i < len; i++)
     msg[i] = data[i];
     msg[len] = '\0';

  test= strstr(msg,"DISTANCE"); /*là je cherche si "DISTANCE" est dans msg*/
 
  if (test != NULL)
    {
    le programme extrait alors les 3 dernières valeurs de la chaîne msg.
    }


Mais je ne sais pas comment extraire les 3 dernières valeurs d'une chaine. Quelle fonction utiliser?
0