代码分为两个部分。第一部分,写Amanda Ghassaei,接收音频输入通过Arduino的模拟数字转换器。
从setup()无效;
cli();/ /禁用中断 /设置连续采样的模拟引脚0在38.5khz /清晰的adcsra和adcsrb寄存器 adcsra = 0; adcsrb = 0; admux | =(1 << refs0);//设置参考电压 admux | =(1 <<超前设计的直线加速器放射外科);//左对齐的ADC值,我们可以读到最高的8位adch登记只 adcsra | =(1 << adps2)|(1 << adps0)设置ADC的时钟32分频器- 16mhz / 32 = 500khz /; adcsra | =(1 <<日期);//启用自动触发 adcsra | =(1 <<艾迪);//使中断时,测量完成 adcsra | =(1 <<亚丁);//使ADC adcsra | =(1 << ADSC);//启动ADC测量 sei();/
此外,本节讨论的频率检测。它通过内部形成图。然后处理此图,检测振荡频率形成。
ISR(adc_vect){ //当新的ADC值准备 prevData = newData;//store previous value newData = ADCH;//get value from A0 if (prevData < 127 && newData >=127){//if increasing and crossing midpoint newSlope = newData - prevData;//calculate slope if (abs(newSlope-maxSlope) 9){ reset(); } } } else if (newSlope>maxSlope){//if new slope is much larger than max slope maxSlope = newSlope; time = 0;//reset clock noMatch = 0; index = 0;//reset index } else{//slope not steep enough noMatch++;//increment no match counter if (noMatch>9){ reset(); } } } time++;//increment timer at rate of 38.5kHz ampTimer++;//increment amplitude timer if (abs(127-ADCH)>maxAmp){ maxAmp = abs(127-ADCH); } if (ampTimer==1000){ ampTimer = 0; checkMaxAmp = maxAmp; maxAmp = 0; } }
无效reset() { //清除一些变量 指数= 0;//复位指数 nomatch = 0;//重置对手反 maxslope = 0;//设置边坡 }
第二部分决定如何处理收到的频率,并通过diracakteers写。在这一部分中,从上面的频率进行比较的频率所需的音符的频率确定注。有一次,被确定的频率,然后代码驱动七段LED显示和适当。
frequencycheck() { void if(frequency>70&&frequency<90){ // Displays E on the seven segment display and turns on two LEDs digitalWrite(2,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(10,LOW); digitalWrite(11,HIGH); } else if(frequency>100&&frequency<120){ // Displays A on the seven segment display and turns on two LEDs digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(10,LOW); digitalWrite(11,HIGH); } else if(frequency>135&&frequency<155){ // Displays D on the seven segment display and turns on three LEDs digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); digitalWrite(8,HIGH); digitalWrite(10,LOW); digitalWrite(11,HIGH); digitalWrite(12,HIGH); } else if(frequency>186&&frequency<205){ // Displays G on the seven segment display and turns on three LEDs digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(10,LOW); digitalWrite(11,HIGH); digitalWrite(12,HIGH); } else if(frequency>235&&frequency<255){ // Displays B on the seven segment display and turns on three LEDs digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(10,LOW); digitalWrite(11,HIGH); digitalWrite(12,HIGH); } else if(frequency>320&&frequency<340){ // Displays E on the seven segment display and turns on four LEDs digitalWrite(2,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(10,LOW); digitalWrite(11,HIGH); digitalWrite(12,HIGH); digitalWrite(13,HIGH); } else{ digitalWrite(8,HIGH); } } // void allOff(){ // turn off each segment of the seven segment显示所有的LED digitalwrite(2,低); digitalwrite(3,低); digitalwrite(4,低); digitalwrite(5,低); digitalwrite(6,低); digitalwrite(7,低); digitalwrite(8,低 digitalwrite);(9,低); digitalwrite(10,低); digitalwrite(11,低); digitalwrite(12,低
(责任编辑:admin)