92 lines
2.3 KiB
C++
Executable File
92 lines
2.3 KiB
C++
Executable File
/*
|
|
* Commande d'un servo moteur en plusieurs séquences.
|
|
* Clignotement de la Led onBoar:
|
|
* - rapide en début de programme.
|
|
* - lente en entre les séquences.
|
|
* - fixe en fin de programme
|
|
*
|
|
* Commande servo à l'aide de servo.h et
|
|
* seulement sur les pin 9 ou pin 10.
|
|
*
|
|
*/
|
|
#include <Servo.h>
|
|
|
|
Servo monServo;
|
|
int pos = 0;
|
|
|
|
const int pinLed = 13; // Led sur le board
|
|
const long blinkTimeMs = 2000; // temps de clignotement de la led (2 sec)
|
|
|
|
const int FAST = 50; // interval entre deux clignotement (rapide)
|
|
const int SLOW = 150; // interval entre deux clignotement (lent)
|
|
const int FIXED = -1; // valeur spécial pour éclairage continu
|
|
|
|
void setup(){
|
|
pinMode( pinLed, OUTPUT );
|
|
// Attacher la pin 9 à l'objet servo.
|
|
// ATTN: le code initialise l'angle à 90 degrés par défaut.
|
|
monServo.attach(9);
|
|
// remettre l'angle à 0 degrés
|
|
monServo.write( 0 );
|
|
|
|
}
|
|
|
|
void loop(){
|
|
// Faire clignoter led 13 sur le board.
|
|
// Démarrage de séquence --> clignotement rapide
|
|
blinkBoardLed( FAST );
|
|
|
|
// Passer de 0 a 180° par angle de 10 degré
|
|
for( int iAngle=0; iAngle<= 360; iAngle+=10 )
|
|
{
|
|
monServo.write(iAngle);
|
|
delay( 250 );
|
|
}
|
|
|
|
// Clignotement lent entre deux séquences
|
|
blinkBoardLed( SLOW );
|
|
|
|
// Angle décroissant progressif
|
|
for( int iAngle = 360; iAngle>=0; iAngle-- )
|
|
{
|
|
monServo.write( iAngle );
|
|
delay( 10 );
|
|
}
|
|
|
|
// Clignotement lent entre deux séquences
|
|
blinkBoardLed( SLOW );
|
|
|
|
// Angle arbitraire de 45 degrés
|
|
monServo.write( 0 );
|
|
|
|
// Find de séquence -> eclairage fixe
|
|
blinkBoardLed( FIXED );
|
|
}
|
|
|
|
/* Fait clignoter la led 13 sur le board pendant 2 secondes
|
|
*
|
|
* interval: Interval de clignotement. -1 pour fixe.
|
|
*/
|
|
void blinkBoardLed( int interval ){
|
|
long startMillis = millis();
|
|
// temps que pas 2 sec d'écoulée
|
|
while( (millis() - startMillis) < blinkTimeMs ) {
|
|
|
|
switch( interval ){
|
|
case -1 : // Cas spécial, allumage fixe
|
|
digitalWrite( pinLed, HIGH );
|
|
delay( blinkTimeMs ); // attendre le temps total
|
|
digitalWrite( pinLed, LOW );
|
|
break;
|
|
default:
|
|
// faire clignoter
|
|
digitalWrite( pinLed, HIGH );
|
|
delay( interval );
|
|
digitalWrite( pinLed, LOW );
|
|
delay( interval );
|
|
|
|
} // eof Case
|
|
|
|
} // eof While
|
|
}
|