//-------------------------------------------------------------
// SERVO MOTEUR QUI TOURNE PENDANT 2S AVEC BUZZER ET MODULE RTC
//-------------------------------------------------------------
// MODIFIER LES HEURES D'ACTIVATION A LA LIGNE 23 ET 24
#include <Servo.h>
#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc;
Servo myServo;
const int buzzerPin = 8;
const int actionDelay = 1000;
// Fréquences des notes (en Hz)
const int NOTE_C5 = 523;
const int NOTE_E5 = 659;
const int NOTE_G5 = 784;
const int NOTE_C6 = 1047;
const int activationHours[] = {23, 22, 21};
const int activationMinutes[] = {31, 31, 31};
int lastActivatedMinute = -1; // Variable pour éviter plusieurs activations dans la même minute
void playSchoolBellMelody() {
Serial.println("Playing melody...");
tone(buzzerPin, NOTE_C5, 300);
delay(300);
tone(buzzerPin, NOTE_E5, 300);
delay(300);
tone(buzzerPin, NOTE_G5, 300);
delay(300);
tone(buzzerPin, NOTE_C6, 600);
delay(600);
noTone(buzzerPin);
}
bool isActivationTime(int currentHour, int currentMinute) {
for (int i = 0; i < sizeof(activationHours) / sizeof(activationHours[0]); i++) {
if (currentHour == activationHours[i] && currentMinute == activationMinutes[i]) {
return true;
}
}
return false;
}
void setup() {
Serial.begin(9600);
myServo.attach(9);
myServo.write(90);
pinMode(buzzerPin, OUTPUT);
// Initialiser le RTC
if (!rtc.begin()) {
Serial.println("RTC non détecté !");
while (1); // Bloquer le programme
}
if (rtc.lostPower()) {
Serial.println("RTC a perdu l'heure, configuration en cours...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Configurer avec l'heure de la compilation
}
Serial.println("Setup terminé !");
}
void loop() {
DateTime now = rtc.now();
// Afficher l'heure actuelle
Serial.print("Heure actuelle : ");
Serial.print(now.hour());
Serial.print(":");
Serial.println(now.minute());
if (isActivationTime(now.hour(), now.minute())) {
if (lastActivatedMinute != now.minute()) {
Serial.println("Activation détectée !");
playSchoolBellMelody();
myServo.write(45);
delay(actionDelay);
myServo.write(90);
lastActivatedMinute = now.minute();
}
}
delay(1000);
}