lunedì 22 ottobre 2012

Musica e Led

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:


 Note Musicali


  Public Constants - Pitches.h

 Buon lavoro

Sergio

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