Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //definizione delle note musicali (a,b,c,etc... nomi delle note
- //che vengono identificate con i numeri scritti accanto
- //R=pausa)
- #define c 3830
- #define d 3400
- #define e 3038
- #define f 2864
- #define g 2550
- #define a 2272
- #define b 2028
- #define C 1912
- #define R 0
- // speakerOut è il pin del Piezo; int indica una variabile intera
- int speakerOut = 6;
- //nel set up impostiamo i pin in OUTPUT(pin di uscita)
- void setup()
- {
- //pinMode serve per mettere speakerOut in OUTPUT
- pinMode(speakerOut, OUTPUT);
- //il ciclo for imposta tutti i pin da 7 a 13 in OUTPUT
- //tramite variabile i (int sta per intera)
- int i = 7;
- for(i; i<14; i++);
- pinMode(i, OUTPUT);
- }
- //variabili necessarie a playTone per funzionare
- //melody=note
- //beats=lett. battiti per allungare la durata delle note
- //tempo=tempo complessivo
- //long è un tipo della variabile
- //pause=durata fra le note
- //playTone è la funzione da richiamare per eseguire la melodia
- int melody[] = { C, b, g, C, b, e, R, C, c, g, a, C };
- int beats[] = { 16, 16, 16, 8, 8, 16, 32, 16, 16, 16, 8, 8 };
- int MAX_COUNT = sizeof(melody) / 2;
- long tempo = 10000;
- int pause = 1000;
- int rest_count = 100;
- int tone_ = 0;
- int beat = 0;
- long duration = 0;
- void playTone() {
- //elapsed_time=tempo trascorso dall'inizio
- long elapsed_time = 0;
- // n è la variabile che contiene quale led accendere
- int n = 0;
- switch(tone_) {
- case 3830:
- case 1912:
- //c - do
- n = 13;
- break;
- case 3400:
- //f - fa
- n = 12;
- break;
- case 3038:
- //d - re
- n = 11;
- break;
- case 2864:
- //g - sol
- n = 10;
- break;
- case 2550:
- //e - mi
- n = 9;
- break;
- case 2272:
- //a - la
- n = 8;
- break;
- case 2028:
- //b - si
- n = 7;
- break;
- default:
- n = 0;
- }
- if(n != 0)
- digitalWrite(n, HIGH);
- //se è definita una melodia la riproduce
- if (tone_ > 0) {
- while (elapsed_time < duration) {
- digitalWrite(n,LOW);
- digitalWrite(speakerOut,HIGH);
- delayMicroseconds(tone_ / 2);
- digitalWrite(speakerOut, LOW);
- delayMicroseconds(tone_ / 2);
- elapsed_time += (tone_);
- //questa successione permette di accendere un led
- //in base alla nota che si sta riproducendo
- }
- }
- else {
- for (int j = 0; j < rest_count; j++) {
- delayMicroseconds(duration);
- }
- }
- }
- //nel loop eseguiamo la melodia
- void loop()
- {
- //impostiamo i parametri necessari alla riproduzione della melodia
- for (int i=0; i<MAX_COUNT; i++) {
- tone_ = melody[i];
- beat = beats[i];
- duration = beat * tempo;
- playTone();
- delayMicroseconds(pause);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement