diff options
author | Luca Tringali <tringalinvent@libero.it> | 2020-02-15 23:22:04 +0100 |
---|---|---|
committer | Luca Tringali <tringalinvent@libero.it> | 2020-02-15 23:22:04 +0100 |
commit | 52f2260c5375fdc7a2e99da68be85e7f24848bc0 (patch) | |
tree | d23f54713713efe858091902d4710f283d1ce494 /6-allarme.ino | |
parent | 091f0c084f44ba6ce1656cdc73ab034abc881620 (diff) |
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); + } + } + } +} |