#include #include #include #include"fix_fft.h" #include"avr_adc.h" #include"light_ws2812_AVR/Light_WS2812/ws2812_config.h" #include"light_ws2812_AVR/Light_WS2812/light_ws2812.h" #include"main.h" #define STARTADC ADCSRA |= (1< 16 bins // //1-7.8 - ca 130hz //2- 255hz //3- 380 //4- 505 //5- 630 //6- 755 //7- 880 //8- 1kHz // const float log_scale = 64./log(64./SCALE_FACTOR + 1.); int msec; uint16_t ticks; ISR(TIMER1_OVF_vect) { if(ticks < 65000) { ticks++; } if(ticks > 65000) { ticks=0; } } int main (void) { int i,i2; int sum,avg; char sample[64]; char buff[64]; float fac_r=0.1; float fac_g=0.1; float fac_b=1; msec=0; ticks=0; struct cRGB led_bar1[8]; //DDRB = (1< 1/ca30'000'00r avg = sum/64;//calculate bias for(i=0;i<64;i++) { sample[i]-=avg;//remove bias } fix_fftr(sample,6,0);//im[i] is alwa§§ys zero //####Averaging Data#### // for(i=0;i<64;i++) { if(sample[i]<0) sample[i] = 0; if(sample[i]>64) sample[i]=64; sample[i] = sample[i] *SCALE_FACTOR; sample[i] = (sample[i]*0.7 + buff[i]*0.3); buff[i] = sample[i]; } for(i=0;i<8;i++) { for(i2=1;i2<=4;i2++) { sample[i] = ((sample[i] + sample[i*8+i2])/2); } //avg written to sample[0..7] if(sample[i]<20) { led_bar1[i].r=(char)sample[i]*fac_r; led_bar1[i].g=(char)sample[i]*fac_g; led_bar1[i].b=(char)sample[i]*fac_b; } else if(sample[i]<30) { led_bar1[i].r=(char)sample[i]*fac_r*2; led_bar1[i].g=(char)sample[i]*fac_g/2; led_bar1[i].b=(char)sample[i]*fac_b/2; } else if(sample[i]<50) { led_bar1[i].r=(char)sample[i]*fac_r*2; led_bar1[i].g=(char)sample[i]*fac_g*2; led_bar1[i].b=(char)sample[i]*fac_b*2; } } ws2812_setleds(led_bar1,8); while(ticks<60){ asm("");}//workaround for stoping gcc optimizing } return 0; } void setupTimer(void) { clock_prescale_set(0); TCCR1 = (1<