summaryrefslogtreecommitdiff
path: root/6-allarme.ino
diff options
context:
space:
mode:
authorLuca Tringali <tringalinvent@libero.it>2020-02-15 23:22:04 +0100
committerLuca Tringali <tringalinvent@libero.it>2020-02-15 23:22:04 +0100
commit52f2260c5375fdc7a2e99da68be85e7f24848bc0 (patch)
treed23f54713713efe858091902d4710f283d1ce494 /6-allarme.ino
parent091f0c084f44ba6ce1656cdc73ab034abc881620 (diff)
Ultime lezioniHEADmaster
Diffstat (limited to '6-allarme.ino')
-rw-r--r--6-allarme.ino64
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);
+ }
+ }
+ }
+}