1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| /*
Commande de servo-moteur par impulsion
Le servo est connecté au pin 8 de l'arduino
*/
int periode=20;// période entre chaque début d'impulsion en microsecondes
int pinServo=8; // variable pour le pin connecté à la commande du servo
void setup() {
pinMode(pinServo,OUTPUT);// on prépare le pin en mode OUTPUT
digitalWrite(pinServo,LOW); // on l'initialise à l'état bas
}
//boucle principale
void loop() {
for (int angle=0;angle<=180;angle+=20){//on fait varier l'angle de 0 à 180° par tranche de 20°
setAngle(angle);// on appelle la fonction setAngle définie plus bas
}
}
//fonction setAngle pour envoyer les impulsions
void setAngle(int a){
int duree=map(a,0,179,1000,2000);// on transforme l'angle en microsecondes et on stocke dans la variable duree
int duree_back=map(a,0,179,2000,1000);// on transforme l'angle en microsecondes et on stocke dans la variable duree
digitalWrite(pinServo,LOW);//on met le pin à l'état bas
// la boucle qui suit est nécessaire
// pour laisser le temps au servo d'aller à sa position
for (int t=0;t<25;t++){
digitalWrite(pinServo,HIGH);// on envoie l'impulsion
delayMicroseconds(duree); // pendant la bonne durée
digitalWrite(pinServo,LOW); // on stoppe l'impulsion
delay(periode-(duree*0.001)); // on attend le temps restant pour atteindre la période
}
for (int t=0;t<25;t++){
digitalWrite(pinServo,HIGH);// on envoie l'impulsion
delayMicroseconds(duree_back); // pendant la bonne durée
digitalWrite(pinServo,LOW); // on stoppe l'impulsion
delay(periode-(duree_back*0.001)); // on attend le temps restant pour atteindre la période
}
} |
Partager