by Rob Toulson and Tim Wilmshurst from textbook "Fast and Effective Embedded Systems Design: Applying the ARM mbed"
main.cpp
- Committer:
- robt
- Date:
- 2013-06-16
- Revision:
- 0:581963db97d8
File content as of revision 0:581963db97d8:
/* Program Example 11.3 Delay / Echo Effect */ #include "mbed.h" AnalogIn Ain(p15); //object definitions AnalogOut Aout(p18); AnalogIn delay_pot(p16); AnalogIn feedback_pot(p17); Ticker s20khz_tick; void s20khz_task(void); // function prototypes #define MAX_BUFFER 14000 // max data samples signed short data_in; // signed allows positive and negative unsigned short data_out; // unsigned just allows positive values float delay=0; float feedback=0; signed short buffer[MAX_BUFFER]={0}; // define buffer and set values to 0 int i=0; //main program start here int main() { s20khz_tick.attach_us(&s20khz_task,50); } // function 20khz_task void s20khz_task(void){ data_in=Ain.read_u16()-0x7FFF; // read data and normalise buffer[i]=data_in+(buffer[i]*feedback); // add data to buffer data data_out=buffer[i]+0x7FFF; // output buffer data value Aout.write_u16(data_out); // write output if (i>(delay)){ // if delay loop has completed i=0; // reset counter delay=delay_pot*MAX_BUFFER; // calculate new delay buffer size feedback=(1-feedback_pot)*0.9; // calculate feedback gain value }else{ i=i+1; // otherwise increment delay counter } }