// // A simple tone sequencer and generator // // Author: P.J. Drongowski // http://sandsoftwaresound.net/ // Version: 1.0 // Date: 23 May 2016 // // Copyright (c) 2016 Paul J. Drongowski // Permission granted to redistribute and modify // The Arduino tone() function may not play frequencies // below NOTE_B2 (123 Hz) correctly due to hardware/software // limitations. #include "ToneFreq.h" #include "ToneNote.h" int tonePin = 5 ; int noteIndex = 0 ; int note = 0 ; int duration = 0 ; #define TEMPO (90) #define REST -1 #define SEQUENCE 18 int sequence[SEQUENCE][2] = { NOTE_As2, EIGHTH, REST, SIXTEENTH, NOTE_Gs3, SIXTEENTH, REST, EIGHTH, NOTE_As3, EIGHTH, REST, EIGHTH, NOTE_C3, EIGHTH, NOTE_Cs3, EIGHTH, NOTE_D3, EIGHTH, NOTE_Ds3, EIGHTH, REST, SIXTEENTH, NOTE_As3, SIXTEENTH, REST, EIGHTH, NOTE_Cs4, EIGHTH, REST, EIGHTH, NOTE_G2, EIGHTH, NOTE_Gs2, EIGHTH, NOTE_A2, EIGHTH } ; void setup() { // Start playing the first note in the sequence // This note could be a pick-up! noteIndex = 15 ; note = sequence[noteIndex][0] ; duration = sequence[noteIndex][1] ; if (note != REST) { tone(tonePin, note) ; } } void loop() { delay(1) ; duration-- ; if (duration <= 0) { // Current note has expired. noTone(tonePin) ; // Find the next note to be played if (noteIndex >= (SEQUENCE-1)) { noteIndex = 0 ; } else { noteIndex += 1 ; } note = sequence[noteIndex][0] ; duration = sequence[noteIndex][1] ; // Start playing the next note if (note != REST) { tone(tonePin, note) ; } } }