Bonjour à tous,
Je suis en train de revoir une partie de mon code qui va indiquer a direction du vent avec un anemometre DAVIS.
J'ai une equation que je cherche à comprendre et étonnamment, elle me retourne une valeur qui ne correspond pas à la valeur que me donne ma calculatrice!!!
Voici les détails de ma fonction:
Premièrement, je déclare du variables et je stocke la valeur analogique qui est lue sur ma broche
int analogInput;
int windDirection;
analogInput = analogRead(_read_pin_wind_direction);
Voici le tableau de référence (valeur analogiuqe| degre)
/*
int WDdirection[18] {
// Analog value, direction direction (° degre)
0, 0, // N
500, 45, // NE
1000, 90, // E
1390, 135, // ES
1860, 180, // S
2350, 225, // SW
2800, 270, // W
3400, 315, // WN
4095, 360, // N
};
*/
NB: Le but de ce tableau est de pouvoir calibrer la sonde de manière à avoir la valeur analogique tous les 45°. J'ai constaté qu'avec une autre sonde, les valeurs ne sont pas exactement les mêmes)
Ici, je parcours les valeurs paires de mon tableau que je compare avec ma valeur analogique. Les valeurs impaires sont les degrés. Si la valeur analogique se trouve dans un range, je continue
for (int i = 0; i < 18; i = i + 2)
{
if ((analogInput >= WDdirection[i]) && (analogInput <= WDdirection[i + 2]))
{
Dans ce qui suit, je considère une valeur analogique de 750.
Je débug les valeurs qui vont être utilisées dans mon équations
Serial.print("WDdirection[i + 1] : "); Serial.println(WDdirection[i + 1]); // 45
Serial.print("WDdirection[i + 3] : "); Serial.println(WDdirection[i + 3]); // 90
Serial.print("analogInput : "); Serial.println(analogInput); //750
Serial.print("WDdirection[i] : "); Serial.println(WDdirection[i]); // 500
Serial.print("WDdirection[i + 2] : "); Serial.println(WDdirection[i + 2]); // 100
et voici mon équation:
(PS: pour voir tout mon code, vous le trouver ici)
windDirection = WDdirection[i + 1] - ((WDdirection[i + 1] - WDdirection[i + 3]) * ((analogInput - WDdirection[i]) / (WDdirection[i + 2] - WDdirection[i])));
Si maintenant, je remplace les valeurs données plus haut, ca donne ceci:
windDirection = 45 - ((45 - 90) * ((750 - 500 / (1000 - 500)));
Si je passe ceci, dans ma calculatrice, le résultat est -67.5
Bon la valeur devrait être positive, mais ce n'est pas grave pour le moment. En dehors du fait que cette valeur est négative, elle est cohérente, car la valeur analogique se trouve à mi-chemin de 500 et 1000, tout comme 67.5° est à min-chemin de 45° et 90°.
Maintenant, je fais tourner mon code avec mon board, et je fait tourner mon vane, ceci
Serial.println( WDdirection[i + 1] - ((WDdirection[i + 1] - WDdirection[i + 3]) * ((analogInput - WDdirection[i]) / (WDdirection[i + 2] - WDdirection[i]))) );
Serial.print(windDirection);
m'affiche uniquement 45, 90, 135, 180, 225, 270, 315.
Pourtant, si je tourne mon vane pour que la valeur analogique soit 750, serial.println(windDirection) doit m'afficher une valeur proche de 67. Et dans tous les cas, je devrais voir des valeurs qui incrément, mais pas des valeurs qui font "des bonds" de 45 , 90, 135, etc.
J'ai donc du mal à comprendre ce comportement!!
Est-ce que j'ai zapé un truc!!!!