Bonjours a tous.
j'essaie de régler un problème de fluctuation de compas en y appliquant une moyenne, seulement voila lorsque le compas est au alentour du Nord c'est a dire grosomodo entre 355° et 5° faire une moyenne avec ces valeurs n'est pas très facile. si par exemple on prends 10 valeurs et que l'on divise par 10 le total fait des valeurs non conformes puisque on peut très bien avoir 4 valeurs entre 355 et 359 et 6 valeurs entre 0 et 5.
si quelqu’un a une idée.
merci
Il me semble que ce problème a déjà été évoqué sur le forum. Il faudrait que l'on retrouve le fil de discussion en question....
Edit: le voilà
merci pour le lien, je n’ai pas compris encore comment faire. je n'ai pas de valeurs négative, uniquement de 0° a 360°.
Dans ton cas, 0 est égal à 360. Donc si tu veux moyenner des valeurs autour de 0/360 il faut identifier un intervalle d'intérêt (par exemple 350 - 10) sur lequel tu feras ta moyenne : toutes les valeurs dans cet intervalle doivent être ramenées soit autour de 0 (en ôtant 360 à celle entre 350 et 360) soit autour de 360 (en ajoutant 360 à celle entre 0 et 10).
merci, j’essaie tout de suite
j'ai testé ce bout de code, ça m'a l'aire pas trop mal.
Comp = heading();
if (Comp >= 350 && Comp <= 10) {
for (int i = 0; i < 50; i = i ++) {
A = (A + Comp) + 360;
}
B = B + Comp;
}
Moy = A + B / 50;
if (Moy >= 360) {
Moy = Moy - 360;
}
for (int i = 0; i < 50; i = i ++) {
C = C + Comp;
}
Moy = C / 50;
}
Non j'ai peur que ça ne marche pas...
C'est mieux ![]()
Je ne comprends pas trop ou je rentre mon angle dans la bibliothèque AverageAngle pour le calcul, mais je vais bien finir par trouver.
merci
Quelque chose comme ça
#include "AverageAngle.h"
void setup()
{
Serial.begin(115200);
test_setType();
}
void loop()
{
}
void test_setType()
{
AverageAngle AA(AverageAngle::DEGREES);
AA.reset();
AA.add(340);
AA.add(20);
AA.add(10);
AA.add(355);
AA.setType(AverageAngle::DEGREES);
Serial.println(AA.getAverage(), 5);
Serial.println();
}
voir @lesept pour "tableau circulaire"
https://forum.arduino.cc/t/circular-shifting-of-array-contents/585808
cool, je test ca ce soir ![]()
c'est parfait pour mon utilisation.
Merci beaucoup ![]()
Rapide et efficace, bravo
void MoyenneCompas() {
AverageAngle AA(AverageAngle::DEGREES);
AA.reset();
for (int i = 0; i < 10; i++) {
AA.add(heading());
}
int cnt = AA.count();
Avg = AA.getAverage();
}
Il faut peut-être ajouter un petit délai après chaque mesure, sinon ça risque d'être très rapide et tu ne verras pas les variations de cap.
avec un petit delay, en effet c’est plus stable.
je viens de m’apercevoir que le lsm303, même après calibration n'est pas juste