Suonerie Natalizie arduino led

Continua il progetto delle “suonerie natalizie” con l’aggiunta dei led che si accendono in funzione della musica che arduino sta eseguendo: “Suonerie Natalizie arduino led”

Suonerie Natalizie arduino led

Le suonerie e la spiegazione dello sketch la trovi nel primo articolo.

In questo articolo trovi lo schema dei collegamenti per i led e la descrizioni delle parti dello sketch che ho aggiunto rispetto al progetto senza le luci a led.

I collegamenti per le suonerie natalizie arduino led

Il collegamento dello speaker è il medesimo che già conosci:

suonerie natalizie arduino schema

a cui ho aggiunto 7 led ad alta luminosità connessi ad una resistenza da 470ohm sul Gnd comune a tutti i led ed arduino:

suonerie natalizie luci led lato alto

lo schema che puoi seguire è il seguente:

Suonerie Natalizie arduino led schema

 

ai pin 2,3,4,5,6,7,8 sono connessi i 7 led, avrai già compreso che i led rappresentano le note per cui nello sketch dovrai associare a ciascuna nota da eseguire un led corrispondente, indipendentemente dall’ottava su cui suonerà la nota.

Lato arduino i collegamenti dei led li puoi seguire qui:

suonerie natalizie luci pin

sono comunque semplici in quanto ogni led è collegato ad un singolo pin.

Lo sketch del progetto

Lo sketch delle suonerie natalizie arduino led è sostanzialmente identico a quello descritto nell’articolo “Suonerie Natalizie arduno” a cui ho aggiunto alcune linee per la gestione i 7 led.

#include <Tone.h>

Tone tone1;

byte p2 = 2;
byte p3 = 3;
byte p4 = 4;
byte p5 = 5;
byte p6 = 6;
byte p7 = 7;
byte p8 = 8;

byte contatore = 0;
byte current_pin = 0;

#define OCTAVE_OFFSET 0

int notes[] = { 0, NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4,
NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5,
NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6,
NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7
};

//SUONERIE NATALIZIE

