use an accelerometer to generate sounds
Dependencies: FXOS8700CQ mbed
Diff: main.cpp
- 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) + +}