![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Fourier series square wave
Diff: main.cpp
- Revision:
- 0:3052351a8da9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Mar 09 02:29:54 2017 +0000 @@ -0,0 +1,81 @@ +#include "mbed.h" +#include <math.h> +int i=1,N=50,q=0; + +float wt=0; + + +float aout1=0,aout2=0; +AnalogOut aout(PA_4); +AnalogIn V_adc(PB_1); +float Vr_adc; +Serial pc(USBTX,USBRX); + +DigitalOut myled(LED1); + +Timer timer1; + + +int main(){ + + pc.baud(128000); + const float freq = 10;//50 + + timer1.start(); + + while(1) { + Vr_adc=V_adc.read(); + if(Vr_adc<0.005f){ + N=1; + } + if((Vr_adc>0.005f)&&(Vr_adc<=0.1f)){ + N=2; + } + if((Vr_adc>0.1f)&&(Vr_adc<=0.2f)){ + N=5; + } + if((Vr_adc>0.2f)&&(Vr_adc<=0.4f)){ + N=10; + } + if((Vr_adc>0.4f)&&(Vr_adc<=0.6f)){ + N=20; + } + if((Vr_adc>0.6f)&&(Vr_adc<=0.8f)){ + N=30; + } + if(Vr_adc>0.8f){ + N=60; + } + float s = timer1.read(); + myled = ((int)s) % 2 == 0; /* LED output(0.5Hz) */ + wt=fmodf(s * freq, 1) * 3.14159265359 * 2; + for(i=1;i<=2*N-1;i=i+2){ + //aout2 = VDD/2 +2/VDD* (sin(wt)+sin(3*wt)/3+sin(5*wt)/5+.......) + if(i==0){ + aout1=sin((i-1)*wt)/(i-1); //if i==N i even + } + else{ + aout1=sin(i*wt)/i; + } + aout2=aout2+aout1; + + } + + aout=0.1+(3.3/2+(2*3.3/3.14159265359)*aout2)/5; //VDD=3.3 + aout2=0; + myled = !myled; + if(q>100000){ + timer1.reset(); + q=0; + } + q++; + // if((q%100)==0){ + pc.printf("%.3f \r" ,aout*10); + // } + + } + + + + +}