Stap 12:18 Servo Code
https://github.com/nouyang/18-servo-hexapod/blob/master/pololu_aug17-2012.pde.
Uitleg:
Zie documentatie op http://www.pololu.com/docs/0J40/5.e
a. BYTE is een parameter die aanduidt van de base (formaat) naar ons http://www.arduino.cc/en/Serial/Print
b. doel is een niet-negatief geheel getal minder dan 8192 (het kan worden geschreven in binaire notatie met 14 of minder cijfers)
bijvoorbeeld 6000, of binair: 01011101110000
c. 0x7F is 01111111 in binary, welke oneindig naar links, dus nullen "&" ing (bitsgewijze AND) het maskers uit alle cijfers in doel (als doel wordt geschreven in binaire) met uitzondering van de laatste 7 cijfers (alleen 1 en 1 == 1. alle andere combinaties == 0)
01011101110000
& 00000001111111
= 00000001110000
d. rechts exploitant, laatste zeven cijfers (nummers 7 t/m 13) doel van verschuivingen in de lege ruimte en dus nu de "nieuwe" laatste zeven cijfers werden oorspronkelijk bits #0 tot en met 6 (Zie kleurgecodeerde pololu doc). Masker met 0x7F weer, gewoon om zeker te zijn.
01011101110000, >> 7 te:
00000000101110, vervolgens:
& 00000001111111
= 00000000101110
Het belangrijkste verschil met de standaardcode is dat ik de waarden toegewezen, zodat ik kon gedachteloos poort kode arduino-"Servo.write ()" - stijl pololu-"settarget ()" - stijl.
VOID settarget (unsigned char servo, unsigned int doel)
{
doelstelling = kaart (doel, 0, 180, 2400, 9500);
Mijn code, omhoog op github, wordt ook gekopieerd hieronder:
======================
#include < SoftwareSerial.h >
#define txPin 2
#define rxPin 3
#define TIBIA 25
#define vertraging 150
#define CW 70
#define CCW 105
#define van 92
#define neer 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 / / run eenmaal in, wanneer de schets wordt gestart
{
mySerial.begin(9600);
delay(1000);
}
void loop
{
for (int i = 0; ik < = 4; i ++) {}
walkfwd();
}
for (int j = 0; j < = 4; j ++) {}
walkbwd();
}
voor (int k = 0; k < = 2; k ++) {}
turnleft();
}
voor (int l = 0; l < = 2; l ++) {}
turnright();
}
}
ongeldig 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~~~~~~~~~~ //
ongeldig f1() {}
[COXA] gewijzigd
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);
}
ongeldig f2() {}
[DIJBEEN] gewijzigd
settarget (A_FEM, DOWN);
settarget (C_FEM, DOWN);
settarget (E_FEM, DOWN);
settarget (D_FEM, UP);
settarget (F_FEM, UP);
settarget (B_FEM, UP);
delay(delay);
}
ongeldig f3() {}
[COXA] gewijzigd
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);
}
ongeldig f4() {}
[DIJBEEN] gewijzigd
settarget (A_FEM, UP);
settarget (C_FEM, UP);
settarget (E_FEM, UP);
settarget (D_FEM, DOWN);
settarget (F_FEM, DOWN);
settarget (B_FEM, DOWN);
delay(delay);
}
// ~~~~~~~~~bwd~~~~~~~~~~~ //
ongeldig b1() {}
[COXA] gewijzigd
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);
}
ongeldig b2() {}
[DIJBEEN] gewijzigd
settarget (A_FEM, DOWN);
settarget (C_FEM, DOWN);
settarget (E_FEM, DOWN);
settarget (D_FEM, UP);
settarget (F_FEM, UP);
settarget (B_FEM, UP);
delay(delay);
}
ongeldig b3() {}
[COXA] gewijzigd
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);
}
ongeldig b4() {}
[DIJBEEN] gewijzigd
settarget (A_FEM, UP);
settarget (C_FEM, UP);
settarget (E_FEM, UP);
settarget (D_FEM, DOWN);
settarget (F_FEM, DOWN);
settarget (B_FEM, DOWN);
delay(delay);
}
// ~~~~~~~~~left~~~~~~~~~~~ //
ongeldig l1() {}
[COXA] gewijzigd
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);
}
ongeldig l2() {}
[DIJBEEN] gewijzigd
settarget (A_FEM, DOWN);
settarget (C_FEM, DOWN);
settarget (E_FEM, DOWN);
settarget (D_FEM, UP);
settarget (F_FEM, UP);
settarget (B_FEM, UP);
delay(delay);
}
ongeldig l3() {}
[COXA] gewijzigd
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);
}
ongeldig l4() {}
[DIJBEEN] gewijzigd
settarget (A_FEM, UP);
settarget (C_FEM, UP);
settarget (E_FEM, UP);
settarget (D_FEM, DOWN);
settarget (F_FEM, DOWN);
settarget (B_FEM, DOWN);
delay(delay);
}
// ~~~~~~~~~right~~~~~~~~~~~ //
ongeldig r1() {}
[COXA] gewijzigd
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);
}
ongeldig r2() {}
[DIJBEEN] gewijzigd
settarget (A_FEM, DOWN);
settarget (C_FEM, DOWN);
settarget (E_FEM, DOWN);
settarget (D_FEM, UP);
settarget (F_FEM, UP);
settarget (B_FEM, UP);
delay(delay);
}
ongeldig r3() {}
[COXA] gewijzigd
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);
}
ongeldig r4() {}
[DIJBEEN] gewijzigd
settarget (A_FEM, UP);
settarget (C_FEM, UP);
settarget (E_FEM, UP);
settarget (D_FEM, DOWN);
settarget (F_FEM, DOWN);
settarget (B_FEM, DOWN);
delay(delay);
}
// ~~~~~~~~~~~~~~~~~~~~ //
ongeldig walkbwd() {}
Tibia();
B1();
B2();
B3();
B4();
}
ongeldig walkfwd() {}
Tibia();
F1();
F2();
F3();
F4();
}
ongeldig turnleft() {}
Tibia();
L1();
L2();
L3();
L4();
}
ongeldig turnright() {}
Tibia();
R1();
R2();
R3();
R4();
}
// ~~~~~~~~~~~~~~~~~~~~ //
Een doel instellen opdracht verzenden de Maestro.
Doel is in eenheden van kwartaal microseconden, zodat het normale bereik 4000 tot 8000 is.
VOID settarget (unsigned char servo, unsigned int doel)
{
doelstelling = kaart (doel, 0, 180, 2400, 9500);
mySerial.write(0xAA); Start byte
mySerial.write(0x0C); apparaat-id
mySerial.write(0x04); commando nummer
mySerial.write(servo); Servo-nummer
mySerial.write (doel & 0x7F);
mySerial.write ((target >> 7) & 0x7F);
}