Paso 12:18 código de Servo
https://github.com/nouyang/18-servo-hexapod/blob/master/pololu_aug17-2012.pde.
Explicación:
Consulte documentación en http://www.pololu.com/docs/0J40/5.e
a. BYTE es un parámetro que pecifies la base (formato) nos http://www.arduino.cc/en/Serial/Print
b. es un entero no negativo menos de 8192 (puede escribirse en notación binaria con dígitos de 14 o menos)
por ejemplo, 6000, o en binario: 01011101110000
c. 0x7F es 01111111 en binario, que infinito ceros a la izquierda, así que ing "y" (AND bit a bit) enmascara hacia fuera todos los dígitos en blanco (cuando el destino está escrito en binario) excepto los últimos 7 dígitos (sólo 1 y 1 == 1. todas las demás combinaciones == 0)
01011101110000
& 00000001111111
= 00000001110000
operador de cambio derecha d., cambios últimos siete dígitos (números 7 a 13) en blanco apagado en espacio vacío y ahora los últimos siete dígitos "nuevos" eran originalmente pedacitos #0 a 6 (véase a chip colores doc). Mascarilla 0x7F otra vez, sólo para asegurarse.
01011101110000, >> 7 a:
00000000101110, entonces:
& 00000001111111
= 00000000101110
La diferencia principal con el código por defecto es que asignan los valores para que sin pensar podía portar código de arduino-"Servo.write ()" - estilo a pololu-"settarget ()"-.
void settarget (servo unsigned char, unsigned int destino)
{
objetivo = mapa (destino, 0, 180, 2400, 9500);
Mi código, hasta en github, también se copian a continuación:
======================
#include < SoftwareSerial.h >
#define txPin 2
#define rxPin 3
#define TIBIA 25
#define retraso 150
#define CW 70
#define CCW 105
#define hasta 92
#define abajo 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;
MySerial SoftwareSerial (rxPin, txPin);
void setup() / / ejecuta una vez, cuando comienza el bosquejo
{
mySerial.begin(9600);
Delay(1000);
}
void loop()
{
para (int i = 0; i < = 4; i ++) {}
walkfwd();
}
para (int j = 0; j < = 4; j ++) {}
walkbwd();
}
para (int k = 0; k < = 2; k ++) {}
turnleft();
}
para (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() {}
[Cadera] cambiado
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] cambiado
setTarget (A_FEM, abajo);
setTarget (C_FEM, abajo);
setTarget (E_FEM, abajo);
setTarget (D_FEM, arriba);
setTarget (F_FEM, arriba);
setTarget (B_FEM, arriba);
Delay(Delay);
}
void f3() {}
[Cadera] cambiado
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] cambiado
setTarget (A_FEM, arriba);
setTarget (C_FEM, arriba);
setTarget (E_FEM, arriba);
setTarget (D_FEM, abajo);
setTarget (F_FEM, abajo);
setTarget (B_FEM, abajo);
Delay(Delay);
}
// ~~~~~~~~~bwd~~~~~~~~~~~ //
void b1() {}
[Cadera] cambiado
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] cambiado
setTarget (A_FEM, abajo);
setTarget (C_FEM, abajo);
setTarget (E_FEM, abajo);
setTarget (D_FEM, arriba);
setTarget (F_FEM, arriba);
setTarget (B_FEM, arriba);
Delay(Delay);
}
void b3() {}
[Cadera] cambiado
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] cambiado
setTarget (A_FEM, arriba);
setTarget (C_FEM, arriba);
setTarget (E_FEM, arriba);
setTarget (D_FEM, abajo);
setTarget (F_FEM, abajo);
setTarget (B_FEM, abajo);
Delay(Delay);
}
// ~~~~~~~~~left~~~~~~~~~~~ //
void l1() {}
[Cadera] cambiado
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] cambiado
setTarget (A_FEM, abajo);
setTarget (C_FEM, abajo);
setTarget (E_FEM, abajo);
setTarget (D_FEM, arriba);
setTarget (F_FEM, arriba);
setTarget (B_FEM, arriba);
Delay(Delay);
}
void l3() {}
[Cadera] cambiado
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] cambiado
setTarget (A_FEM, arriba);
setTarget (C_FEM, arriba);
setTarget (E_FEM, arriba);
setTarget (D_FEM, abajo);
setTarget (F_FEM, abajo);
setTarget (B_FEM, abajo);
Delay(Delay);
}
// ~~~~~~~~~right~~~~~~~~~~~ //
void r1() {}
[Cadera] cambiado
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] cambiado
setTarget (A_FEM, abajo);
setTarget (C_FEM, abajo);
setTarget (E_FEM, abajo);
setTarget (D_FEM, arriba);
setTarget (F_FEM, arriba);
setTarget (B_FEM, arriba);
Delay(Delay);
}
void r3() {}
[Cadera] cambiado
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] cambiado
setTarget (A_FEM, arriba);
setTarget (C_FEM, arriba);
setTarget (E_FEM, arriba);
setTarget (D_FEM, abajo);
setTarget (F_FEM, abajo);
setTarget (B_FEM, abajo);
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();
}
// ~~~~~~~~~~~~~~~~~~~~ //
Enviar un comando de destino establece al Maestro.
Blanco está en unidades de microsegundos de cuarto, por lo que el rango normal es de 4000 a 8000.
void settarget (servo unsigned char, unsigned int destino)
{
objetivo = mapa (destino, 0, 180, 2400, 9500);
mySerial.write(0xAA); Inicio bytes
mySerial.write(0x0C); id de dispositivo
mySerial.write(0x04); número de comando
mySerial.write(servo); número de servo
mySerial.write (destino & 0x7F);
mySerial.write ((blanco >> 7) & 0x7F);
}