Je pensais que les valeurs étaient directement lues par la carte, je vais mettre au début de la partie de quoi lire ces valeurs
J-M-L:
sur cette partie:
où lisez vous les valeurs de l'accéléromètre dans votre code?
J'ai rajouté acc.getAcceleration(&ax,&ay,&az) pour connaitre ces valeurs
void loop()
{
float ax, ay, az;
acc.getAcceleration(&ax,&ay,&az);
int axa, axy;
float b = (sqrt(ax*ax)+(ay*ay)+(az*az));
axa = asin(ax/b); // on passe d'une valeure d'accélération à un angle
axy = asin(ay/b);
servox.write(-axa);
servoy.write(-axy);
delay(50);
}
Pour poursuivre, que pensez vous que retourne la fonction [color=red]xx[/color]= asin(v) (petit indice, regardez le commentaire en anglais dans le code source) et demandez vous si c'est compatible avec ce qu'attend l'appel de méthode write sur vos instances de Servo servox.write([color=red]xx[/color])
et bien le write de mon servomoteur nécessite un angle en °, je crois que j'aurais du mettre la fonction sin dans ce cas ? mais fonction que l'on m'a fournit est bien arcsin(v)
vous n'avez pas répondu à la question clé - quelle est l'unité de l'angle retourné par arc-sinus()
la doc dit cela (si vous êtes allé voir):
// The asin() function computes the principal value of the arc sine of
// __x. [color=red]The returned value is in the range [-pi/2, pi/2] radians[/color]. A
// domain error occurs for arguments not in the range [-1, +1].
extern double asin(double __x) __ATTR_CONST__;
est-ce que ma question est plus claire comme cela?
Bonjour JML, désolé de mon absence étant en bac blanc cette semaine je ne me suis pas trop posé sur le problème? si je comprends bien mon erreur viendrait de l'unité de ma fonction. Cependant la formule littérale contient un arcsin, je devrais alors changer ma formule ou traduire les valeurs sous forme [-1;1].
Non c'est bon j'ai compris où vous vouliez en venir cette fois, il me faut donc passer les radians en degrés.
J'ai trouvé cette formule sur un autre forum : angle_radians = angle_degres * pi / 180
je devrais donc faire : angle_radians *180 /M_PI pour avoir mes degrés
M_PI viens de la librairie arduino de base et donne une valeur de pi
presque - n'oubliez pas que l'intervalle de départ est entre [-pi/2, pi/2] soit -90° et +90° soit une amplitude de 180° mais vous voulez un nombre en 0° et 180° (même amplitude mais il faut aussi faire une translation)
Petit indice: si vous ajoutez PI/2 à la valeur retournée par l'arc-sinus, votre intervalle en radian devient [0, pi].... sachant que 0 radian c'est 0° et PI radian c'est 180°...
Donc en somme si je rajoute 90 (pi/2) à la valeur de mon arc sinus je n'ai pas besoin de m'embêter avec les plages et je peux passer directement de radians en degrés comme les limites des plages sont égales
Je vous avoue que je suis un peu perdu là mais je comprends le système, a serait donc ma valeur en degrés et les opérations au dessus la manière d'y arriver à partir des radians
dans le premier mail?
il me semble que ce sont des maths de niveau 4ème ou 3ème... faut réviser le cercle unitaire et la définition des radians...
oui si x est le résultat du arc-sinus, alors a est la valeur correspondante en degrés, tournée dans le sens des aiguilles d'une montre en 90° (mais attention demandez vous si c'est le même angle)
oups.. en effet je connais le cercle trigo en math et les radians en SI mais je suis ne me souviens pas avoir fait de changement de plage de valeur c'est ce qui me perturbait