#define LED_VERDE 3 // LED verde collegato al pin digitale 3
#define LED_ROSSO 5 // LED rosso collegato al pin digitale 5
#define BUTTON 2 // Pulsante collegato al pin digitale 2
unsigned long tempoPremuto = 0; // Variabile per tenere traccia del tempo di pressione
unsigned long durataClicSingolo = 500; // Durata per il clic singolo (2 secondi)
unsigned long tempoDoppioClic = 500; // Tempo massimo per considerare un doppio clic (500 ms)
unsigned long tempoUltimaPressione = 50; // Tempo dell'ultima pressione
unsigned long tempoAccensioneLED = 50; // Tempo per spegnere il LED rosso (2 minuti)
bool ledRossoAcceso = false; // Flag per il LED rosso
bool ledVerdeAcceso = false; // Flag per il LED verde
bool primaPressione = false; // Flag per la prima pressione del pulsante
void setup() {
pinMode(LED_VERDE, OUTPUT); // Imposta il pin del LED verde come output
pinMode(LED_ROSSO, OUTPUT); // Imposta il pin del LED rosso come output
pinMode(BUTTON, INPUT); // Imposta il pin del pulsante come input
}
void loop() {
int statoPulsante = digitalRead(BUTTON); // Legge lo stato del pulsante
// Se il pulsante è premuto
if (statoPulsante == HIGH) {
// Se è la prima volta che il pulsante viene premuto, memorizza il tempo
if (tempoPremuto == 0) {
tempoPremuto = millis();
}
// Se è stato premuto per più di 2 secondi, accende il LED verde
if (millis() - tempoPremuto >= durataClicSingolo && !ledVerdeAcceso) {
digitalWrite(LED_VERDE, HIGH); // Accende il LED verde
ledVerdeAcceso = true; // Imposta il flag del LED verde
tempoPremuto = 0; // Reset tempo premuto
}
} else {
// Se il pulsante è rilasciato
if (tempoPremuto > 0 && millis() - tempoPremuto < durataClicSingolo && !primaPressione) {
// Se è una prima pressione corta (per un doppio clic)
primaPressione = true;
tempoUltimaPressione = millis(); // Memorizza il tempo dell'ultima pressione
}
// Gestisci il doppio clic
if (primaPressione && millis() - tempoUltimaPressione <= tempoDoppioClic) {
if (!ledRossoAcceso) {
digitalWrite(LED_ROSSO, HIGH); // Accende il LED rosso
ledRossoAcceso = true; // Imposta il flag del LED rosso
tempoAccensioneLED = millis(); // Memorizza il tempo di accensione del LED rosso
}
primaPressione = false; // Reset la prima pressione
}
// Se è passato più di 2 minuti, spegne il LED rosso
if (ledRossoAcceso && millis() - tempoAccensioneLED >= 120000) { // 120000 ms = 2 minuti
digitalWrite(LED_ROSSO, LOW); // Spegne il LED rosso
ledRossoAcceso = false; // Resetta il flag del LED rosso
}
// Se il pulsante è stato rilasciato e il LED verde è acceso per più di 2 secondi, spegnilo
if (ledVerdeAcceso && millis() - tempoPremuto >= durataClicSingolo) {
digitalWrite(LED_VERDE, LOW); // Spegne il LED verde
ledVerdeAcceso = false; // Resetta il flag del LED verde
}
tempoPremuto = 0; // Reset tempo premuto
}
}