I've followed the directions from this answer, to try and play music without delay. This is my code so far:
#include "pitches.h"
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4
};
const int tonePin = 4;
unsigned long previousMillis = 0;
int counter = 0;
int numberOfNotes = sizeof(melody)/sizeof(int);
boolean outputTone = false;
void setup() {
pinMode(tonePin, OUTPUT);
//Serial.begin(9600);
}
void loop() {
unsigned long currentMillis = millis();
unsigned long noteDuration = 1000 / noteDurations[counter];
unsigned long pauseBetweenNotes = noteDuration * 1.30;
if (counter < numberOfNotes) {
if (outputTone && ((currentMillis - previousMillis) >= noteDuration)) {
previousMillis = currentMillis;
noTone(tonePin);
outputTone = false;
counter++;
}
else {
if ((currentMillis - previousMillis) >= pauseBetweenNotes) {
previousMillis = currentMillis;
Serial.println(melody[counter]);
if (melody[counter] == 0) {
noTone(tonePin);
} else {
tone(tonePin, melody[counter]);
}
outputTone = true;
}
}
}
}
pitches.h
can be found here.
So with this code, the music plays, but slower. The pauses between notes seem longer, and I can't figure out why.
Also, I'm not sure where should I increment my notes counter.