Musica e Led con arduino
Questo sketch è una prova per verificare la possibilità di inserire motivi musicali in un progetto.Possono servire per attese o avvisi. Ho collegato al pin 8 l'ingresso di un amplificatore BF.
I led collegati ai pin da 0 a 6 rappresentano le note musicali sono disposti come su di un pentagramma e si accendono con la relativa nota e per la relativa durata.
Ecco il codice (l'originale lo trovate sul sito di arduino.)
/*
Melody Plays a melody
circuit:
* 8-ohm speaker on digital pin 8
created 21 Jan 2010
modified 30 Aug 2011
by Tom Igoe
This example code is in the public domain.
http://arduino.cc/en/Tutorial/Tone
*****************************
Modifiche fatte da Sergio Prenleloup
il 2 ottobre 2012
Si utilizza il programma di esempio sostituendo la musica
Il titolo dello spartito è "Inno alla gioa" pdf
*********
I led sono sette e si accendono con le note
Si tratta solo di una prova per verificare la possibilità
di far eseguire ad un progetto un motivo musicale
si è utilizzato la singola nota ( mano destra) senza accordo.
*/
#include "pitches.h"
// note da suonare lette dallo spartito cartaceo
int melody[] = {
NOTE_E4,
NOTE_E4,
NOTE_F4,
NOTE_G4,
NOTE_C4,
NOTE_F4,
NOTE_E4,
NOTE_D4,
NOTE_C4,
NOTE_C4,
NOTE_D4,
NOTE_E4,
NOTE_E4,
0,
NOTE_D4,
NOTE_D4,
NOTE_E4,
NOTE_E4,
NOTE_F4,
NOTE_G4,
NOTE_G4,
NOTE_F4,
NOTE_E4,
NOTE_D4,
NOTE_C4,
NOTE_C4,
NOTE_D4,
NOTE_E4,
NOTE_D4,
0,
NOTE_C4,
NOTE_C4,
0};
// tempo 4 quarti
// il 4 per battuta di un quarto
// il 2 per un mezzo
// il 8 per un ottavo
int noteDurations[] = {4,4,4,4, 4,4,4,4, 4,4,4,4, 4,8,8,2, 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,8,8,2, 1};
//led da accendere a seconda della nota
int noteLed[] = {2,2,3,4, 0,3,4,1, 0,0,4,2, 2,2,1,1, 2,2,3,4, 4,3,2,1, 0,0,1,2, 1,1,0,0, 0};
void setup() {
{
pinMode (0, OUTPUT); //do
pinMode (1, OUTPUT);// re
pinMode (2, OUTPUT);// mi
pinMode (3, OUTPUT);//fa
pinMode (4, OUTPUT);//sol
pinMode (5, OUTPUT);//la
pinMode (6, OUTPUT);//si
digitalWrite (0,LOW);
digitalWrite (1,LOW);
digitalWrite (2,LOW);
digitalWrite (3,LOW);
digitalWrite (4,LOW);
digitalWrite (5,LOW);
digitalWrite (6,LOW);
}
// ci sono 33 note comprese le due pause
for (int thisNote = 0; thisNote <= 32; thisNote++)
{
// to calculate the note duration, take one second
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000/noteDurations[thisNote];
digitalWrite (noteLed[thisNote], HIGH);
tone(8, melody[thisNote],noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
// tempo fra una nota e l'altra
int pauseBetweenNotes = noteDuration * 1.3;
delay(pauseBetweenNotes);
noTone (8);
digitalWrite (noteLed[thisNote], LOW);
}
}
void loop() {
// no need to repeat the melody.
}
Questa è la prova effetuata:
Qui potete scaricare il file del codice:
Nessun commento:
Posta un commento
Vi ringrazio per la lettura e vi invito al prossimo post.
Se il post vi è stato utile, vi è piaciuto oppure no, scrivete un commento.
Un saluto a tutti.
Sergio
Copyright - Condizioni d’uso - Disclaimer
http://avventurarduino.blogspot.it/2012/10/inizia-lavventura-arduino-12-settembre.html