use an accelerometer to generate sounds

Dependencies:   FXOS8700CQ mbed

Revision:
0:c482a7d7d833
Child:
1:c3cb527a2aa6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon May 09 19:51:02 2016 +0000
@@ -0,0 +1,62 @@
+#include "mbed.h"       // this tells us to load mbed related functions
+#include "tones.h"                   // list of all the tones and their frequencies
+#include "fxos8700cq/fxos8700cq.h"   // library for the accelerometer
+
+InterruptIn btn2(SW2);               // we create a variable 'btn2', use it as an in port
+InterruptIn btn3(SW3);               // we create a variable 'btn3', use it as an in port
+
+PwmOut buzzer(D3);                   // our buzzer is a PWM output (pulse-width modulation)
+AnalogIn pad(A0);                    // connect a pad to the analog input
+
+Ticker readTicker;
+
+// Set up the accelerometer (this is specific to the onboard one)
+InterruptIn accel_interrupt_pin(PTC13);
+FXOS8700CQ accel(PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1);
+
+static void silence() {
+    buzzer.write(0.0f); // silence!
+}
+
+// this is our function that plays a tone. 
+// Takes in a tone frequency, and after duration (in ms.) we stop playing again
+static void play_tone(int tone) {
+    buzzer.period_us(tone);
+    buzzer.write(0.10f); // 10% duty cycle, otherwise it's too loud
+}
+
+static bool is_pad_high = false;
+static void read_pad() {
+    // YOUR CODE HERE (2)
+}
+
+static void play_note1() {
+    play_tone(NOTE_C4);
+}
+static void play_note2() {
+    play_tone(NOTE_D4);
+}
+
+// YOUR CODE HERE (1)
+
+// this code runs when the microcontroller starts up
+int main() {
+    // play note when we fall
+    btn2.fall(play_note1);
+    btn3.fall(play_note2);
+    
+    // silence when we rise
+    btn2.rise(silence);
+    btn3.rise(silence);
+    
+    // accelerometer setup
+    accel_interrupt_pin.fall(play_note3);
+    accel_interrupt_pin.mode(PullUp);
+    
+    accel.config_int();      // enabled interrupts from accelerometer
+    accel.config_feature();  // turn on motion detection
+    accel.enable();          // enable accelerometer
+
+    readTicker.attach(&read_pad, 0.03); // the address of the function to be attached (flip) and the interval (in seconds)    
+
+}