Arduino Song Experiment
Een repost vanop mijn posterous, maar met een reden: @zofie heeft een arduino starter kit besteld, dus zal ze vast beginnen experimenteren met breadboards, schakelaars en die kleine piezospeaker. Éénvan de eerste experimentjes in Getting started with Arduino of in de tutorial op Arduino.org is namelijk een scriptje om melodietjes af te spelen met je Arduinoboard: PlayMelody. Na een beetje spelen, maakte ik zelf het volgende melodietje:
int length = 26; // the number of notes char notes[] = “cdfdaagcdfdggfcdfdfgedccgf “; // a space represents a rest int beats[] = { 1, 1, 1, 1, 3, 3, 5, 1, 1, 1, 1, 3, 3, 5, 1, 1, 1, 1, 4, 2, 3, 1, 4, 2, 4, 8 }; int tempo = 120;
Je kan het gewoon knippen en plakken in het bestaande arduinoscript of zelf uitdokteren hoe je die speaker aan de praat krijgt, maar dan zal je toch dit tabelletje nodig hebben om de noten terug in code om te zetten: note timeHigh c 1915 d 1700 e 1519 f 1432 g 1275 a 1136 b 1014 C 956 Als dat je toch net iets te ingewikkeld lijkt, kan je natuurlijk ook gewoon de hele code hieronder kopiëren
/* Melody * (cleft) 2005 D. Cuartielles for K3 * * This example uses a piezo speaker to play melodies. It sends * a square wave of the appropriate frequency to the piezo, generating * the corresponding tone. * * The calculation of the tones is made following the mathematical * operation: * * timeHigh = period / 2 = 1 / (2 * toneFrequency) * * where the different tones are described as in the table: * * note frequency period timeHigh * c 261 Hz 3830 1915 * d 294 Hz 3400 1700 * e 329 Hz 3038 1519 * f 349 Hz 2864 1432 * g 392 Hz 2550 1275 * a 440 Hz 2272 1136 * b 493 Hz 2028 1014 * C 523 Hz 1912 956 * * http://www.arduino.cc/en/Tutorial/Melody */ int speakerPin = 9; int length = 26; // the number of notes char notes[] = “cdfdaagcdfdggfcdfdfgedccgf “; // a space represents a rest int beats[] = { 1, 1, 1, 1, 3, 3, 5, 1, 1, 1, 1, 3, 3, 5, 1, 1, 1, 1, 4, 2, 3, 1, 4, 2, 4, 8 }; int tempo = 120; /* * Twinkle Twinkle * int length = 15; // the number of notes * char notes[] = “ccggaagffeeddc “; // a space represents a rest * int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }; * int tempo = 300; */ void playTone(int tone, int duration) { for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(speakerPin, HIGH); delayMicroseconds(tone); digitalWrite(speakerPin, LOW); delayMicroseconds(tone); } } void playNote(char note, int duration) { char names[] = { ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘a’, ‘b’, ‘C’ }; int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; // play the tone corresponding to the note name for (int i = 0; i < 8; i++) { if (names[i] == note) { playTone(tones[i], duration); } } } void setup() { pinMode(speakerPin, OUTPUT); } void loop() { for (int i = 0; i < length; i++) { if (notes[i] == ‘ ‘) { delay(beats[i] * tempo); // rest } else { playNote(notes[i], beats[i] * tempo); } // pause between notes delay(tempo / 2); } }
3 thoughts on “Arduino Song Experiment”