Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:88f7ab41bdce, committed 2011-05-09
- Comitter:
- zarquin
- Date:
- Mon May 09 03:43:21 2011 +0000
- Commit message:
- Version 0.1
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon May 09 03:43:21 2011 +0000 @@ -0,0 +1,121 @@ +#include "mbed.h" + +DigitalOut myled(LED1); + +DigitalIn pushButton(p23); +DigitalIn rotaryA(p21); +DigitalIn rotaryB(p22); + +AnalogIn pressure(p20); +AnalogIn pos1(p17); +AnalogIn top(p16); +AnalogIn bottom(p15); + +float wiper_f; +float top_f; +float bottom_f; +float vol_f; +float tmp_f; +int tmp_i; + +float pressureAvg[4]; +float wiperAvg[4]; + +AnalogOut signal(p18); + +Ticker sampleClock; +// 16 entry sinewave table. +char sineWave[]={127,175,216,244,255,244,216,175,127,78,37,9,0,9,36,78}; + +char sawWave[]={0,16,31,47,64,79,95,111,127,143,159,175,191,207,223,255}; + +unsigned int counter; +unsigned int counterSum; +unsigned int counterLimit = 2147483647; //31 bits 2^31 - 1 + +char temp; + +float byteToFloat(char in){ + float i = in; + return (i/255.0)*0.5; +} + +void sample2(){ + + + +} + +void sample(){ + + //useing a 31 bit counter. + counter = counter + counterSum; + if(counter > counterLimit){ + //wrap the counting. + counter = counter - counterLimit; + } + + //Fout = CounterSum*Fclk/MaxCount + + temp = counter>>27; //shift the top 4 bits down. + //float x = temp; + //signal.write(x/16.0); + + //write the output out + signal.write(vol_f*byteToFloat(sineWave[temp]) +0.5); +} + +int read_encoder() +{ + int8_t enc_states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0}; + static char old_AB = 0; + /**/ + old_AB <<= 2; + char x = rotaryA.read(); + x<<=1; + x = x+rotaryB.read(); //remember previous state + old_AB |= ( x & 0x03 ); //add current state + return ( enc_states[( old_AB & 0x0f )]); +} + +int main() { + + //setup variables. + tmp_i = 0; + counter = 0; + counterSum = 302365697; + counterSum = 18897856; + //counterSum = 1181116; + //18897856.1 + + vol_f = 0.0; + + //hook up sample() to the ticker. run the counter at 50kHz + sampleClock.attach_us(sample,20); + + while(1){ + wiper_f = pos1.read(); + bottom_f = bottom.read(); + + if(wiper_f >= bottom_f){ + // wiper is being pressed, play a note + top_f = top.read(); + + tmp_f = 1.0 - (wiper_f - bottom_f)/(top_f - bottom_f); + + vol_f = 1.0 - pressure.read(); + //ribbon is about 3 octaves worth. + //if the top is 440Hz = 18897856.1 + //44Hz = 1889785.61 + //55Hz is 2362232.013 //low A + tmp_i = (int)(16535624*tmp_f); + + counterSum = 2362232+ tmp_i; + + }else{ + vol_f = 0.0; + } + + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon May 09 03:43:21 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e