//char *song0 = "XMASHEARTS:d=4,o=5,b=70:16a4,8a.,16a#,8a,8g,8f,8g,8a,16g,16a,8a#,8a,8g,8f,e,8p,16e,16f,g,8g.,16a,g,8p,16a,16a#,8a,8g,8f,8g,a,8p,16a4,8a,8a,8a.,16f,8a#,8a,8p,16g#,16a,8d6,8d6,8a,8c6,a#,8p,16g,16a,a#.,8c6,8a#,8a,8p,8e,8a,8g,8f,8e,d,8p,8d,8c,8e,8f,8g,a,8p,16e,16f,g.,8c,8a#,a,8d,8c,8e,8f,8g,a,8p,8a,8g#,8a,2b,c6,2c.6";
char *song1 ="firstnoel:d=4,o=5,b=112:16e.,32p,8d,c.,8d,8e,16f.,32p,g.,8p,16a,16p,16b.,32p,c6,b,8a.,16p,g.,8p,16a.,32p,16b.,32p,c6,b,a,g,8a.,16p,b,c6,g,f,e.";
//char *song2 ="firstnoel2:d=16,o=5,b=28:32f#,32e,d.,32e,32f#,32g,a.,32p,32b,32c#6,d6,c#6,b,a.,32p,32b,32c#6,d6,c#6,b,a,b,c#6,32d6,a,g,f#.,32p,32f#,32e,d.,32e,32f#,32g,a.,32p,32d6,32c#6,b.,32p,b,8a,p,d6,c#6,b,a,b,c#6,d6,a,g,f#.,32p,32f#,32e,d.,32e,32f#,32g,a.,32p,32b,32c#6,d6,c#6,b,a.,32p,32b,32c#6,32d6,c#6,b,a,b,c#6,d6,a";
char *song3 ="Angels_on_high:d=4,o=5,b=180:a,a,a,c6,c.6,8a#,2a,a,g,a,c6,a.,8g,2f,a,a,a,c6,c.6,8a#,2a,a,g,a,c6,a.,8g,2f,2c6,8d6,8c6,8a#,8a,2a#,8c6,8a#,8a,8g,2a,8a#,8a,8g,8f,g.,8c,2c,f,g,a,a#,2a,2g,1f";
char *song4 ="All I Want For Christmas:d=4,o=5,b=100:c,e,g,b,a,2a,8g,8e,c,e,g,b,a,2d,a,b4,d,f,b,a,2a,8d,8e,f,g,a,b,1g,c,e,g,b,a,2a,8g,8e,c,e,g,b,a,2d,a,b4,d,f,b,a,2a,8d,8e,f,g,a,b,c6,g,c6,c6,d6,a,a,8b,8d6,c6,g,2g,b,a,g,f,2e.,e,a,e,e,8f#,8a,g,d,2d,f#,e,d,c";
char *song5 ="In the Bleak MidWinter:d=4,o=5,b=112:b.,8c6,d6,b,2a,2g,a.,8b,a,e,2a.,p,b.,8c6,d6,b,2a,2g,a.,8b,a.,8g,2g.,p,c6,b,c6,d6,e6,e6,2b,d.6,8b,a.,8g,2a.,p,b.,8c6,d6,b,2a,2g,a.,8b,a.,8g,2g.";
char *song6 ="Jingle Bells 2:d=4,o=5,b=225:b4,g#,f#,e,2b.4,c,c#,a,g#,f#,2c#,p,8c#,8p,c#,a,g#,f#,2b.,g#,f#,c#,d#,8e.,32p,2f#,p,8b4,8p,b4,g#,f#,e,2b.4,c,c#,a,g#,f#,2c#,p,8c#,8p,c#,a,g#,f#,b,g#,8e.,g#,8f#,8p,f#,g#,a#,2b,2p,b4,g#,f#,e,2b.4,c,c#,a,g#,f#,2c#,p,8c#,8p,8c#.,32p,a,g#,f#,2b.,g#,f#,c#,d#,e,2f#,p,8b4,8p,b4,g#,f#,e,2b.4";
char *song7 ="Jingle Rock Rock:d=8,o=5,b=160:32c6,p,c6,c6,p,16b,16p.,b,b,p,a,32p,b,a,p,e,4p.,a,32p,b,a,16p.,e,p,g,p,a,32p,b,a,p,f,4p.,d,32p,e,f,p,g,p,a,p,d,32p,e,f,p,g,p,16a,16p,a,a,16p,b,p,g,c6";
/*
char *song8 ="Jolly Old St Nicholas:d=8,o=5,b=112:d6,d6,d6,d6,c6,c6,4c6,a#,a#,a#,a#,2d6,g,g,g,g,f,f,4a#,a,a#,c6,d6,2c6,d6,d6,d6,d6,c6,c6,4c6,a#,a#,a#,a#,2d6,g,g,g,g,f,f,4a#,c6,a#,c6,d6,4a#";
char *song9 ="Joy to the World:d=8,o=5,b=56:4c6,b.,16a,4g.,f,4e,d.,16p,4c.,g,4a.,a,4b.,b,2c.6,p,c6,c6,b,a,g,g.,16f,e,c6,c6,b,a,g,g.,16f,e,e,e,e,e,16e,16f,4g.,16f,16e,d,d,d,16d,16e,4f.,16e,16d,c,4c6,a,g.,16f,e,f,4e,4d,2c";
char *song10="Let it Snow:d=4,o=5,b=125:8c,8c,8c6,8c6,a#,a,g,f,2c,8c,16c,g.,8f,g.,8f,e,2c,d,8d6,8d6,c6,a#,a,2g.,8e.6,16d6,c6,8c.6,16a#,a,8a#.,16a,2f.,c,8c6,8c6,a#,a,g,f,2c,8c.,16c,g.,8f,g.,8f,e,2c,d,8d6,8d6,c6,a#,a,2g.,8e.6,16d6,c6,8c.6,16a#,a,8a.,16g,2f.";
char *song11="Rudolph The Red Nose Reindeer:d=4,o=5,b=250:8g,a,8g,e,c6,a,2g.,8g,8a,8g,8a,g,c6,2b.,p,8f,g,8f,d,b,a,2g.,8g,8a,8g,8a,g,a,2e.,p,8g,a,8a,e,c6,a,2g.,8g,8a,8g,8a,g,c6,2b.,p,8f,g,8f,d,b,a,2g.,8g,8a,8g,8a,g,d6,2c.6,p,a,a,c6,a,g,e,2g,d,e,g,a,b,b,2b,c6,c6,b,a,g,f,2d,8g,a,8g,e,c6,a,2g.,8g,8a,8g,8a,g,c6,2b.,p,8f,g,8f,d,b,a,2g.,g,a,g,a,";
char *song12="Santa Claus is Coming to Town:d=4,o=5,b=200:g,8e,8f,g,g.,8g,8a,8b,c6,2c6,8e,8f,g,g,g,8a,8g,f,2f,e,g,c,e,d,2f,b4,1c,p,g,8e,8f,g,g.,8g,8a,8b,c6,2c6,8e,8f,g,g,g,8a,8g,f,f,e,g,c,e,d,2f,b4,1c,p,c6,d6,c6,b,c6,a,2a,c6,d6,c6,b,c6,2a.,d6,e6,d6,c#6,d6,b,b,b,8b,8c6,d6,c6,b,a,g,p,g.,8g,8e,8f,g,g.,8g,8a,8b,c6,2c6,8e,8f,g,g,g,8a,8g,8f,2f,";
char *song13="Sleigh Ride:d=8,o=5,b=225:b,p,b,p,b,p,b,p,c#6,p,b,16g#,4e,f#,p,g#,p,f#,16d#,4c#,1b4,4p,c#,16p.,d#,p,f#,p,b,p,c#6,p,b,g#,f#,e,f#,p,f#,g#,f#,e,4c#,1e,4p,b,p,b,p,b,p,b,p,c#6,p,b,16g#,4e,f#,p,g#,p,f#,16d#,4c#,1b4,4p,c#,p,d#,p,f#,16p.,b,p,c#6,p,b,g#,f#,e,f#,p,f#,g#,f#,e,4c#,1e,4p,b,p,b,p,b,p,b,p,c#6,p,b,16g#,4e,";
char *song14="The First Noel:d=16,o=5,b=28:32f#,32e,d.,32e,32f#,32g,a.,32p,32b,32c#6,d6,c#6,b,a.,32p,32b,32c#6,d6,c#6,b,a,b,c#6,32d6,a,g,f#.,32p,32f#,32e,d.,32e,32f#,32g,a.,32p,32d6,32c#6,b.,32p,b,8a,p,d6,c#6,b,a,b,c#6,d6,a,g,f#.,32p,32f#,32e,d.,32e,32f#,32g,a.,32p,32b,32c#6,d6,c#6,b,a.,32p,32b,32c#6,32d6,c#6,b,a,b,c#6,d6,a";
char *song15="Twelve Days of Christmas:d=16,o=5,b=90:c.,c.,8c.,f.,f.,8f.,e.,f.,g.,a.,a#.,g.,4a,32p,a#.,8c.6,d.6,a#.,a.,f.,8g.,2f,c.,c.,c.,f.,f.,f.,8f.,e.,f.,g.,a.,a#.,g.,4a.,8c.6,g.,a.,8a#.,a.,a#.,8c.6,d.6,a#.,a.,f.,8g.,4f.";
char *song16="12 Days OF Christmas:d=4,o=5,b=140:8d,8d,d,8g,8g,g,8f#,8g,8a,8b,8c6,8a,b,8p,8c6,d6,8e6,8c6,8b,8g,a,2g,8d6,8d6,d6,8g6,8g6,g6,8f#6,8g6,8a6,8b6,8c7,8a6,2b6,d7,8a,8b,c6,8b6,8c7,d7,8e7,8c7,8b6,8g6,a6,2g.6,8f#,8f#,f#,8b,8b,b";
char *song17="CarolBells:d=8,o=5,b=180:4a,g#,a,4f#,4a,g#,a,4f#,4f#6,f#6,f#6,e6,d6,4c#6,c#6,c#6,b,a,4b,b,b,c#6,b,4f#,f#,f#,4f#,c#,d#,e,f#,g#,a,b,c#6,4b,4a,c#,d#,e,f#,g#,a,b,c#6,4b,4a,4a,g#,a,4f#,4a,g#,a,4f#";
char *song18="Away In A Manger:d=4,o=5,b=112:d6,d.6,8c6,b,b.,8a,g,g,f#,e,2d,d,d.,8e,d,d,a,f#,e,d,g,2b,d6,d.6,8c6,b,b.,8a,g,g,f#,e,2d,d,c.6,8b,a,b,a,g,a,e,f#,2g,d6,d.6,8c6,b,b.,8a,g,g,f#,e,2d,d,d.,8e,d,d,a,f#,e,d,g,2b";
char *song19="Ill be home for Xmas:d=8,o=6,b=40:c.7,16b,d.7,16c7,g,4g,p,a.,16g,a#.,16a,4d,p,d.,16e,g.,16f,e.,16g,c.7,16b,d7,d7,b,32p,16b,4a,g,p,c.7,c.7,16b,d.7,16c7,g,4g,p,a.,16g,a#.,16a,4d,p,d.,16e,g.,16f,e.,16g,c.7,16b,d7,d7,b.,16b,4a,g,p,c.7,c.7,16b,d.7,16c7,g,4g,p,a.,16g,a#.,16a,4d,p,d,32p,16e,g.,16f,e.,16g,c.7,16b,d7,d7,b.,";
char *song20="Deck The Halls:d=4,o=5,b=160:c.6,8a#,a,g,f,g,a,f,8g,8a,8a#,8g,a.,8g,f,e,2f,c.6,8a#,a,g,f,g,a,f,8g,8a,8a#,8g,a.,8g,f,e,2f,g.,8a,a#,g,a.,8a#,c6,g,8a,8b,c6,8d6,8e6,f6,e6,d6,2c6,c.6,8a#,a,g,f,g,a,f,8d6,8d6,8d6,8d6,c.6,8a#,a,g,2f";
char *song21="I Saw Mommy Kissing Santa Claus:d=4,o=6,b=160:2c.,d,e,g,a,8c7,2b.,g,2e,a,g,e,c,a,g,e,8c.,2b.5,f,e,d,d.,8c#.,2d.,8a.,16b.,8a.,g.,f#.,8a.,2g.,e,d,e,f#,g,a,g#,a,a#,b,a,f,8e,2d.,g,2c.,d,e,g,a,8c7,2b,g,2e,a,g,2e,16c,a,g,e,8c.,2a,16g#,8a.,16b,c7,8c.7,c7,8d.7,1b,f#,8a.,16a,g,f,8e,2d,8e.,2f,g,a,8c.7,a,2c7,2d7,1c7";
char *song22="Feliz Navidad:d=4,o=5,b=140:8a,d6,8c#6,8d6,2b.,p,8b,e6,8d6,8b,2a.,p,8a,d6,8c#6,8d6,b.,8g,b,b,8a,8a,8b,8a,g,8g,1f#,p,8a,d6,8c#6,8d6,2b.,p,8b,e6,8d6,8b,2a.,p,8a,d6,8c#6,8d6,b.,8g,b,b,8a,8a,8b,8a,g,8g,1f#,p,8f#6,8f#6,8f#6,8f#6,e6,8d6,d6,b,8b,d.6,8p,8e6,8e6,8e6,e6,8d6,8b,b,a,8g#,a.";
char *song23="Frosty The Snowman:d=4,o=5,b=140:2g,e,8p,8f,g,2c6,8b,8c6,d6,c6,b,a,2g,p,8b,8c6,d6,c6,b,8a,8a,8g,c6,e.,8f,8a,g,f,e,f,2g,2p,2g,e,8p,8f,g,2c6,8b,8c6,d6,c6,b,a,2g,p,8b,8c6,d6,c6,b,8a,8a,8g,c6,e.,8g,8a,g,f,e,d,2c,p,c,a,a,c6,c6,b,a,g,e,f,a,g,f,2e,p,e,d,d,g,g,b,b,d6,8d6,8b,d6,c6,b,a,g,p,2g";
char *song24="Have Yourself A Merry Little Christmas:d=4,o=5,b=100:16b4,8c,8e.,g.,16b,8c6,8g,f,16p,8e,16d,c,16c,d.,8p,16b4,8c,8e,g.,16b,8c.6,2g,p,e,g,c6,16d6,8e.6,8d.6,8c6,8b,8a,g,16e,f,2e,16p,8f,16g,16d,16d,8c,8d,16a4,c.,e,g,16b,8c.6,8g,f.,16p,8e,16d,8c,16d,16e,8d.,8e,8p,16c,8e,g.,16b,8c6,2g,p,e,g,c6,d6,8d.6,16c6,16p,8b,16a,g#.,8b.,16b,2c.6,16p";
char *song25="Last Christmas:d=4,o=5,b=112:16d6,e6,8p,e6,8d6,8p,8a,8e6,8e6,8f#6,d.6,8b,8b,8e6,8e6,f#6,d.6,8b,8c#6,8d6,8c#6,2b.,16e6,f#6,8p,e.6,8p,8b,8f#6,8g6,8f#6,2e6,8d6,8c#6,8d6,8c#6,c#6,8d6,8p,8c#6,8p,2a,16d6,e6,8p,e6,8d6,8p,8a,8e6,8e6,8f#6,d.6,8b,8b,8e6,8e6,f#6,d.6,8b,8c#6,8d6,8c#6,2b.,16e6,f#6,8p,e.6,8p,8b,8f#6,8g6,8f#6,2e6,8d6,8c#6,8d6,8c#6,c#6,8d6,8p,8c#6,8p,a";
char *song26="chestnuts Roasting On An Open Fire:d=4,o=5,b=125:8d#,16p,16d6,8d#6,16c#6,8d.6,8c6,a#,8g#,8p,16f,8g.,8a#,a#,16a#,8c.6,2d#,p,8d#,16p,16a#,8c6,a#,8g#,16f,8g.,8a#,16d#,16f,1d#,p,8c,16d,16d#,8d,8d#,f.,p,8d,8d#,8f,8f,g,8a#,8p,8c6,8g,16c6,1d6,8c6,8b,8c6,d.6,8b,16p,16b,c#6,8b,8p,a#,8g#,8p,16g#,1a#,p,p";
char *song27="we Wish You A Merry Christmas:d=4,o=5,b=200:d,g,8g,8a,8g,8f#,e,e,e,a,8a,8b,8a,8g,f#,d,d,b,8b,8c6,8b,8a,g,e,d,e,a,f#,2g,d,g,8g,8a,8g,8f#,e,e,e,a,8a,8b,8a,8g,f#,d,d,b,8b,8c6,8b,8a,g,e,d,e,a,f#,1g,d,g,g,g,2f#,f#,g,f#,e,2d,a,b,8a,8a,8g,8g,d6,d,d,e,a,f#,2g";
char *song28="Winter Wonderland:d=4,o=5,b=112:8a#.,16a#,2a#.,8a#.,16a#,g,2a#,8a#.,16a#,2a#.,8a#.,16a#,g#,2a#,8p,16a#,8d.6,16d6,8d.6,c.6,8p,16c6,8a#.,16a#,8a#.,g#.,8p,16g#,8g.,16g,8g.,16g,8f.,16f,8f.,16f,2d#,p,8a#.,16a#,2a#.,8a#.,16a#,g,2a#,8a#.,16a#,2a#.,8a#.,16a#,g#,2a#,8p,16a#,8d.6,16d6,8d.6,c.6,8p,16c6,8a#.,16a#,8a#.,g#.,8p,16g#,8g.,16g,8g.,16g,8f.,16f,8f.,16f,2d#,p,8d.,16d,8b.,16b,8e.,16e,8c.6,16c6,b,2g,p,8d.,16d,8b.,16b,8e.,16e,8c.6,16c6,2b.,p";
char *song29="Mary's boy child - Bony M:d=16,o=6,b=40:32g,32p,g,g,c7,c7,a,f,d,32a,32a,g,b,a,f,4e,g,e7,d7,c7,a,f,d.,g,c7,b,d7,4c7,e7,e7,f7,f7,d7,d7,e.7,32e7,c7,c7,d7,c7,8b.,a,g,e7,d7,c7,a,f,d.,32a,g,c7,b,d7,4c7,32g,32p,g,g,c7,c7,a,f,d,32a,32a,g,b,a,f,8e.,32p,g,e7,d7,c7,a,f,d.,32a,g,c7,b,d7,4c7,e7,e7,f7,f7,d7,d7,e.7,32e7,c7,c7,d7,c7,8b";
char *song30="cristmas In Our Hearts:d=4,o=5,b=70:16a4,8a.,16a#,8a,8g,8f,8g,8a,16g,16a,8a#,8a,8g,8f,e,8p,16e,16f,g,8g.,16a,g,8p,16a,16a#,8a,8g,8f,8g,a,8p,16a4,8a,8a,8a.,16f,8a#,8a,8p,16g#,16a,8d6,8d6,8a,8c6,a#,8p,16g,16a,a#.,8c6,8a#,8a,8p,8e,8a,8g,8f,8e,d,8p,8d,8c,8e,8f,8g,a,8p,16e,16f,g.,8c,8a#,a,8d,8c,8e,8f,8g,a,8p,8a,8g#,8a,2b,c6,2c.6";
*/
char *songs[6];     

void setup(void) {
  Serial.begin(9600);
  tone1.begin(13);
  
  songs[0] = song1;
  songs[1] = song3;
  songs[2] = song4;
  songs[3] = song5;
  songs[4] = song6;
  songs[5] = song7;
}

#define isdigit(n) (n >= '0' && n <= '9')

void loop(void) {
  if (contatore < 0 || contatore > 5 ) contatore = 0;
  Serial.println( contatore );
  play_rtttl(songs[contatore]);
  delay(1000);
  contatore++;
}

void play_rtttl(char *p) {

  byte default_dur = 4;
  byte default_oct = 6;
  int bpm = 63;
  int num;
  long wholenote;
  long duration;
  byte note;
  byte scale;

  // format: d=N,o=N,b=NNN:
  // find the start (skip name, etc)

  while(*p != ':') p++;    // ignore name
  p++;                     // skip ':'

  // get default duration
  if(*p == 'd') {
    p++; p++;              // skip "d="
    num = 0;
    while(isdigit(*p)) {
      num = (num * 10) + (*p++ - '0');
    }
    if(num > 0) default_dur = num;
    p++;                   // skip comma
  }

  Serial.print("ddur: "); Serial.println(default_dur, 10);

  // get default octave
  if(*p == 'o') {
    p++; p++;              // skip "o="
    num = *p++ - '0';
    if(num >= 3 && num <=7) default_oct = num;
    p++;                   // skip comma
  }

  Serial.print("doct: "); Serial.println(default_oct, 10);

  // get BPM
  if(*p == 'b') {
    p++; p++;              // skip "b="
    num = 0;
    while(isdigit(*p)) {
      num = (num * 10) + (*p++ - '0');
    }
    bpm = num;
    p++;                   // skip colon
  }

  Serial.print("bpm: "); Serial.println(bpm, 10);

  // BPM usually expresses the number of quarter notes per minute
  wholenote = (60 * 1000L / bpm) * 4;  // this is the time 
                                       // for whole note (in milliseconds)

  Serial.print("wn: "); Serial.println(wholenote, 10);

  // now begin note loop
  while(*p) {
    
    digitalWrite(p2,LOW);
    digitalWrite(p3,LOW);
    digitalWrite(p4,LOW);
    digitalWrite(p5,LOW);
    digitalWrite(p6,LOW);
    digitalWrite(p7,LOW);
    digitalWrite(p8,LOW);
    
    // first, get note duration, if available
    num = 0;
    while(isdigit(*p)) {
      num = (num * 10) + (*p++ - '0');
    }
    
    if(num) duration = wholenote / num;
    else duration = wholenote / default_dur;  // we will need to check
                                              // if we are a dotted note after

    // now get the note
    note = 0;

    switch(*p) {
      case 'c':
        note = 1;
        current_pin = p2;
        break;
      case 'd':
        note = 3;
        current_pin = p3;
        break;
      case 'e':
        note = 5;
        current_pin = p4;
        break;
      case 'f':
        note = 6;
        current_pin = p5;
        break;
      case 'g':
        note = 8;
        current_pin = p6;
        break;
      case 'a':
        note = 10;
        current_pin = p7;
        break;
      case 'b':
        note = 12;
        current_pin = p8;
        break;
      case 'p':
      default:
        note = 0;
    }
    p++;

    // now, get optional '#' sharp
    if(*p == '#') {
      note++;
      p++;
    }

    // now, get optional '.' dotted note
    if(*p == '.') {
      duration += duration/2;
      p++;
    }
  
    // now, get scale
    if(isdigit(*p)) {
      scale = *p - '0';
      p++;
    } else {
      scale = default_oct;
    }

    scale += OCTAVE_OFFSET;

    if(*p == ',') p++;       // skip comma
    
    // now play the note
    if(note) {
      Serial.print("Playing: ");
      Serial.print(scale, 10); Serial.print(' ');
      Serial.print(note, 10); Serial.print(" (");
      Serial.print(notes[(scale - 4) * 12 + note], 10);
      Serial.print(") ");
      Serial.println(duration, 10);
      tone1.play(notes[(scale - 4) * 12 + note]);
      digitalWrite(current_pin,HIGH);
      delay(duration);
      tone1.stop();
      digitalWrite(current_pin,LOW);
    } else {
      Serial.print("Pausing: ");
      Serial.println(duration, 10);
      delay(duration);
    }
  }
}

mi soffermo dulle parti di codice aggiunte:

byte p2 = 2;
byte p3 = 3;
byte p4 = 4;
byte p5 = 5;
byte p6 = 6;
byte p7 = 7;
byte p8 = 8;

byte contatore = 0;
byte current_pin = 0;

alle linee 05-11: definisci le variabili in cui memorizzi i valori dei pin per i 7 led che vuoi si accendano a tempo di musica;

linea 14: definisci una variabile il cui valore ad ogni ciclo di loop() assume il valore del pin corrispondente alla nota emessa dallo speaker;

    digitalWrite(p2,LOW);
    digitalWrite(p3,LOW);
    digitalWrite(p4,LOW);
    digitalWrite(p5,LOW);
    digitalWrite(p6,LOW);
    digitalWrite(p7,LOW);
    digitalWrite(p8,LOW);

alle linee 146-152: assegna a ciascun pin a cui è connesso un led un valore LOW ossia spegni tutti i led ad ogni ciclo di loop();

    switch(*p) {
      case 'c':
        note = 1;
        current_pin = p2;
        break;
      case 'd':
        note = 3;
        current_pin = p3;
        break;
      case 'e':
        note = 5;
        current_pin = p4;
        break;
      case 'f':
        note = 6;
        current_pin = p5;
        break;
      case 'g':
        note = 8;
        current_pin = p6;
        break;
      case 'a':
        note = 10;
        current_pin = p7;
        break;
      case 'b':
        note = 12;
        current_pin = p8;
        break;
      case 'p':
      default:
        note = 0;
    }

linea 170: quando il suono deve emettere la nota 1 assegni alla variabile current_pin il valore corrispondente al pin p2 in questo caso il pin 2;

linee 174,178,182,186,190,194: assegni alla stessa variabile current_pin il valore del pin corrispondente ad ogni nota;

    if(note) {
      Serial.print("Playing: ");
      Serial.print(scale, 10); Serial.print(' ');
      Serial.print(note, 10); Serial.print(" (");
      Serial.print(notes[(scale - 4) * 12 + note], 10);
      Serial.print(") ");
      Serial.println(duration, 10);
      tone1.play(notes[(scale - 4) * 12 + note]);
      digitalWrite(current_pin,HIGH);
      delay(duration);
      tone1.stop();
      digitalWrite(current_pin,LOW);
    } else {
      Serial.print("Pausing: ");
      Serial.println(duration, 10);
      delay(duration);
    }

linea 235: subito dopo aver inviato la nota allo speaker accendi il led, porta ad HIGH il valore del pin corrispondente al led da accendere;

linea 236: la nota e di conseguenza l’accensione del led è in pausa per il tempo definito di durata della nota;

linea 238: spegni i led acceso alla linea 235;

suonerie natalizie luci led lato

Il video con le suonerie e i led

Buona realizzazione !!!

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/suonerie-natalizie-arduino-led.html

14 commenti

1 ping

Vai al modulo dei commenti

    • giuseppe il 17 Dicembre 2014 alle 19:27
    • Rispondi

    come posso scaricare lo sketch ,faccio un copie e incolla ma evidentemente sbaglio qualcosa
    grazie

    1. Ciao Giuseppe,
      il copia e incolla è un’ottima soluzione, di solito va solo pulito dai numeri di linea che non piacciono all’ide.
      Se riesco metterò il progetto su github e pubblicherò il link.

  1. Ciao Mauro anche questo articolo è molto interessante complimenti.
    Vorrei farti una domanda che mi assilla da molto tempo e fa parte del mio progetto Presepe.
    Voglio comandare le suonerie con un telecomando e un IR VS1838B .
    La compilazione è esatto non ottengo errori ma quando invio il segnale le suonerie non completono l’intera canzone.Vorrei sapere dove sbaglio.il tuo progetto funziona benissimo.
    Oggi è ferraagosto mentre tutti sono fuori io mi rilasso a compilare sketch.
    Grazie e buon Ferra Agosto

    1. Ciao Giuseppe,
      il controllo delle suonerie e la durata della loro eseguzione non dovrebbe essere collegata.
      Prova a lasciare inalterato il mio sketch per quanto riguarda il play delle suonerie e inserisci solo nel loop la modifica che ti consente di scegliere le suonerie con il tuo telecomando IR.

  2. Ciao Mauro Grazie della dritta ho risolto il problema.
    Un’altra domanda posso collegare ad ogni pin più led con l’ausilio di Mosfet in modo di avere una catena di led che si accendono con il suono.
    Ciao Grazie

    1. Ciao Giuseppe,
      certo è il metodo migliore.

    • giuseppe traversa il 11 Novembre 2015 alle 20:27
    • Rispondi

    Ciao Mauro in occasione delle prossime feste natalizie ho ripreso il lavoro interrotto per il presepe alba ecc che va tutto bene e stavo inserendo lo sketch delle suonerie e per gli effetti come avevo accennato volevo mettere al posto del singolo led una striscia di led .Poichè ho acquistato delle sheed rele alimentate 5 volt e voluto inserire al posto dei led sostituendo allo sketch p2 con reley pin .Ma la musica va intermittenza e la fine della canzone resta due rele accesi .studiando lo sketch mi sembra che quel current_pin deve essere modificato.Se è come penso, chiedo come devo modificare o se c’è un’altra soluzione :grazie

    1. Ciao Giuseppe,
      se il progetto è come quello mostrato non c’è nulla da modificare.
      Se fai delle variazioni dovrai studiarti anche le modifiche da apportare, io non posso comprendere cosa non funzioni a distanza su un progetto differente dal mio, sarei un vegente.

    • Matteo il 5 Dicembre 2015 alle 17:18
    • Rispondi

    Ciao Mauro,
    bellissimo progetto. Funziona tutto. Però la luminosità dei led è veramente bassa. E’ come se arrivasse una tensione troppo bassa. Come mai?

    1. Ciao Matteo,
      non so che tipo di led tu tia utilizzando, in ogni caso devi considerare i limiti di arduino in corrente su ciascun pin ed in totale sulla scheda per la tensione di riferimento che stai utilizzando ( 5v o 3,3v ).
      Sia nel reference arduino sia sul blog trovi i limiti della scheda.

    • tonio60 il 6 Dicembre 2015 alle 09:00
    • Rispondi

    buongiorno.
    quando carico il codice mi esce scritto
    tone’ does not name a type
    cosa signfica?

    1. Ciao Tonio,
      ti manca la libreria Tone.
      Ti consiglio di leggere i miei tutorial del corso arduino gratuito on-line per capire cosa siano le librerie e come caricarle ed usarle.

    • fabio il 2 Dicembre 2016 alle 20:19
    • Rispondi

    ciao mauro, io o copiato lo sketch ma quando lo carico sull’arduino mi da errore la prima riga con “tone.h”.
    come posso risolvere il problema?
    Grazie.

    1. Ciao Fabio,
      l’errore è dovuto alla mancanza della libreria “tone.h” devi installarla.

  1. […] scorso natale 2014 hai letto del progetto suonerie natalizie arduino led realizzato con dei led ad alta luminosità e uno speaker recuperato da un vecchio […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.