Chumbaka

Dependencies:   Servo mbed Chumbaka_backup

Dependents:   Chumbaka_backup

Fork of Servo_HelloWorld by Simon Ford

Files at this revision

API Documentation at this revision

Comitter:
limcheecheng
Date:
Wed Apr 16 10:39:31 2014 +0000
Parent:
3:e836d1c41a0b
Child:
5:805d37469e22
Commit message:
add speaker library

Changed in this revision

Speaker/Speaker.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Speaker/Speaker.h	Wed Apr 16 10:39:31 2014 +0000
@@ -0,0 +1,52 @@
+class Speaker
+{
+public:
+    Speaker(PinName pin) : _pin(pin) {
+// _pin(pin) means pass pin to the Speaker Constructor
+// precompute 32 sample points on one sine wave cycle
+// used for continuous sine wave output later
+        for(int k=0; k<32; k++) {
+            Analog_out_data[k] = int (65536.0 * ((1.0 + sin((float(k)/32.0*6.28318530717959)))/2.0));
+            // scale the sine wave to 16-bits - as needed for AnalogOut write_u16 arg
+        }
+
+    }
+// class method to play a note based on AnalogOut class
+    void PlayNote(float frequency, float duration, float volume) {
+        // scale samples using current volume level arg
+        for(int k=0; k<32; k++) {
+            Analog_scaled_data[k] = Analog_out_data[k] * volume;
+        }
+        // reset to start of sample array
+        i=0;
+        // turn on timer interrupts to start sine wave output
+        Sample_Period.attach(this, &Speaker::Sample_timer_interrupt, 1.0/(frequency*32.0));
+        // play note for specified time
+        wait(duration);
+        // turns off timer interrupts
+        Sample_Period.detach();
+        // sets output to mid range - analog zero
+        this->_pin.write_u16(32768);
+
+    }
+private:
+// sets up specified pin for analog using AnalogOut class
+    AnalogOut _pin;
+    // set up a timer to be used for sample rate interrupts
+    Ticker Sample_Period;
+
+    //variables used by interrupt routine and PlayNote
+    volatile int i;
+    short unsigned Analog_out_data[32];
+    short unsigned Analog_scaled_data[32];
+
+// Interrupt routine
+// used to output next analog sample whenever a timer interrupt occurs
+    void Sample_timer_interrupt(void) {
+        // send next analog sample out to D to A
+        this->_pin.write_u16(Analog_scaled_data[i]);
+        // increment pointer and wrap around back to 0 at 32
+        i = (i+1) & 0x01F;
+    }
+};
+
--- a/main.cpp	Thu Mar 20 03:33:21 2014 +0000
+++ b/main.cpp	Wed Apr 16 10:39:31 2014 +0000
@@ -1,14 +1,20 @@
-#include "mbed.h"
+// Hello World to sweep a servo through its full range
 
-DigitalOut myled(LED2);
+#include "mbed.h"
+#include "Servo.h"
+
+Servo myservo(PTD4);
+
+int main() {    
 
-int main() 
-{
-    while(1) 
-    {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
-    }
-}
+//        myservo.calibrate(0.00095, 90.0);
+
+while (1){
+        myservo = 0;
+        wait(1);
+        myservo = 0.5;
+        wait(2);
+        myservo = 1.0;
+        wait(3);
+            }
+    }
\ No newline at end of file