Alwyn Nixon-Lloyd / Mbed 2 deprecated ribbonWithDDS

Dependencies:   mbed

Files at this revision

API Documentation at this revision

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