// 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
                                                                            }