#include <Servo.h>
Servo myservo;
// Constante servant à stocker le numéro de broche sur laquelle est connectée notre LED
const int led_rouge_pin = 2;
const int led_verte_pin = 4;
const int led_bleu_pin = 3;
// Variable servant stocker le nombre de milliseconde s'étant écouler depuis
// le dernier changement d'état de la broche pilotant notre LED
long dernier_clignotement_rouge = 0;
long dernier_clignotement_verte = 0;
long dernier_clignotement_bleu = 0;
long temps_moteur=0;
// Pour faire clignoter notre LED à une fréquence de 1Hz nous devons avoir une période de 1s
int demi_periode_rouge = 1000/4;
int demi_periode_bleu = 1000;
int demi_periode_verte = 1000/6;
int periode_10_mot = 10;
int periode_7_mot = 7;
int temps_freq_mot=periode_10_mot;
int pos=0;
int dir=0;
void setup() {
// Nous initialisons notre communication série
Serial.begin(115200);
// Nous paramètrons la broche
pinMode(led_rouge_pin,OUTPUT);
pinMode(led_bleu_pin, OUTPUT);
pinMode(led_verte_pin, OUTPUT);
// On paramètre notre servomoteur
myservo.attach(9);
}
void loop() {
/*
Pour pouvoir faire clignoter notre LED, sans que cela bloque le déroulement de notre programme,
je vous propose cette solution :
si(temps_ecoulé_depuis_le_début_du_programme - temps_écoulé_depuis_le_début_du_programme_au_moment_du_dernier_changement_d-etat >= 1000/2){
on_change_l-état_de_notre_LED
on récupére et on stocke le temps écoulé depuis le début du programme
}
*/
if(millis() - dernier_clignotement_rouge >= demi_periode_rouge){
digitalWrite(led_rouge_pin,!digitalRead(led_rouge_pin));
dernier_clignotement_rouge = millis();
}
if(millis() - dernier_clignotement_verte >= demi_periode_verte){
digitalWrite(led_verte_pin,!digitalRead(led_verte_pin));
dernier_clignotement_verte = millis();
}
if(millis() - dernier_clignotement_bleu >= demi_periode_bleu){
digitalWrite(led_bleu_pin,!digitalRead(led_bleu_pin));
dernier_clignotement_bleu = millis();
}
if(millis() - temps_moteur >= temps_freq_mot){
if(pos<=180 and dir==0){
pos++;
if (pos==180){
dir=1;
temps_freq_mot=periode_7_mot;
}
}
else if (pos>=0 and dir==1){
pos--;
if (pos==0){
dir=0;
temps_freq_mot=periode_10_mot;
}
}
myservo.write(pos);
temps_moteur=millis();
}
}