by Rob Toulson and Tim Wilmshurst from textbook "Fast and Effective Embedded Systems Design: Applying the ARM mbed"

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* Program Example 11.3 Delay / Echo Effect
00002                                                                 */
00003 #include "mbed.h"
00004 AnalogIn Ain(p15);              //object definitions
00005 AnalogOut Aout(p18);
00006 AnalogIn delay_pot(p16);
00007 AnalogIn feedback_pot(p17);
00008 Ticker s20khz_tick; 
00009 void s20khz_task(void);         // function prototypes
00010 #define MAX_BUFFER 14000        // max data samples
00011 signed short data_in;           // signed allows positive and negative
00012 unsigned short data_out;        // unsigned just allows positive values
00013 float delay=0;
00014 float feedback=0;
00015 signed short buffer[MAX_BUFFER]={0}; // define buffer and set values to 0 
00016 int i=0;
00017 
00018 //main program start here
00019 int main() {
00020   s20khz_tick.attach_us(&s20khz_task,50);  
00021 }
00022 // function 20khz_task
00023 void s20khz_task(void){
00024   data_in=Ain.read_u16()-0x7FFF;           // read data and normalise
00025   buffer[i]=data_in+(buffer[i]*feedback);  // add data to buffer data
00026   data_out=buffer[i]+0x7FFF;               // output buffer data value
00027   Aout.write_u16(data_out);                // write output
00028   if (i>(delay)){                          // if delay loop has completed
00029     i=0;                              // reset counter
00030     delay=delay_pot*MAX_BUFFER;       // calculate new delay buffer size
00031     feedback=(1-feedback_pot)*0.9;    // calculate feedback gain value
00032   }else{
00033     i=i+1;                            // otherwise increment delay counter
00034   }  
00035 }
00036