summaryrefslogtreecommitdiff
path: root/6-allarme.ino
blob: 211ca305782283e02482562fc1b1b22e65913f5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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);
 }
     }
  }
}