Etape 9: P.3, Code : mise en œuvre de Communication série
Pour l’application de ce tutoriel, je vais supposer que vous avez choisi d’utiliser un Arduino avec la capacité de communication série sur USB (donc pas un Arduino Pro Mini ou nu puce Atmega) et que vous allez utiliser C, C++, ou un autre langage basés sur C tel que l’Objective-C (ce que nous faisions) du côté de l’ordinateur pour contrôler le bras. Je suppose également que vous utilisez un système d’exploitation basé sur UNIX tels que OSX (ce que nous faisions) ou linux. Le code pour l’envoi de série transmissions est différente sous windows - vous pouvez toujours suivre avec le reste de ce didacticiel, mais vous devrez apporter des modifications à quelques lignes de code (je parle de popen et pclose, qui ne fonctionnent pas sur windows autant que je sache - je peux me tromper).
L’objectif de votre progiciel ensemble consistera à déterminer un ensemble de coordonnées et les États de la pince (principalement, on ou off) pour le bras pour faire défiler à choisir et placer les objets sur la planche, puis d’envoyer ces coordonnées comme un flot de servo angles à l’Arduino, qui se traduira cette information en impulsions PWM servo. Parce que les emplacements de tous les objets sont connus avant la compétition, les emplacements seront codées en dur, avec la possibilité d’ajuster légèrement pendant les trois minutes pour tenir compte de légères variations dans le plateau de jeu.
Nous allons donc commencer !
La première tâche consiste à écrire du code base qui acceptent les entrées d’utilisateur de la console et envoyez-le à l’Arduino. Le microcontrôleur répondra alors de régler l’angle d’un servo à l’entrée d’utilisateur. Erreur de vérification de l’entrée d’utilisateur n’est pas nécessaire à ce stade puisqu’on peut supposer qu’en fin de compte, les emplacements d’angle servo codées en dur aura pas des erreurs, et que n’importe quel utilisateur d’entrée se fera à travers une interface graphique qui ne souffre d’erreurs si l’utilisateur moûts sur des touches au hasard dans la console... parce qu’il ne sera pas être une console.
Dans C, popen est utilisée pour accéder aux commandes du système, beaucoup comme on le ferait à l’aide de la ligne de commande. Envoi de données à l’Arduino, quelque chose comme ça se présente du côté de l’ordinateur (en Objective-C) :
.. .dans le fichier .h :
(dans la déclaration)
NSString * serialPort ;
.. .dans le fichier ".m" :
(dans la méthode init)
serialPort = [[NSString alloc] initWithString :
... un code...
(dans la méthode de transmission)
NSString * str = [NSString stringWithFormat: % @ > % toBeSent, serialPort] ;
char * toSend = [str UTF8String] ;
FICHIER * sender = popen (toSend, « r ») ;
pclose(sender) ;
Ces lignes de code qu’il transmettra la chaîne toBeSent à l’Arduino sur port série /dev/tty.usbmodemfd121.
Pour trouver le port série auquel votre Arduino est assis sur, tout ce que vous devez faire est brancher en et regardez le nom qui s’affiche sous Outils > Serial Port dans l’outil de code Arduino. Vous voudrez vous assurer que vous branchez votre Arduino dans le même port USB pour que cela reste la même.
La tâche de récupérer l’entrée numérique de la console et l’envoi par le biais de série est laissé au lecteur... sauf si vous voulez tricher en prenant un coup d’oeil à l’exemple de code, j’ai inclus. Si vous générez et exécutez avec Xcode et tapez dans nombres compris entre 0 et 176 (les limites du servo particulier avec que nous testions), il devrait donner le même rendement que la photo en haut :
SH : /dev/tty.usbmodemfd121 : autorisation refusée
Qui ne semble pas bon ! Il, cependant, nous apprend que la commande echo est appelée avec succès, mais qu’il n’y a aucun "/ dev/tty.usbmodemfd121". Pour résoudre ce problème, il faut connecter un Arduino.