This is the code my professor and I have been working with, although I don't believe this is really what we need. The accelerometer is giving input values between 320 and 350 we are only using the x-axis and I just need a time equation for the time lapse between when the rocker hits 320 and 350. Is there a time based code, that could deliver the beats per minute to the serial port and eventually to the piezo speaker. Thanks again, kalear20
This code was created using multiple other codes all combined and we have loaded it and we got nothing.
/* 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
*/
int speakerPin = 9;
int xpin = 0; // x-axis of the accelerometer 2
//int ypin = 1; // y-axis 2
//int zpin = 2; // z-axis (only on 3-axis models) 2
int prevX = 0;
int currX = 0;
int prevAccel = 0;
int currAccel = 0;
int pause = 100; //delay time 2
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 = 100;
void setup(){
pinMode(speakerPin, OUTPUT);
prevX = analogRead(xpin);
prevAccel = (currX - prevX)/pause;
}
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 == note) {
_ playTone(tones*, duration);_
_ }_
_ }_
_}_
void loop(){
_ //Acceleration formula: a = (V2 - V1)/T;_
_ //Acceleration: a = (currX - prevX)/pause;_
_ currX = analogRead(xpin);_
_ currAccel = (currX - prevX)/pause;_
_ if (currAccel > prevAccel);{_
_ //output text/serial trigger*_
* digitalWrite(speakerPin, HIGH); // set the SPEAKER on*
* }*
* prevX = currX;*
* prevAccel = currAccel;*
* for (int i = 0; i < length; i++) {*
_ if (notes == ' ') {
delay(beats * tempo); // rest
* } else {_
playNote(notes, beats _ tempo);
* }*_
* delay(tempo / 2); // pause between notes*
* }*
* digitalWrite(speakerPin, LOW); // set the SPEAKER off*
* delay(pause); //pause 100 ms.. [10 checks per second]*
* }*