// Serve a capire se azionando l'interruttore (PIN / Ingresso 5) si stia accendendo o spegnendo la lampada (PIN / Uscita 13). Se la lampada viene accesa l'altoparlante (PIN / Uscita 12) emetterà per "Do, Re, Mi", mentre se viene spenta non ci sarà alcun suono
const int Interruttore = 5; // Ingresso Interruttore
const int Lampada = 13; // Uscita Lampada
const int Altoparlante = 12; // Uscita Altoparlante
int stato_precedente = LOW; // Interruttore Spento
int stato_attuale; // Info Stato Interruttore
void setup() {
pinMode(Interruttore, INPUT); // Interruttore come Ingresso
pinMode(Lampada, OUTPUT); // Lampada come Uscita
pinMode(Altoparlante, OUTPUT); // Altoparlante come uscita
Serial.begin(9600);
}
void loop() {
// Se l'interruttore è HIGH accendere la Lampada, altrimenti spegnerla
if (digitalRead(Interruttore) == HIGH) {
digitalWrite(Lampada, HIGH);
} else {
digitalWrite(Lampada, LOW);
}
// Verifica lo stato dell'interruttore
stato_attuale = digitalRead(Interruttore);
// Se l'interruttore è passato da LOW a HIGH emettere Suono, altrimenti nulla
if (stato_attuale != stato_precedente) {
// Lo stato è cambiato
if (stato_attuale == HIGH) {
suonaMelodia();
Serial.print("Lampada Accessa");
} else {
digitalWrite(Altoparlante, LOW);
Serial.print("Lampada Spenta");
}
}
// Tempo di attesa tra le letture dello stato dell'interruttore (regolare a seconda delle esigenze)
stato_precedente = stato_attuale;
delay(10);
}
// Suono Emesso "Do, Re Mi", per 2 secondi
void suonaMelodia() {
tone(Altoparlante, 262); // Do
delay(500);
noTone(Altoparlante);
tone(Altoparlante, 294); // Re
delay(500);
noTone(Altoparlante);
tone(Altoparlante, 330); // Mi
delay(500);
noTone(Altoparlante);
delay(2000); // Pausa di 2 secondi prima di ricontrollare l'ingresso
}