// Definizione dei pin
const int ldrPin = A0; // Pin analogico per il sensore LDR
const int pulsante1Pin = 2; // Pulsante per 2 minuti
const int pulsante2Pin = 3; // Pulsante per 15 minuti
const int uscitaPin = 13; // Uscita che sarà attivata (può essere un LED o altro)
// Variabili di temporizzazione
unsigned long tempoInizio = 0; // Tempo di inizio temporizzazione
unsigned long durata = 0; // Durata attuale (in millisecondi)
bool statoUscita = false; // Stato dell'uscita (accesa/spenta)
bool statoPulsante1 = false; // Stato del pulsante 1
bool statoPulsante2 = false; // Stato del pulsante 2
void setup() {
pinMode(ldrPin, INPUT); // Pin LDR
pinMode(pulsante1Pin, INPUT_PULLUP); // Pulsante per 2 minuti
pinMode(pulsante2Pin, INPUT_PULLUP); // Pulsante per 15 minuti
pinMode(uscitaPin, OUTPUT); // Pin di uscita (LED o altro)
Serial.begin(9600); // Per monitorare le informazioni sul monitor seriale
}
void loop() {
int valoreLDR = analogRead(ldrPin); // Legge il valore della LDR
unsigned long currentMillis = millis(); // Ottiene il tempo corrente in millisecondi
// Verifica se è buio (valore basso della LDR)
if (valoreLDR < 500) { // Soglia per rilevare buio (puoi regolarla in base al tuo sensore)
// Controlla lo stato del pulsante 1 (attiva per 2 minuti)
if (digitalRead(pulsante1Pin) == LOW) {
if (!statoPulsante1) {
durata = 120000; // 2 minuti in millisecondi
tempoInizio = currentMillis; // Inizia il timer
statoUscita = true; // Attiva l'uscita
digitalWrite(uscitaPin, HIGH); // Accende l'uscita
statoPulsante1 = true;
Serial.println("Timer attivato per 2 minuti.");
}
} else {
statoPulsante1 = false;
}
// Controlla lo stato del pulsante 2 (attiva per 15 minuti)
if (digitalRead(pulsante2Pin) == LOW) {
if (!statoPulsante2) {
durata = 900000; // 15 minuti in millisecondi
tempoInizio = currentMillis; // Inizia il timer
statoUscita = true; // Attiva l'uscita
digitalWrite(uscitaPin, HIGH); // Accende l'uscita
statoPulsante2 = true;
Serial.println("Timer attivato per 15 minuti.");
}
} else {
statoPulsante2 = false;
}
// Verifica se il tempo è scaduto
if (statoUscita && (currentMillis - tempoInizio >= durata)) {
digitalWrite(uscitaPin, LOW); // Spegne l'uscita
statoUscita = false; // Resetta lo stato dell'uscita
Serial.println("Timer scaduto, uscita spenta.");
}
} else {
// Se è luminoso, spegni l'uscita
digitalWrite(uscitaPin, LOW);
statoUscita = false; // Resetta lo stato dell'uscita
}
}