我正在使用所示的代码。我有一个连接到引脚14的蜂鸣器。“ Sound_Play()”功能(产生声音0.5秒钟)仅在循环中第二次遇到时才起作用。
void loop() {
inside_loop=1;
TCCR1A=0; //initialize Timer1 for 1sec duration
TCCR1B=0X0D;
OCR1A=15624;
TIMSK1=0X02;
Sound_Play(); //This does not seem to work
block1=1; block2=0;
while(timer1_value>0)
{digitalWrite(13,HIGH);}
block1=0; block2=1;
Sound_Play(); //This works
while(timer2_value>0)
{digitalWrite(13,LOW);}
timer1_value=time1_sec;
timer2_value=time2_sec;
}
ISR(TIMER1_COMPA_vect)
{ if (block1==1) {timer1_value--;}
else if (block2==1) {timer2_value--;}
}
void Sound_Play(){ //activate timer2 for producing sound for 0.5 secs
TCCR2B=0x07;
TCCR2A=0x02;
OCR2A=35;
TIMSK2=0x02;
counting=110;
}
ISR(TIMER2_COMPA_vect)
{ if(inside_loop)
{
if(counting>0){
digitalWrite(14,HIGH);
counting = counting-1;
}
else{
TIMSK2=0x00; //deactivate timer2 on completing the time
digitalWrite(14,0);
}}
我尝试在循环内部使用一次函数。仅在第二次遇到时,它仍然使蜂鸣器响起。我认为中断的优先级一定不会造成这种情况。 请问有人可以解释为什么每次遇到此功能都不会发出声音吗? 谢谢! 布冯内斯