Programmation Arduino pour Nunchuk .

Sav

Membre actif
Salut les Roboticiens !! :)

Comme le titre l'indique je suis en train de programmer une carte Arduino (Duemilanove) pour exploiter un Nunchuk , une des manettes de la fameuse console Wii .

J'ai trouver le Code qui permet de lire les infos de l'accéléromètre 3 axes et d'autre codes pour faire bouger des servos suivant la position de la manette .

Seulement je voudrais à la place des signaux de commande des servos , un signal analogique 0 / 5 Volts avec 2.5 Volts au neutre (capteur à l'horizontale ) .

Le problème est que je suis une quiche en programmation .

La ligne de code qui me pose probléme :

{
analogWrite(ledPin1,outbuf[3]-50 ) ; //commande en PWM la led1 , j'ai mis -50 à outbuf[3] au hazard .
}

Comme vous pouvez le voir j'y vais au pif car je suis larguer .

Merci d'avoir lu cette tartine , si vous voulez plus d'info sur Arduino+Nunchuk n' hésitez pas !
 
Salut Sav,

Peut tu en dire plus sur ton problème ?
(Quelle est l'erreur, quand se produit-elle...)
Une ligne de code seule n'aide pas beaucoup, il faudrait le reste pour se faire une idée. Là on ne sait pas ce que contient ton tableau "outbuf".

Ta sortie analogique attend une valeur entre 0 et 255. Pour avoir un retour au neutre, dans ton cas il faut que tu envoie la valeur 128 pour avoir 2,5V. Du moins je pense que ça marche ainsi.


++

MadProf
 
Salut MadProf , merci d'avoir pris le temps de me répondre

Le probléme est qu'avec cette ligne de code j'ai un signal analogique mais avec de mauvaises valeurs , de téte il est compris entre 1 et 3 volts .

J' hesitais à mettre le code en entier car il prend pas mal de place , je le mettrais ce soir .

Pour outbuf , je ne sait pas l'utiliser, la réponse doit etre sur ce site
http://www.windmeadow.com/node/42 mais ou ? Je suis vraiment paumé .

Il y a bien un tableau au debut (Bit /Description/Values of sample Nunchuk )

En lisant ça :
X-axis acceleration value Min(at 1G):0x48 / Medium(at 1G):0x7D / Max(at 1G):0xB0

Je me dit que 0x48 = 0 ; 0x7D = 128 et 0xB0 = 255 , non ?

PS: mon code est basé sur celui du site http://www.windmeadow.com/node/42 , j'ai juste rajouté la commande d'une led pour visualiser mon signal , je le poste ce soir.
 
C'est bien l'exemple de code que j'avais en tête. Je l'inspecte un peu plus j'essaye de t'envoyer une réponse avant la fin de la journée.
 
Sav à dit:
Je me dit que 0x48 = 0 ; 0x7D = 128 et 0xB0 = 255 , non ?
Bah non justement il me semble que c'est plutot 0x48 = 72, 0x7D = 125 et 0xB0 =176 (hexa)

Ton nunchuk te renvoi bien en max et en min les valeurs que tu as mis, mais toi tu veux envoyer autre chose à ta sortie analogique de ta carte arduino (entre 0 et 255)
Ton voltage de sortie parait donc tout à fait normal, 72 doit correspondre à peu près à 1V, et 176 à 3V

D'ailleurs, une petite règle de 3 vite fait te donne :

72 ->1.41V
125 ->2.45V
176 ->3.45V

Donc :
y=(22/9)x-(2304/13) où x est ta valeur envoyée par le nunchuck et y ta valeur attendue par ta carte Arduino

Après reste plus qu'à faire une function pour transformer ton résultat, dans le genre :

int out(int x){
y=(22/9)*x-(2304/13);
return y;
}

j'ai mis "dans le genre" car tu peux très bien tomber sur un résultat qui ne sera pas un entier en retour, donc fais un contrôle sur y avant de le retourner.

Vérifie bien la fonction que j'ai écris, je ne suis pas sûr du résultat et j'ai pas le temps de tester je suis au boulot. Si ça se trouve je t'ai dis des grosses co....ies mais c'est ce qui me vient à l'esprit.

Tiens moi au jus.

++

MadProf
 
Haut