Étape 6: La logique du programme
Le bloc principal ("boucle") est vraiment très simple :
Vérifie les messages pour en arriver à tampon série, depuis le périphérique Android vérifie si le mode de contrôle doit être Local ou distant (la valeur par défaut est Local). Vérifier si une commande à exécuter le "programme" (séquence d’étapes) a été utilisée. Dans l’affirmative, exécutez-le. Dans le cas contraire, le « programme » n’est pas terminé et encore doit écrire des nouvelles mesures. Si une « nouvelle position » est définie, ajoutez-le au programme dos au début, puis effectuez l’étape 1 à nouveau.
void loop ()
{
checkBTcmd () ;
defineLocalRemote () ;
execTaskCmd = digitalRead (execTaskPin) ;
Si (execTaskCmd == || Portrait == "runon")
{
RunProgram () ;
}
else recArmPosition () ;
Command = "" ;
}
La fonction checkBTcmd () construit une chaîne en utilisant les caractères particuliers qui arrive du module BT. Cette chaîne est passée à la variable « commande ».
La fonction defineLocalRemote () considère la variable "commande" vérifier s’il recoit une commande pour changer le mode à distance ou vice versa. La commande de l’alarme est également analysée ici. Pour la logique du programme, si le « alarme » est déclenchée dans l’appareil Android, le bras doit nécessairement accéder au mode distant.
La fonction RunProgram () effectue les préparatifs, tournant LED on / off, etc et surtout appeler la fonction : ExecuteTask (). Ce dernier est la fonction qui contient la logique de l’exécution de la séquence d’étapes. La fonction augmente le « positionIndex » envoyer les données de position au bras un par un, à l’aide de l’outil : armPosition (poignée, base, épaule, coude).
Enfin, la fonction qui vraiment les servos de commande et écrit les « étapes » est le recArmPosition. Fonction de réception de la commande Android, cette fonction définira le positionnement des servos qui peuvent être par le biais des pots ou les "curseurs" d’Android app. Avec le changement de chaque poste, cette fonction envoie les coordonnées pour les servos en utilisant la fonction armPosition (poignée, base, épaule, coude). La lecture de la position réelle des pots ou des curseurs et l’activation correspondante de servors produit au moment de la commande « Enregistrer » ou « Programme » est déclenché. À ce moment, l’indice arrays'position est incrémentée et stocké de l’étape.
Pour simplifier la compréhension, tout le code a été basé sur des fonctions spécifiques. Le bloc de programme d’installation, des lignes et des fonctions décrites ci-dessus sont presque toutes dans le fichier :
MJRoBot_Arm_Robot_Task_Prgm.ino
Les fonctions plus générales comme la commande de lecture BT : void checkBTcmd () ; générateur de sons : void bip (broche int, int freq, longs ms) et debouncing : booléen debounce (int code pin) ; Ils sont conservés :
General_Functions.INO
Un fait important. Comme l’Arduino exécute les instructions basées sur une horloge de 16Mhz, il est prévu que les boutons de contrôle sont lus des centaines ou même des milliers de fois par seconde, c’est pourquoi il est important de faire un bouton « debouncing » qui définit l’étape de l’enregistrement.
Le quatrième et dernier fichier est :
Arm_Ctrl_and_Display.INO
Dans ce fichier sont les pots des fonctions de lecture : bool readPotenciometers () ; lecture de Android sliders : bool readSliders () ; mise en place des servos : void armPosition (int gripp, basee int, int épaule, coude int). Les autres fonctions incluses dans le fichier sont pour l’affichage des données sur l’écran LCD, alarmes, Serial Monitor, etc..
Le code source complet pour le projet se trouve sur GITHUB :
https://github.com/Mjrovai/MJRoBot-programmed-ARM
ou ici à ce instructable
La vidéo montre le bras du robot 4DOF « meArm » en cours de programmation à distance grâce à la l' application Android.