0
Offline
Newbie
Karma: 0
Posts: 23
Arduino rocks
|
 |
« on: January 23, 2011, 08:35:25 am » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Paris
Offline
Full Member
Karma: 1
Posts: 156
|
 |
« Reply #1 on: January 23, 2011, 08:55:47 am » |
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. 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 23
Arduino rocks
|
 |
« Reply #2 on: January 23, 2011, 09:03:37 am » |
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 !
|
|
|
|
|
Logged
|
|
|
|
|
Paris
Offline
Full Member
Karma: 1
Posts: 156
|
 |
« Reply #3 on: January 23, 2011, 09:20:36 am » |
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. : 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 23
Arduino rocks
|
 |
« Reply #4 on: January 23, 2011, 09:24:29 am » |
Tres bien, je te remercie encore pour tes réponses
|
|
|
|
|
Logged
|
|
|
|
|
Paris
Offline
Full Member
Karma: 1
Posts: 156
|
 |
« Reply #5 on: January 23, 2011, 11:18:35 am » |
Re, Tu as lu ce qu'il y a sur ce site ? http://www.acraigie.com/programming/firmatavb/default.htmlMais 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 : 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 23
Arduino rocks
|
 |
« Reply #6 on: January 23, 2011, 12:58:30 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Paris
Offline
Full Member
Karma: 1
Posts: 156
|
 |
« Reply #7 on: January 23, 2011, 01:40:35 pm » |
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 : 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
Newbie
Karma: 0
Posts: 23
Arduino rocks
|
 |
« Reply #8 on: January 23, 2011, 01:45:09 pm » |
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
Full Member
Karma: 1
Posts: 156
|
 |
« Reply #9 on: January 23, 2011, 01:49:52 pm » |
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
Newbie
Karma: 0
Posts: 23
Arduino rocks
|
 |
« Reply #10 on: January 23, 2011, 02:17:46 pm » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Paris
Offline
Full Member
Karma: 1
Posts: 156
|
 |
« Reply #11 on: January 23, 2011, 02:30:03 pm » |
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
Newbie
Karma: 0
Posts: 23
Arduino rocks
|
 |
« Reply #12 on: January 23, 2011, 02:34:54 pm » |
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
Full Member
Karma: 1
Posts: 156
|
 |
« Reply #13 on: January 23, 2011, 02:38:08 pm » |
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
Edison Member
Karma: 7
Posts: 1668
Do or DIY
|
 |
« Reply #14 on: January 24, 2011, 02:53:18 am » |
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 : Delegate Sub Delegue1() Ensuite dans ton évenement Serialport1_Datareceived tu mets : 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
|
|
|
|
|
|