Etape 10 : P.3, Code : parler à un Servo
Commencer la communication série en fonction setup() de l’Arduino à débit en bauds 9600 (bits par seconde) :
Serial.Begin(9600) ;
Habituellement, j’imprime un message à la fin de la fonction setup() pour confirmer que l’Arduino est fonctionnel et prêt à commencer l’entrée série :
Serial.println ("je travaille!") ;
Maintenant, dans la boucle principale, nous voulons attendre jusqu'à ce que 3 caractères (octets) ont été reçues, la fonction Serial.available() nous indique combien d’octets est dans la mémoire tampon, donc nous interroger il jusqu'à ce que la valeur atteint 3 :
Si (Serial.available() == 3) {}
... un code...
}
Pour lire les octets de la mémoire tampon, nous utilisons Serial.read(), qui efface également l’octet lu hors de la mémoire tampon. Puisque nous recevons 3 octets, cela signifie 3 appels à Serial.read(). Chaque octet représente un chiffre codée en ASCII. Jetez un oeil à ce site Web : http://www.asciitable.com/
Remarquez quoi que ce soit sur l’endroit où 0, 1, 2... sont ? C’est vrai ! Ils commencent à 48, 49, 50... ! Cela signifie que vous devez soustraire 48 de la valeur ASCII pour obtenir le chiffre transmis. (Nous remercier pour cela, parce que nous avons laissé bouche bée pendant environ une journée, jusqu'à ce que scolton l’a expliqué)
Est de la mémoire tampon FIFO (premier entré premier sorti), donc nous avons lu des centaines chiffres tout d’abord, les dizaines seconde et ceux derniers (l’ordre où ils ont été transmis) :
angle = (Serial.read() - 48) * 100 ;
angle += (Serial.read() - 48) * 10 ;
angle += (Serial.read() - 48) ;
Maintenant, nous voulons écrire cet angle à un servo - importer la bibliothèque de servo :
#include < Servo.h >
Déclarez un objet servo avant la méthode d’installation (c’est également où vous déclarez l’angle, qui doit être un entier, ou un volatile bref si vous êtes pédants = P) :
Servo myServo ;
Enfin, écrire l’angle reçu à l’intérieur de l’instruction Serial.available() -if :
myServo.write(angle) ;
Si vous suivi le long de la dernière étape (ou compilé l’exemple), vous devriez avoir un contrôleur de servo sur console prêt à partir !
Voici une vidéo de nous tester l’ensemble du système. Le champ d’application surveille le signaux PWM de servo, Tim est entrée de nombres compris entre 0 et 176 sur console du Mac et l’Arduino est réglage de l’angle d’un servo :
Description de la vidéo YouTube :
« Un outil de ligne de commande écrit en Objective-C pour contrôler la position d’un moteur d’asservissement en utilisant l’interface série et un Arduino Mega 2560 - la première étape de mon projet de bras robotisé ».
J’ai joint une copie du code Arduino côté afin de pouvoir tester l’émetteur et le récepteur. Le matériel est assez simple, connectez d’un servo signal à la broche de la Arduino Mega 50 (vous pouvez changer cela), branchez la broche de terre à la terre de l’Arduino et + terrestre de 5V à une alimentation externe avec, son sol également reliée à l’Arduino. Il est impératif d’utiliser une alimentation externe car les courants dessinés par un servo peuvent causer l’Arduino à une baisse de tension ou un comportement erratique.