Pour contrôler le fonctionnement, l’affichage est fait sur le moniteur série de l’IDE Arduino.
Le Joystick est constitué de 2 potentiomètres raccordés aux broches d’entrées analogiques A4 et A5 et d’un bouton poussoir raccordéé sur la broche 11 de la carte Roméo.
Chaque potentiomètre donne une tension comprise entre 0 et 5 Volts. Au repos, les potentiomètres sont en position médiane et la tension de sortie est d’environ 2,5 Volts. L’entrée analogique transforme cette tension en une valeur de 0 à 1023. La valeur au repos est donc d’environ 512 pour chaque entrée.Ces valeurs ne sont pas très précises. Il faut en tenir compte, en créant une « plage morte de -25 à +25 autour du 512 théorique.
Un appui sur le bouton donne une valeur 0V. Au repos, l’entrée correspondante est forcée à +5 Volts. Dans ce programme, un appui sur le bouton allume la LED câblée en sortie 13.
Le programme :
Partie Déclaration :
Définition des broches entrées/ sorties utilisées (il suffit de changer les valeurs #define en fonction du cablge réalisé
Définition des variables ( x = N° de potentiomètre) :
- marche (valeur 1 si bouton relaché, valeur 0 si Appui sur le bouton)
- ValeurPx valeur lue en entrée de la carte sur le potentiomètre x ( 0 à 1023 )
- joystickx valeur ( -512 à + 511), 0 correspondant à la position centrale théorique du joystick
- vitessex vitesse du moteur commandé (0 à 255)
- sensx Sens de rotation du moteur commandé valeurs -1, 0, 1
- positionx angle demandé au servomoteur (0 à 180)
- posx Valeur de commande du servomoteur (0 à 255)
- mémoirex mémoire de la valeur précédente pour n’afficher que s’il y a un changement de valeur
- déclarer le bouton en entrée et définir sa résistance de pull-up
- déclarer la led en sortie
- déclarer la liaison vers le moniteur série
Loop() :
- Lire les entrées analogiques
- Calculer les variables Joystick (-512 à +511)
- Calculer la vitesse moteur : 3 fonctions imbriquées :
- abs : prendre la valeur absolue de la variable Joystick
- constrain : borner cette valeur entre 25 et 450 (si joystick < 25, alors forcer à 25 – Si joystick > 450 alors forcer à 450)
- map convertir l’intervalle 25 – 450 en intervalle 0 -254 (voir un des messages précédents qui pr)
- abs : prendre la valeur absolue de la variable Joystick
- Calculer le sens
- si la valeur joystick est entre -25 et + 25 : Arret moteur
- SI > 25 : sens Avant
- si < 25 : sens arrière
- si la valeur joystick est entre -25 et + 25 : Arret moteur
- utiliser la fonction map() pour transformer les valeurs (0 à 1023) aux angles souhaités (ici 0 à 180 °, mais on peut choisir l’angle mini et l’angle maxi en modifiant les 2 derniers paramètres de la fonction MAP (Exemple: si je veux que mon servo évolue entre 15° et 135° : map (valeurPx,0,1023,15,135). pour les valeurs posx – faire une petite règle de 3 pour la valeur de sortie).
afficher es valeurs à l’écran (fonctions déjà étudiées dans les messages précédents).
La fonction Delay() permet de ralentir l’affichage. Exemple d’affichage :
Le programme et téléchargeable ici :