Sylvain Mahé Le site Web Retour à l'accueil Principes Partager mes idées et mes projets librement et gratuitement. Thématiques Mécatronique du système embarqué, artisanat pluridisciplinaire, bricolage commun, esthétique logicielle et matérielle, minimalisme fonctionnel, conceptualisation alternative, rédaction technique et littéraire, partage pédagogique documenté. Contact ✆ Téléphone : 06.45.49.96.98
✉ E-mail : contact@sylvainmahe.site
✎ Site Web : sylvainmahe.site
Écriture de la page : Sylvain Mahé
Les moyennes avec la classe Average Contrairement à un filtre non prédictif, la moyenne de valeurs n'induit pas de délais (ou lissage temporel) dans l'obtention des résultats justes. Ainsi avec la classe Average vous pouvez effectuer des moyennes sur un nombre d'échantillons prédéfini à l'avance. Exemple d'utilisation de la classe Average : #include <Average.h> #include <AnalogRead.h> int main() { Average myAverage = Average (50); AnalogRead myPotentiometer = AnalogRead (25); while (true) { myPotentiometer.read(); myAverage.set (myPotentiometer.value); //myAverage.value est la moyenne effectuée sur 50 échantillons de la valeur retournée par le potentiomètre } return 0; } Dans cet exemple, un objet myAverage de type Average est déclaré, en paramètre est indiqué d'effectuer une moyenne sur 50 échantillons. Puis un objet myPotentiometer de type AnalogRead est déclaré, en paramètre est indiqué d'utiliser le port GPIO numéro 25 de l'automate programmable en entrée. Dans la boucle, cet objet myPotentiometer appelle la fonction read ce qui permet de lire l'entrée analogique concernée, et donc de mettre à jour la variable value attachée à cet objet, variable qui est envoyée en paramètre à la fonction set de l'objet myAverage à la ligne suivante, et fonction qui se charge d'effectuer la moyenne. Ainsi la variable value de l'objet myAverage est la moyenne effectuée sur 50 échantillons de la valeur retournée par le potentiomètre. L'exemple ci-dessus montre comment facilement effectuer une moyenne sur 50 échantillons d'un nombre provenant d'une source analogique, nombre obtenu une seule fois à chaque tour de boucle. Dans ce cas de figure, il est évident que vous ne pourrez pas obtenir les 50 échantillons immédiatement et donc effectuer une moyenne sur la quantité spécifiée en paramètre à la première itération : La classe Average permet de palier à cette problématique en effectuant progressivement la moyenne demandée lors du démarrage du procédé, soit dans cet exemple, lors des 49 premiers tours de la boucle de calcul, ceci tout en restant juste, et ce jusqu'à ce que les 50 premiers tours de boucle soient effectués, après quoi la moyenne s'effectue normalement (sur 50 valeurs). Pour finir, d'autres fonctions utiles existent : - amount : permet de modifier à tout moment le nombre d'échantillons sur lesquels la moyenne s'effectue.
- reset : permet de réinitialiser la moyenne, donc lors des prochains appels à la fonction set la valeur moyenne résultante prendra effet sur de nouvelles valeurs envoyées en paramètre à cette fonction (comme si les précédentes données avaient été effacées).
Références : Récapitulatif des fonctions et variables de cette classe : float value = 0; Average (const unsigned char AMOUNT); void set (const float VALUE); void amount (const unsigned char AMOUNT); void reset();