Étape 6: Étape finale
Nous avons combiné le servo code et code de l’accéléromètre. Des valeurs, nous avons trouvé plus tôt, que nous avons ajouté à du code pour rendre les moteurs tourner à la valeur correcte.Les valeurs ne sont pas très précis. Nous avons eu du mal à cerner une valeur exacte, il n’est pas encore un ensemble parfait des « oreilles » car elle ne transformer chaque fois que nous passons nos têtes.
Code final :
===================================================
#include < Servo.h >
int i ;
const int XPSous = 0 ;
const int yPin = 1 ;
const int zPin = 2 ;
minVal int = 265 ;
maxVal int = 402 ;
double x ;
double y ;
double z ;
Servo myservoLeft ;
la routine d’installation s’exécute une fois que lorsque vous appuyez sur reset :
void setup() {}
Serial.Begin(9600) ;
myservoLeft.attach(9) ;
}
la routine de la boucle s’exécute maintes et maintes fois pour toujours :
void loop() {}
int xRead = analogRead(xPin) ;
int yRead = analogRead(yPin) ;
int zRead = analogRead(zPin) ;
convertir des valeurs lues à degrés -90 à 90 - nécessaires pour atan2
xAng int = carte (xRead, minVal, maxVal, -90, 90) ;
yAng int = carte (yRead, minVal, maxVal, -90, 90) ;
zAng int = carte (zRead, minVal, maxVal, -90, 90) ;
Caculate 360deg valeurs comme suit : atan2 (-yAng, zAng-)
atan2 affiche la valeur de π - π (radians)
Nous sommes puis en convertissant les radians en degrés
x = RAD_TO_DEG * (atan2 (-yAng, - zAng) + PI) ;
y = RAD_TO_DEG * (atan2 (-xAng, - zAng) + PI) ;
z = RAD_TO_DEG * (atan2 (-yAng, - xAng) + PI) ;
Serial.Print ("x:") ;
Serial.Print(x) ;
Serial.Print("| y: ");
Serial.Print(y) ;
Serial.Print("| z: ");
Serial.println(z) ;
Delay(100) ;
Si (z > = 76) {//right
Delay(100) ;
pour (i = 0; i < 90 ; j’ai += 10)
{
myservoLeft.write(i) ;
Delay(100) ;
}
pour (i = 90 ; j’ai > 0; i-= 10)
{
myservoLeft.write(i) ;
Delay(100) ;
}
}
Si ((z > = 50) & & (z < = 75)) {//middle
myservoLeft.write(60) ;
Delay(100) ;
}
Si (z < = 49) {//left
Delay(100) ;
pour (i = 90 ; j’ai 180 <; i += 10)
{
myservoLeft.write(i) ;
Delay(100) ;
}
pour (i = 180 ; j’ai 90 >; i-= 10)
{
myservoLeft.write(i) ;
Delay(100) ;
}
}
}
===================================================
C’est fait !