/* Serve a capire se azionando l'interruttore
(PIN / Ingresso 5) La Lampada si stia accendendo o spegnendo
la lampada (PIN / Uscita 13).
Se la lampada viene accesa l'altoparlante (PIN / Uscita 12)
emetterà "Do, Re, Mi", mentre se viene spenta
non ci sarà alcun suono.
Sketch con funzione millis anziché delay */
// Associazione Pin In/Out
const int Interruttore = 2; // Ingresso Interruttore
const int Lampada = 13; // Uscita Lampada
const int Altoparlante = 12; // Uscita Altoparlante
// Variabile per Interruttore
int val = 0; // Valore Iniziale Interruttore
// Variabili di Tempo / Conteggio
unsigned long previousMillis = 0; // Valore Iniziale Timer
const long interval = 1000; // Intervallo in millisecondi (1 secondo)
int counter = 0; // Timer
void setup() {
// Settaggio In e Out
pinMode(Interruttore, INPUT); // Interruttore come Ingresso
pinMode(Lampada, OUTPUT); // Lampada come Uscita
pinMode(Altoparlante, OUTPUT); // Altoparlante come uscita
Serial.begin(9600); // Inizializza Stampante Seriale
}
void loop() {
// Associa Interruttore a val
val = digitalRead(Interruttore);
// Se l'interruttore (val) è HIGH ...
if (val == HIGH) {
digitalWrite(Lampada, HIGH); // Accendi la Lampada
counterGo(); // Inizia Conteggio
} else { // Se l'interruttore (val) è LOW ...
digitalWrite(Lampada, LOW);
counter = 0; // Resetta Timer
}
// Se l'interruttore (val) è HIGH e il Conteggio è inferiore a 6 secondi ...
if (val = HIGH && counter > 0 && counter < 6) {
suonaMelodia(); // Avvia Ciclo Melodia
} else { // Se l'interruttore (val) è LOW o il Conteggio è superiore a 10 secondi ....
noTone(Altoparlante); // Non Emettere Suono
}
}
// Ciclo Melodia "Do, Re Mi"
void suonaMelodia() {
if (counter > 0 && counter < 2) { // Se conteggio è a 1 secondo
tone(Altoparlante, 262); // Emetti Do
}
if (counter > 1 && counter < 3) { // Se conteggio è a 2 secondi
noTone(Altoparlante); // Non Emettere Suono
}
if (counter > 2 && counter < 4) { // Se conteggio è a 3 secondi
tone(Altoparlante, 294); // Emetti Re
}
if (counter > 3 && counter < 5) { // Se conteggio è a 4 secondi
noTone(Altoparlante); // Non Emettere Suono
}
if (counter > 4 && counter < 6) { // Se conteggio è a 5 secondi
tone(Altoparlante, 330); // Emetti Mi
}
}
// Ciclo contaggio
void counterGo() {
unsigned long currentMillis = millis(); // Crea Variabile con valore millis
// Se è passato almeno un secondo ...
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Associa il valore di millis a previousMillis
counter++; // Inizia Conteggio Timer
Serial.println(counter); // Stampa il valore del contatore (opzionale)
}
}