Etape 23 :
La programmation.
Pour capturer les données RC, j’utilise une simple fonction de Arduino appelée pulseIn(). Vous pouvez voir toute la référence sur le site d’Arduino. J’ai découvert cette fonction alors que googler « joystick de contrôle radio pour arduino » et trouvé cet excellent exemple de Sparkfun.
Tout le code est disponible dans github.
Il y a un dossier appelé « RC_reader » avec un programme qui capture tous les 6 canaux RC et imprime les valeurs brutes à la console. En utilisant ce code, je lis les données brutes de la RC, maintenant nous avons juste besoin de mapper ces données dans un format utilisable (0 - 1023) ou (0 - 255) ou (0 - 180).
--
Le code réel ont trois fonctions importantes :
mapper les valeurs brutes RC aux valeurs utilisables
rc_mapper() ;
mapper les valeurs utilisables aux valeurs PWM
motionMapper() ;
motion de contrôles avec capteur infrarouge et contrôle RC
motionControl() ;
--
rc_mapper() - mappe le joystick à un lecteur différentiel et une fois de plus google a fait ma journée, sinon je serait toujours être aux prises avec ce composant. Cette fonction va donner deux valeurs « left_vertical » et « right_horizontal » qui sera utilisé plus tard pour affecter la vitesse des moteurs.
motionMapper() - toutes les sources de cette fonction peuvent être vu ici. J’ai eu de pirater ce morceau de code à utiliser avec le Motoruino2, parce que les moteurs sont sur une uC esclave, j’utilise une fonction à valeur PWM pour les deux moteurs.
motionControl() - utilise uniquement les valeurs qui vient de la motionMapper() et les envoie par l’intermédiaire de la fonction setPWM (leftMotor, rightMotor).
--
Je suis également en utilisant le bouton de droite sur la télécommande pour définir la vitesse maximale.
--
Il y a aussi un capteur de Distance Sharp qui est utilisé pour éviter les collisions. Sur la commande de mouvement, je teste la distance, et si elle est inférieure à 100 le bot fonctionne normalement, si c’est au-delà de 100 et moins de 200, il se déplace lentement, et si c’est au-delà de 200 arrêts. Il peut toujours se déplacer vers l’arrière, il y a encore quelques tweak que je veux faire ici, par exemple, je veux être en mesure d’activer ou de désactiver cette fonctionnalité en mode exécution.
Pour la lumière, j’utilise un des bâtons à 3 positions. Chaque position donne une valeur, chaque valeur correspondra à un état de légère.
Pas à grand chose à dire au sujet de la servocommande. J’ai juste besoin de vérifier les limites de cours pour éviter des collisions avec d’autres composants sur le bot.
Tout le code est disponible et commenté sur GitHub.