Pages: [1]   Go Down
Author Topic: Help Me With Melody Repeat?  (Read 545 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi, I'm very new to Arduino, only have built one thing, which was used as a prank. Set two rumble motors to go off every minute or two using delay... but this is what I need help with.

Code:
*/
 #include "pitches.h"


// notes in the melody:
int melody[] = {
  NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_AS4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_C5,
  NOTE_G4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_AS4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_DS4};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4, 4, 4, 8, 4, 8, 2, 4, 4, 4, 4, 8, 4, 8, 2, 4, 4, 4, 4, 8, 4, 8, 1,8,8,4,8,4,3,3,4};
   

   
void setup() {
  // iterate over the notes of the melody:
 
  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];
    tone(9, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.40;
    delay(pauseBetweenNotes);
    // stop the tone playing:
    noTone(9);
  }

}
 


void loop() {
     
 }

I've tried everything I could to put in the void loop, but the melody would never play again! I'm sure its an easy sketch but I cannot find any literature online that will tell me how. The original melody sketch I got this from,  courtesy of Tom Igoe, did not have a delay/repeat example, which would have been nice. Please would someone help me out on this?

Feel free to use the little melody yourself, it's a famous tune I'm sure you'll love... smiley-mr-green

Thanks much!
Nate
Logged

Massachusetts, USA
Offline Offline
Tesla Member
***
Karma: 212
Posts: 8974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Just take the melody playing out of setup() which is only done once and put it in loop() which is done repeatedly:
Code:
*/
 #include "pitches.h"

// notes in the melody:
int melody[] = {
  NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_AS4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_C5,
  NOTE_G4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_AS4, NOTE_G4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_DS4};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4, 4, 4, 8, 4, 8, 2, 4, 4, 4, 4, 8, 4, 8, 2, 4, 4, 4, 4, 8, 4, 8, 1,8,8,4,8,4,3,3,4};
   

   
void setup() {
 
}
 


void loop() {
  // iterate over the notes of the melody:
 
      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];
    tone(9, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.40;
    delay(pauseBetweenNotes);
    // stop the tone playing:
    noTone(9);
  }
 }
Logged

Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thank you so much! such an easy fix :/ Oh well new information to use later, thanks!
Logged

Pages: [1]   Go Up
Jump to: