Announcements

November 24, 2007
Reading for November 27th, are now posted. Enjoy!

October 2, 2007
To upload your thoughtless acts, create a new assignment page like any other lab. You'll see "Thoughtless Acts" listed as one of the assignment options.

May 24, 2008
This site has been archived and is no longer editable. Stay tuned for the next version, coming in the fall!


lab5

Project Members: 
Wenhua Shi

i add a low tone that  buzzer can't make in order to creat a sound pause. 


Code:

/* Play Melody
* -----------
*
* Program to play melodies stored in an array, it requires to know
* about timing issues and about how to play tones.
*
* The calculation of the tones is made following the mathematical
* operation:cdcdccdcdcc
*
*       timeHigh = 1/(2 * toneFrequency) = period / 2
*
* where the different tones are described as in the table:
*
* note frequency period PW (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
*
* (cleft) 2005 D. Cuartielles for K3
*/
int ledPin = 13;
int speakerOut = 7;              
byte names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C','p'}; 
int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956, 50};
byte melody[] = "2oa1p12a2p11d2p21a2p11d21f2p21d1p2a1p1c1p";
// count length: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
//                                10                  20                  30
int count = 0;
int count2 = 0;
int count3 = 0;
int MAX_COUNT = 24;
int statePin = LOW;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(speakerOut, OUTPUT);
}

void loop() {
  digitalWrite(speakerOut, LOW);    
  for (count = 0; count < MAX_COUNT; count++) {
    statePin = !statePin;
    digitalWrite(ledPin, statePin);
    for (count3 = 0; count3 <= (melody[count*2] - 48) * 30; count3++) {
      for (count2=0;count2<8;count2++) {
        if (names[count2] == melody[count*2 + 1]) {      
          digitalWrite(speakerOut,HIGH);
          delayMicroseconds(tones[count2]);
          digitalWrite(speakerOut, LOW);
          delayMicroseconds(tones[count2]);
        }
        if (melody[count*2 + 1] == 'p') {
          // make a pause of a certain size
          digitalWrite(speakerOut, 0);
          delayMicroseconds(500);
        }
      }
    }
  }
}




Comments

hah, good thinking! :) now

hah, good thinking! :) now we add rest beats. But this doesn't really fulfill the requirements of the lab. Please take a closer loko at the assignment.


Powered by Drupal - Design by Artinet