Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: voiceecho.cpp
- Revision:
- 1:5972dbd390c8
- Parent:
- 0:f99e355ba60d
- Child:
- 2:718d996170c2
diff -r f99e355ba60d -r 5972dbd390c8 voiceecho.cpp
--- a/voiceecho.cpp Wed Apr 17 03:23:25 2019 +0000
+++ b/voiceecho.cpp Wed Apr 17 04:53:40 2019 +0000
@@ -1,12 +1,10 @@
#include "mbed.h"
-/* IO pin defines*/
DigitalOut led1(LED1);
PwmOut pwm(p21);
AnalogIn mic(p20);
AnalogOut spk(p18);
-Ticker readtick, writetick;
-// Serial pc(USBTX, USBRX);
+Ticker voicetick;
#define WAVMAX 7000 /*buffer size; SAMPFREQ*DEALY<WAVMAX*/
#define SAMPFREQ 16000.0
@@ -53,9 +51,7 @@
line[index++]=ch;
this->putc(ch);
break;
- }
- }
- }
+ } } }
public:
KBline(PinName tx, PinName rx) : Serial(tx, rx)
{
@@ -77,41 +73,31 @@
}
} ;
-void read_wave() /*timer driven*/
-{
- wave[readindex++]= mic.read_u16(); //mic.read()*30000;
- if (readindex>=WAVMAX) readindex=0;
+int newindex(int ix)
+{ if (ix<0) ix += WAVMAX;
+ return(ix % WAVMAX); }
+
+void voice_io() /*timer driven*/
+{ unsigned short val;
+ wave[readindex]= mic.read_u16(); //mic.read()*30000;
+ val=wave[writeindex];
+ pwm.write((float)val/65536.0);
+ spk.write_u16(val); // (val/30000.0 );
+ readindex=newindex(readindex+1);
+ writeindex=newindex(writeindex+1);
}
-void new_writeindex(int wi)
-{
- if (wi<0) wi += WAVMAX;
- writeindex=wi % WAVMAX;
-}
-
-void write_wave()
-{
- unsigned short val=wave[writeindex];
- pwm.write(val*0.001);
- spk.write_u16(val); // (val/30000.0 );
- new_writeindex(writeindex+1);
- // wave[index] +=val<<1;
-}
-
-// main() runs in its own thread in the OS
int main()
{
KBline pc(USBTX, USBRX);
float delay=DELAY;
pc.baud(9600);
- pwm.period_us(50);
+ pwm.period_us(32); /* 62.5us*/
delay=DELAY;
readindex=0;
- new_writeindex(readindex-delay*SAMPFREQ);
-
- readtick.attach(read_wave, 1.0/SAMPFREQ);
- writetick.attach(write_wave, 1.0/SAMPFREQ);
+ writeindex=newindex(readindex-delay*SAMPFREQ);
+ voicetick.attach(voice_io, 1.0/SAMPFREQ);
pc.printf("echo machine delay=%fs\n\r", delay);
while (true) {
pc.start_getline();
@@ -119,9 +105,9 @@
led1 = !led1;
wait(0.2);
}
- delay=(pc.line[0]-'0') *0.1; /* multiple of 0.1s */
- new_writeindex(readindex-delay*SAMPFREQ);
- pc.printf("new delay %5.2fs %d \n\r", delay, (readindex-writeindex)% WAVMAX);
+ sscanf(pc.line,"%f", &delay); /* multiple of 0.1s */
+ writeindex=newindex(readindex-delay*SAMPFREQ);
+ pc.printf("new delay %5.2fs r=%d w=%d val=%d\n\r", delay, readindex, writeindex, wave[writeindex]);
}
}