diff options
Diffstat (limited to '6-allarme.ino')
-rw-r--r-- | 6-allarme.ino | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/6-allarme.ino b/6-allarme.ino new file mode 100644 index 0000000..211ca30 --- /dev/null +++ b/6-allarme.ino @@ -0,0 +1,64 @@ +// nota, frequenza (Hz). +#define Do4 261 +#define Re4 294 +#define Mi4 329 +#define Fa4 349 +#define Sol4 392 +#define La4 440 +#define Si4 493 +#define Do5 523 + +// Una pausa è una nota con frequenza zero +#define P 0 + + +const int buttonPin = 2; +// Il buzzer deve essere collegato a un pin PWM +int speakerOut = 9; + +void setup() { + pinMode(buttonPin, INPUT); + pinMode(speakerOut, OUTPUT); +} + +// melody[] è l'array con le varie note da suonare +// beats[] è l'array con la durata di ciascuna nota da suonare in frazioni di semibreve +int melody[] = { La4, La4, Si4, Do5, Do5, Si4, La4, Sol4, Fa4, Fa4, Sol4, La4, La4, Sol4, Sol4, P }; +int beats[] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 8, 2, 1 }; +int MAX_COUNT = sizeof(melody) / 2; // Calcoliamo la dimensione degli array + +//Tempo della nota semibreve in millesimi di secondo +long tempo = 4000; +// Pausa tra le note in milionesimi di secondo +int pause = 1000; + + +int tone_ = 0; +int beat = 0; +long duration = 0; +int volume = 1023; + + +void loop() { + if (digitalRead(buttonPin) == LOW) { + // Scorriamo tutte le note e le rispettive durate + for (int i=0; i<MAX_COUNT; i++) { + tone_ = melody[i]; + beat = beats[i]; + + + duration = (tempo)/beat; // Calcoliamo la durata in millisecondi della nota attuale + if (tone_ > 0) { + if (digitalRead(buttonPin) == HIGH) break; + noTone(speakerOut); + tone(speakerOut,tone_,duration); + delay(duration); + // Piccola pausa dopo la nota + delayMicroseconds(pause); + + } else { + delay(duration); + } + } + } +} |