Pages: [1]   Go Down
Author Topic: lire port serie avec Firmata en vb.net  (Read 8166 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 23
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Paris
Offline Offline
Full Member
***
Karma: 2
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Re,
D'abord, merci pour ta réponse si rapide  smiley-wink
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 !  smiley
Merci !
Logged

Paris
Offline Offline
Full Member
***
Karma: 2
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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

Paris
Offline Offline
Full Member
***
Karma: 2
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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  smiley-sad.Voia, merci
Logged

Paris
Offline Offline
Full Member
***
Karma: 2
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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 ?
Logged

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

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

Paris
Offline Offline
Full Member
***
Karma: 2
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

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

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

Paris
Offline Offline
Full Member
***
Karma: 2
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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

Paris
Offline Offline
Full Member
***
Karma: 2
Posts: 156
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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:
Delegate Sub Delegue1()

Ensuite dans ton évenement Serialport1_Datareceived tu mets  :

Code:
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é.
« Last Edit: January 24, 2011, 02:53:32 am by B@tto » Logged


Pages: [1]   Go Up
Jump to: