Ho provato a realizzare uno sketch che mi permetta di accendere un led dopo l'altro andando a ritmo con uno speaker. Il mio intento è accendere un led diverso ogni volta che lo speaker suona una nota. Provandoci, ho ottenuto un risultato che non era quello sperato: Arduino esegue i codici per accendere e spegnere i led ma senza musica.
Ecco il codice:
int ledV = 3;
int ledR = 4;
int ledB = 5;
int buzzer = 6;
int buzzer2 = 11;
int songspeed = 1.5;
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_G5 784
#define NOTE_A5 880
#define NOTE_B5 988
int notes[] = {
NOTE_CS4, NOTE_DS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_DS4, NOTE_G4, NOTE_GS4, NOTE_G4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_GS4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_CS4, NOTE_DS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_DS4, NOTE_G4, NOTE_GS4, NOTE_G4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_GS4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_CS4, NOTE_DS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_DS4, NOTE_G4, NOTE_GS4, NOTE_G4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_GS4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_CS4, NOTE_DS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_DS4, NOTE_G4, NOTE_GS4, NOTE_G4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_GS4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_CS4, NOTE_DS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_DS4, NOTE_G4, NOTE_GS4, NOTE_G4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_GS4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_CS4, NOTE_DS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_DS4, NOTE_G4, NOTE_GS4, NOTE_G4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_GS4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_CS4, NOTE_DS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_DS4, NOTE_G4, NOTE_GS4, NOTE_G4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_GS4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_CS4, NOTE_DS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_DS4, NOTE_G4, NOTE_GS4, NOTE_G4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_GS4, 0,
NOTE_F4, NOTE_GS4, NOTE_GS4, NOTE_DS4, 0,
NOTE_CS4
};
int duration[] = {
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356, 356, 356, 356, 10,
356
};
void setup() {
pinMode(ledV, OUTPUT);
pinMode(ledR, OUTPUT);
pinMode(ledB, OUTPUT);
digitalWrite(ledR, HIGH);
delay(356);
digitalWrite(ledR, LOW);
delay(356);
digitalWrite(ledB, HIGH);
delay(356);
digitalWrite(ledB, LOW);
delay(356);
digitalWrite(ledV, HIGH);
delay(356);
digitalWrite(ledV, LOW);
delay(356);
digitalWrite(ledR, HIGH);
digitalWrite(ledV, HIGH);
digitalWrite(ledB, HIGH);
delay(356);
for (int i=0;i<162;i++){ //162 is the total number of music notes in the song
int wait = duration[i] * songspeed;
tone(buzzer,notes[i],wait); //tone(pin,frequency,duration)
delay(wait);} //delay is used so it doesn't go to the next loop before tone is finished playing
//You can click reset on Arduino to replay the song
}
void loop()
{
}
Soluzioni?