Étape 4: codage
La base de mon code est venu d’un autre instructable :
Mouvement après le Robot
J’ai surtout peaufiné pour inclure un autre servo et faites-le faire différents mouvements, comme l’autre servo effectue le mouvement de la tête. Je veux travailler avec lui à travailler avec un pan et tilt servo encore mais c’est plus loin sur la ligne.
CODE :
#include
Servo yservo ; Servo xservo ; //servos pour x et y
const int Lin = 10, Rin = 12, Lout = 11, déroute = 13, yserv = 9, xserv = 8 ; broches de réglage capteur et goupille de servo
créer des variables pour la durée / / et la distance entraîner de pouces de long, Rduration, Lduration, Rinches, part ;
int ythreshold = 24 ; Seuil du capteur en pouces
int xthreshold = 12 ; angle int = 80 ; Angle initial int xangle = 90 ;
int counter1 = 0 ; int counter2 = 0 ; booléenne droite = false ;
int maxcounter1 = 45 ; int maxcounter2 = 3 ;
booléenne debug = false ; Communication série pour le débogage. Valeur true pour communication série.
void setup() {/ / initialiser la communication série : si (débogage) {Serial.begin(9600);} yservo.attach(9) ; //attach servo à la broche 9 xservo.attach(8); / / fixer le servo à la broche 8}
void loop() {//Most du code de la sonde a été prise à partir de code de capteur pour le PING de David Mellis //I modifié pour un capteur de 4 broches comme oppsed du capteur à 3 broches / / donner une brève impulsion faible au préalable pour assurer une impulsion propre élevée : pinMode (déroute, OUTPUT); digitalWrite (déroute, faible); delayMicroseconds(2) ; delayMicroseconds(5) ; digitalWrite (déroute, élevé), digitalWrite (déroute, faible) ;
Rduration = pulseIn (Rin, élevé) ; pinMode (Lout, sortie) ; digitalWrite (Lout, faible) ; delayMicroseconds(2) ; digitalWrite (Lout, élevé) ; delayMicroseconds(5) ; digitalWrite (Lout, faible) ;
Lduration = pulseIn (Lin, élevée) ;
convertir l’heure dans un lointain Rinches = microsecondsToInches(Rduration) ; Part = microsecondsToInches(Lduration) ; Si (déboguer) {Serial.print ("gauche:") ; Serial.Print(linches) ; Serial.println ("en") ; Serial.Print ("droit:") ; Serial.Print(Rinches) ; Serial.println ("en") ; } follow() ; }
long microsecondsToInches (longs microsecondes) {/ / selon la fiche technique de la parallaxe pour le PING))), il y a / / 73,746 microsecondes par pouce (c'est-à-dire son voyage à 1130 pieds / / / seconde). Cela donne la distance parcourue par le ping, sortant / / et le retour, donc on divise par 2 pour obtenir la distance de l’obstacle. Voir : http://www.parallax.com/dl/docs/prod/acc/28015-PI... retour microsecondes / 74 / 2 ; }
void follow() {si (part < = ythreshold || Rinches < = ythreshold) {si (part + 2 < Rinches) {angle = angle - 2;} si (Rinches + 2 < part) {angle = angle + 2;}} si (angle > 160) {angle = 160;} si (angle < 0) {angle = 0;} yservo.write(angle) ;
/ * Si (part < = xthreshold || Rinches < = xthreshold) {si (part + 2 < Rinches) {xangle = xangle - 2;} si (Rinches + 2 < part) {xangle = xangle + 2;} si (xangle >} else {xangle = 90; * / if (part < = xthreshold || Rinches < = xthreshold) {si (counter1 == maxcounter1 || counter1 == 0) {counter2 ++; if (counter2 > = maxcounter2) {counter2 = 0; if(counter1 == maxcounter1) counter1--; else counter1 ++; droite =! droite;}} if(right) d’autre {xangle = xangle + 2; counter1--;} else {xangle = xangle-2; counter1 ++;}} xangle d’autre = 90 ;
xservo.Write(xangle) ; }