Page 88 - arduino_Neat
P. 88
La dernière instruction de cette sous-routine nous sert à incrémenter, si c'est le cas, la valeur
de servoPos. Nous assignons ainsi à servoPos sa valeur actuelle en y ajoutant la différence
calculée précédemment : servoPos + difference. La raison pour laquelle nous ajoutons la
différence à la valeur actuelle est pour conserver une certaine continuité dans la position du
moteur et une accumulation de la valeur de celle-ci à travers le temps. Ce code, puisqu'il prend
en compte la différence, fait en sorte qu'un mouvement brusque, traduit comme une grande
différence entre les deux lectures, augmentera grandement la position du servomoteur,
générant une impression de « peur ». À l'inverse, une approche très « douce » et lente
représentant une faible différence n'aura qu'un impact mineur sur la position du servomoteur,
qui semblera plus « calme ».
Comme il n'est pas possible de donner une valeur supérieure à 180 au servomoteur (ou à la
fonction servo1.write () ), nous devons limiter l'incrémentation de servoPos. Pour ce faire, nous
utilisons la fonction min () qui s'exécute à l'inverse de max (). Ainsi, elle prendra le plus bas des
deux chiffres en paramètres pour le retourner. Donc, dans min (servoPos + difference, 180) , si
l'addition de servoPos et différence est supérieure à 180, le chiffre 180 sera retourné, autrement
ce sera le résultat de l'addition qui sera pris en compte.
void decroitreServoPos ()
{
servoPos = max (servoPos - 10, 0);
}
La dernière sous-routine que comporte notre programme permet au servomoteur de
retourner vers son point de base, le degré 0. Comme servoPos s'incrémente graduellement
avec les ombres, il faut également doter notre petite bête d'une « tendance » à revenir, ou dit
autrement, à faire décroitre servoPos. L'instruction qui accomplit ceci est servoPos = servoPos -
10. La valeur 10 est soustraite de servoPos et le résultat est stocké dans la même variable. Le
choix de « 10 » ici est plus ou moins arbitraire et peut être ajusté, dans la mesure où une
valeur plus faible (3, par exemple) fera décroitre beaucoup plus lentement servoPos et une
valeur plus élevée fera revenir à l'inverse la petite bête beaucoup plus rapidement.
Nous devons également nous assurer de ne pas aller en dessous de 0, puisqu'il s'agit de la
position en degrés du servomoteur. Il faut donc utiliser, comme décrit précédemment, la
fonction max ().
88

