#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int motionSensorPin = 13; // capteur de mouvement
const int lightSensorPin = A1; // capteur de lumière
const int temperatureSensorPin = A0; // capteur de température
const int buzzerPin = 10; // buzzer
const int switchPin = 2; // switch
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD, 16 colonnes, 2 lignes
bool alarmActive = true; // État initial de l'alarme (activée)
void setup() {
pinMode(motionSensorPin, INPUT);
pinMode(lightSensorPin, INPUT);
pinMode(temperatureSensorPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(switchPin, INPUT_PULLUP); // Activation de la résistance de tirage interne
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Activation !");
delay(2000);
lcd.clear();
Serial.begin(9600);
}
void loop() {
int motionState = digitalRead(motionSensorPin);
float lightValue = (1023-(analogRead(lightSensorPin)))/130; //calibrage des sensor
float lightLux = map(lightValue, 0, 1023, 0.1, 100000);
float temperatureValue = 1023-(analogRead(temperatureSensorPin));
float temperatureCelsius = map(temperatureValue, 0, 1023, -24, 80);
Serial.print("État du capteur de mouvement : "); //information pour debogage
Serial.println(motionState);
Serial.print("Luminosité : ");
Serial.println(lightLux);
Serial.print("Température : ");
Serial.println(temperatureCelsius);
// Vérification de l'état du slide switch
bool switchState = digitalRead(switchPin);
// Si l'interrupteur est en position activée
if (switchState == HIGH) {
alarmActive = true; // Activer l'alarme
} else {
alarmActive = false; // Désactiver l'alarme
noTone(buzzerPin); // Arrêter le son
lcd.clear(); // Effacer l'affichage
}
// Si l'alarme est activée, vérifier les capteurs
if (alarmActive) {
// Vérification du mouvement
if (motionState == HIGH) {
// Mouvement détecté, activer le buzzer et afficher "attention" sur le LCD
activateAlarm();
}
// Vérification de la lumière
if (lightLux > 500) {
// Luminosité élevée, activer le buzzer et afficher "attention" sur le LCD
activateAlarm();
}
// Vérification de la température
if (temperatureCelsius < 3) {
// Température trop basse, activer le buzzer et afficher "attention" sur le LCD
activateAlarm();
}
}
delay(1000); // Attente d'une seconde entre chaque lecture
}
void activateAlarm() {
tone(buzzerPin, 500); // Émet un son à une fréquence de 500 Hz
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Attention !");
delay(1000);
lcd.clear();
noTone(buzzerPin); // Arrête le son
}