unsigned long pulseState = 0xAAAAAAAA; //Inizializza variabile pulseState a 0xAAAAAAAA (per l'interrupt) unsigned long pulseCount = 0, pulseTime = 0, lastTime = 0; //Inizializza variabili pulseCount, pulseTime e lastTime double power; //Inizializza variabile power const int pulsePin = A0; //Inizializza pin fotoresistenza int Buzzer = 2; //Inizializza pin buzzer void setup() { Serial.begin(9600); //Inizializza monitor seriale a 9600 baud pinMode(pulsePin, INPUT_PULLUP); //Imposta pin fotoresistenza come input pinMode(Buzzer, OUTPUT); //Inizializza pin buzzer come output } void loop() { pulseState = pulseState << 1 | digitalRead(pulsePin); //Assegna alla variabile pulseState l'operazione logica di bitshift oppure la lettura digitale del pin della fotoresistenza if (pulseState == 0xFFFFFFFE) //Alternativa per l'interrupt { lastTime = pulseTime; //Assegna alla variabile lastTime, il valore della variabile pulseTime pulseTime = micros(); //Assegna alla variabile pulseTime, il valore di tempo trascorso dall'avvio del programma in ms if ((pulseTime - lastTime) > 10000) //Se la differenza tra la variabile pulseTime e lastTime e' maggiore di 10000 { // limita la frequenza massima di lampeggio a 100hz pulseCount++; //Aumenta conteggio power = double((3600000000.0 / (pulseTime - lastTime))); // Calcolo potenza sul valore power Serial.println(power); //Visualizza sul monitor seriale, il valore power } if(power>8000) //Se il valore power supera 8000 { digitalWrite(Buzzer,HIGH); //Accendi buzzer delay(100); //Aspetta 100 ms digitalWrite(Buzzer,LOW); //Spegni buzzer delay(100); //Aspetta 100 ms } else //Altrimenti se il valore non viene superato { digitalWrite(Buzzer,LOW); //Mantieni il buzzer spento } } }