Go Down

Topic: lire port serie avec Firmata en vb.net (Read 8661 times) previous topic - next topic

nimbus629

Bonjour a tous,
J'ai décidé de faire une sorte de souris 3d avec un nunchuk,la carte arduino et un programme que je créerai en vb.net.
J'arrive a envoyer les données de la nunchuk dans le port série sous la forme "accX= ***  accY= *** accZ=***" grâce a la carte arduino.Maintenant, j'aimerais lire ces données avec vb.net en utilisant Firmata.J'ai déjà regardé pas mal de source utilisant Firmata mais je n'ai rien trouvé pour résoudre mon problème.  :-/
Merci d'avance   :)

SamoLaw

Salut

Si tu es sous vb.net, tu n'as pas forcément besoin de Firmata pour lire des données sur le port série.

http://caron.developpez.com/dotnet/port_serie/

Je ne connaissais pas Firmata, je vais voir ça sur le net.  :)

nimbus629

Re,
D'abord, merci pour ta réponse si rapide  ;)
Mais j'ai déjà essayé avec cette méthode et c'est encore pire, j'arrive a lire les données du port série mais lorsque je veux exécuter une autre action en même temps (déplacer la souris en fonction des valeurs de la nunchuk dans mon cas) j'ai des problèmes de thread et je n'ai jamais réussi a éviter cela, c'est pour sa que j'aurais aimé essayer avec Firmata mais si tu as une autre solution je prend !  :)
Merci !

SamoLaw

Re,

Ah ok d'accord. Moi aussi sur un programme sous Visual C++, j'avais des problèmes au niveau des threads, mais j'avais résolu en partie ça en créant un thread par tâche en gros. Après sous vb.net, je n'ai aucune info dessus, désolé.

Je regarderais firmata ce soir, pour voir s'il y a des choses qui pourront t'aider,parce que ça m'intéresse aussi, mais je ne garantis rien.  ::)

nimbus629

Tres bien, je te remercie encore pour tes réponses

SamoLaw

Re,

Tu as lu ce qu'il y a sur ce site ?

http://www.acraigie.com/programming/firmatavb/default.html

Mais je ne comprends pas pourquoi tu as besoin de Firmata pour lire des données sur le port série.

Enfin, vu que je ne suis pas expert, je ne peux pas trop t'aider lol  ::)

nimbus629

En fait sa y est j'ai réussi a lire les valeurs en vb.net, mais il me reste un problème : j'ai une variable qui contient les données du style "accX= ***  accY= *** accZ=***" le probleme est que je n'arrive pas a relever qu'une seule partie (ex: que la valeur de l'axe X) et en plus, je n'arrive pas a afficher la variable dans une textbox car les valeurs chagent trop vite  :(.Voia, merci

SamoLaw

Si ça change trop vite, tu peux pas mettre une fonction type delay() juste avant l'affichage ??

Pour récupérer la partie qui t'intéresse dans ta chaîne de caractère, tu peux faire un truc de ce genre :

Code: [Select]

If Ch.Trim().StartsWith("acc") Then

Dim derniereLocation As Integer = Ch.IndexOf("=")

If derniereLocation >= 0 Then

Ch = Ch.Substring((derniereLocation + 1))
End If
End If



Avec trim(), on enlève les espaces, puis on recherche avec startswith si le premier caractère est "acc".

On cherche ensuite le caractère "=", puis on élimine la chaine entre "acc" et "=".

Teste ça pour voir.

Sinon comment tu as fais pour réussir à lire les valeurs en vb.net ?? Tu n'as pas eu besoin de Firmata en fin de compte , nan ?

nimbus629

Merci ! je vais essayé tout sa.
Effectivement je n'ai pas eu besoin de Firmata pour lire les données.Je peu envoyer le projet vb.net si sa intéresse.

SamoLaw

Ta textbox, il lui faut quoi exactement ?

Un char, un int, un float ?? Il faut faire gaffe à ça aussi.

Au pire si c'est un nombre qu'il faut, tu convertis ta chaîne avant.


nimbus629

Je résume :
J'ai une richtextbox qui affiche les données 'brut' (exactement comme le serial monitor de l'environnement arduino.J'ai une variable qui reçoit les données elle aussi et c'est a partir de cette variable que j'aimerais extraire les 3 valeurs des 3 axes. Voila :)

SamoLaw

Ok, as-tu essayé ce que j'ai mis ???

Cette variable en question dont tu aimerais extraire les 3 valeurs est de quel type ?? (char, int, float ...)

nimbus629

En fait je l'ai déclaré en tant que string mais je ne sais pas si c'est le plus approprié a ce type de valeur (sachant que la valeur est du genre 123 )

SamoLaw

Bah string c'est une chaîne de caractère.

Tu peux essayer le petit bout de programme que j'ai mis pour supprimer "acc=" et obtenir dans ton string que la valeur que tu cherches.

Pour convertir un string en un numérique, tu peux utiliser parse , un truc dans le genre.

B@tto

#14
Jan 24, 2011, 08:53 am Last Edit: Jan 24, 2011, 08:53 am by B@tto Reason: 1
Quote
Mais j'ai déjà essayé avec cette méthode et c'est encore pire, j'arrive a lire les données du port série mais lorsque je veux exécuter une autre action en même temps (déplacer la souris en fonction des valeurs de la nunchuk dans mon cas) j'ai des problèmes de thread et je n'ai jamais réussi a éviter cela, c'est pour sa que j'aurais aimé essayer avec Firmata mais si tu as une autre solution je prend !  


En fait il faut que tu utilises les deleguate pour résoudre ce problème. Perso je ne sais pas comment ça marche, mais j'utilise cette recette qui marche :

D'abord tu déclare le délégués au même endroit que les imports :

Code: [Select]
Delegate Sub Delegue1()

Ensuite dans ton évenement Serialport1_Datareceived tu mets  :

Code: [Select]
Try
Me. Invoke(New Delegue1(AdressOf Traitement Serie))
Catch
End Try


Et enfin tu mets tout ce que tu veux dans le sub Traitement Serie. D'après ce que j'ai compris, dans un évènement tu ne peux pas modifié un éléments (textbox ou autre) d'un autre thread, il faut que tu utilises un délégué qui va executer toutes ces tâches et reprendre la où tout s'est arrêté.
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Go Up