Étape 12:18 Servo Code
https://github.com/nouyang/18-servo-hexapod/blob/master/pololu_aug17-2012.pde.
Explication :
Voir documentation sur http://www.pololu.com/docs/0J40/5.e
a. BYTE est un paramètre qui spécifie le point de départ (format) pour nous http://www.arduino.cc/en/Serial/Print
b. cible est un entier non négatif inférieur à 8192 (il peut être écrit en notation binaire contenant des chiffres 14 ou moins)
par exemple 6000, ou en binaire : 01011101110000
c. 0x7F est 01111111 en binaire, quel infini des zéros à gauche, donc « & » ing (opérateur AND) il masque tous les chiffres dans la cible (lorsque la cible est écrit en binaire) sauf les 7 derniers chiffres (seulement 1 et 1 == 1. toutes les autres combinaisons == 0)
01011101110000
& 00000001111111
= 00000001110000
opérateur de décalage vers la droite d., décale les sept derniers chiffres (numéros 7 à 13) dans la cible au large dans le vide et donc maintenant les sept derniers chiffres « nouveau » étaient à l’origine bits #0 à 6 (voir doc pololu codés par couleur). Masque avec 0x7F encore une fois, juste pour être sûr.
01011101110000, >> 7 à :
00000000101110, puis :
& 00000001111111
= 00000000101110
La principale différence avec le code par défaut est que j’ai tracé les valeurs de sorte que je pouvais stupidement port code d’arduino-"Servo.write ()" style - style de pololu-« settarget () »-.
void settarget (servo unsigned char, unsigned int target)
{
cible = carte (cible, 0, 180, 2400, 9500) ;
Mon code, vers le haut sur github, est également copié ci-dessous :
======================
#include < SoftwareSerial.h >
#define txPin 2
#define rxPin 3
#define TIBIA 25
#define retard 150
#define CW 70
#define CCW 105
#define jusqu'à 92
#define bas 125
// ~~~~~~~~~~~~~~~~~~~~ //
#define A_COX 1
#define A_FEM 2
#define A_TIB 3
#define B_COX 4
#define B_FEM 5
#define B_TIB 6
#define C_COX 7
#define C_FEM 8
#define C_TIB 9
#define D_COX 10
#define D_FEM 11
#define D_TIB 12
#define E_COX 13
#define E_FEM 14
#define E_TIB 15
#define F_COX 16
#define F_FEM 17
#define F_TIB 18
int numtimes = 3 ;
SoftwareSerial mySerial (rxPin, txPin) ;
void setup() / / exécuter une seule fois, au démarrage de l’esquisse
{
mySerial.begin(9600) ;
Delay(1000) ;
}
void loop()
{
pour (int i = 0; i < = 4; i ++) {}
walkfwd() ;
}
pour (int j = 0; j < = 4; j ++) {}
walkbwd() ;
}
pour (int k = 0; k < = 2; k ++) {}
turnleft() ;
}
pour (int l = 0; l < = 2; l ++) {}
Turnright() ;
}
}
void tibia() {}
SetTarget (A_TIB, TIBIA) ;
SetTarget (B_TIB, TIBIA) ;
SetTarget (C_TIB, TIBIA) ;
SetTarget (D_TIB, TIBIA) ;
SetTarget (E_TIB, TIBIA) ;
SetTarget (F_TIB, TIBIA) ;
}
// ~~~~~~~~~~fwd~~~~~~~~~~ //
void f1() {}
[COXA] changé
SetTarget (A_COX, CW) ;
SetTarget (C_COX, CW) ;
SetTarget (E_COX, CCW) ;
SetTarget (D_COX, CW) ;
SetTarget (F_COX, CW) ;
SetTarget (B_COX, CCW) ;
Delay(Delay) ;
}
void f2() {}
[Fémur] changé
SetTarget (A_FEM, en bas) ;
SetTarget (C_FEM, en bas) ;
SetTarget (E_FEM, en bas) ;
SetTarget (D_FEM, UP) ;
SetTarget (F_FEM, UP) ;
SetTarget (B_FEM, UP) ;
Delay(Delay) ;
}
void f3() {}
[COXA] changé
SetTarget (A_COX, CCW) ;
SetTarget (C_COX, CCW) ;
SetTarget (E_COX, CW) ;
SetTarget (D_COX, CCW) ;
SetTarget (F_COX, CCW) ;
SetTarget (B_COX, CW) ;
Delay(Delay) ;
}
void f4() {}
[Fémur] changé
SetTarget (A_FEM, UP) ;
SetTarget (C_FEM, UP) ;
SetTarget (E_FEM, UP) ;
SetTarget (D_FEM, en bas) ;
SetTarget (F_FEM, en bas) ;
SetTarget (B_FEM, en bas) ;
Delay(Delay) ;
}
// ~~~~~~~~~bwd~~~~~~~~~~~ //
void b1() {}
[COXA] changé
SetTarget (A_COX, CCW) ;
SetTarget (C_COX, CCW) ;
SetTarget (E_COX, CW) ;
SetTarget (D_COX, CCW) ;
SetTarget (F_COX, CCW) ;
SetTarget (B_COX, CW) ;
Delay(Delay) ;
}
void b2() {}
[Fémur] changé
SetTarget (A_FEM, en bas) ;
SetTarget (C_FEM, en bas) ;
SetTarget (E_FEM, en bas) ;
SetTarget (D_FEM, UP) ;
SetTarget (F_FEM, UP) ;
SetTarget (B_FEM, UP) ;
Delay(Delay) ;
}
void b3() {}
[COXA] changé
SetTarget (A_COX, CW) ;
SetTarget (C_COX, CW) ;
SetTarget (E_COX, CCW) ;
SetTarget (D_COX, CW) ;
SetTarget (F_COX, CW) ;
SetTarget (B_COX, CCW) ;
Delay(Delay) ;
}
void b4() {}
[Fémur] changé
SetTarget (A_FEM, UP) ;
SetTarget (C_FEM, UP) ;
SetTarget (E_FEM, UP) ;
SetTarget (D_FEM, en bas) ;
SetTarget (F_FEM, en bas) ;
SetTarget (B_FEM, en bas) ;
Delay(Delay) ;
}
// ~~~~~~~~~left~~~~~~~~~~~ //
void l1() {}
[COXA] changé
SetTarget (A_COX, CCW) ;
SetTarget (C_COX, CCW) ;
SetTarget (E_COX, CCW) ;
SetTarget (D_COX, CW) ;
SetTarget (F_COX, CW) ;
SetTarget (B_COX, CW) ;
Delay(Delay) ;
}
void l2() {}
[Fémur] changé
SetTarget (A_FEM, en bas) ;
SetTarget (C_FEM, en bas) ;
SetTarget (E_FEM, en bas) ;
SetTarget (D_FEM, UP) ;
SetTarget (F_FEM, UP) ;
SetTarget (B_FEM, UP) ;
Delay(Delay) ;
}
void l3() {}
[COXA] changé
SetTarget (A_COX, CW) ;
SetTarget (C_COX, CW) ;
SetTarget (E_COX, CW) ;
SetTarget (D_COX, CCW) ;
SetTarget (F_COX, CCW) ;
SetTarget (B_COX, CCW) ;
Delay(Delay) ;
}
void l4() {}
[Fémur] changé
SetTarget (A_FEM, UP) ;
SetTarget (C_FEM, UP) ;
SetTarget (E_FEM, UP) ;
SetTarget (D_FEM, en bas) ;
SetTarget (F_FEM, en bas) ;
SetTarget (B_FEM, en bas) ;
Delay(Delay) ;
}
// ~~~~~~~~~right~~~~~~~~~~~ //
void r1() {}
[COXA] changé
SetTarget (A_COX, CW) ;
SetTarget (C_COX, CW) ;
SetTarget (E_COX, CW) ;
SetTarget (D_COX, CCW) ;
SetTarget (F_COX, CCW) ;
SetTarget (B_COX, CCW) ;
Delay(Delay) ;
}
void r2() {}
[Fémur] changé
SetTarget (A_FEM, en bas) ;
SetTarget (C_FEM, en bas) ;
SetTarget (E_FEM, en bas) ;
SetTarget (D_FEM, UP) ;
SetTarget (F_FEM, UP) ;
SetTarget (B_FEM, UP) ;
Delay(Delay) ;
}
void r3() {}
[COXA] changé
SetTarget (A_COX, CCW) ;
SetTarget (C_COX, CCW) ;
SetTarget (E_COX, CCW) ;
SetTarget (D_COX, CW) ;
SetTarget (F_COX, CW) ;
SetTarget (B_COX, CW) ;
Delay(Delay) ;
}
void r4() {}
[Fémur] changé
SetTarget (A_FEM, UP) ;
SetTarget (C_FEM, UP) ;
SetTarget (E_FEM, UP) ;
SetTarget (D_FEM, en bas) ;
SetTarget (F_FEM, en bas) ;
SetTarget (B_FEM, en bas) ;
Delay(Delay) ;
}
// ~~~~~~~~~~~~~~~~~~~~ //
void walkbwd() {}
Tibia() ;
B1() ;
B2() ;
B3() ;
B4() ;
}
void walkfwd() {}
Tibia() ;
F1() ;
F2() ;
F3() ;
F4() ;
}
void turnleft() {}
Tibia() ;
L1() ;
L2() ;
L3() ;
L4() ;
}
void turnright() {}
Tibia() ;
R1() ;
R2() ;
R3() ;
R4() ;
}
// ~~~~~~~~~~~~~~~~~~~~ //
Envoyer une commande définir cible au Maestro.
Cible est en unités de microsecondes trimestre, alors que la normale se situe entre 4000 à 8000.
void settarget (servo unsigned char, unsigned int target)
{
cible = carte (cible, 0, 180, 2400, 9500) ;
mySerial.write(0xAA) ; commencer octets
mySerial.write(0x0C) ; id de périphérique
mySerial.write(0x04) ; Numéro de commande
mySerial.write(servo) ; nombre de servos
mySerial.write (cible & 0x7F) ;
mySerial.write ((cible >> 7) & 0x7F) ;
}