by Rob Toulson and Tim Wilmshurst from textbook "Fast and Effective Embedded Systems Design: Applying the ARM mbed"
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
Generated on Sat Sep 10 2022 14:02:21 by 1.7.2