Pololu Zumo Guide Utilisateur page 55

Table des Matières

Publicité

{
// La broche est au niveau haut depuis assez longtemps
// donc on applique la flan descendant.
digitalWrite(SERVO_PIN, LOW);
servoHigh
=
false;
interruptCount
=
0;
}
}
else
{
// La broche du servo est au niveau bas (low).
if(servoTime
>=
40000)
{
// Nous avons atteind la fin de la période (20 ms),
// Donc on applique un flan montant (rising edge) sur
// le signal.
highTimeCopy
=
servoHighTime;
digitalWrite(SERVO_PIN, HIGH);
servoHigh
=
true;
servoTime
=
0;
interruptCount
=
0;
OCR2A
=
((highTimeCopy
%
256)
}
}
}
void
servoInit()
{
digitalWrite(SERVO_PIN, LOW);
pinMode(SERVO_PIN, OUTPUT);
// Passe en mode CTC. Le Timer 2 comptera jusqu'à OCR2A,
// puis se réinitialise à 0 et provoque une interruption.
TCCR2A
= (1 <<
WGM21);
// Initialiser le pre-scaler sur 1:8 . ce qui offre une
// résolution de 0.5us.
TCCR2B
= (1 <<
CS21);
// Mettre le timer dans le bon état par défaut.
TCNT2
=
0;
OCR2A
=
255;
TIMSK2
|= (1 <<
OCIE2A);
// Activer le "timer compare interrupt".
// Activer les interruptions.
sei();
}
void servoSetPosition(uint16_t
highTimeMicroseconds)
{
// Désactiver le "timer compare interrupt"
TIMSK2
&= ~(1 <<
OCIE2A);
servoHighTime
=
highTimeMicroseconds
TIMSK2
|= (1 <<
OCIE2A);
// Activer le "timer compare interrupt"
}
+ 256)/2 -
1;
*
2;

Publicité

Table des Matières
loading

Table des Matières