我正在进行一个使用Arduino测量输入方波频率的小项目,我使用定时器和硬件中断完成了这个项目,下面是我的代码:
#include <TimerOne.h>
long count1=0,freq1=0;
void setup(){
attachInterrupt(5,count,RISING);
Timer1.initialize(1000000); //increments count for 1 sec and prints out count
Timer1.attachInterrupt( freq ); // attach the service routine here
Serial.begin(9600);
}
void loop(){
while(freq1)
Serial.println(freq1);
}
void count()
{
count1++;
}
void freq(){
freq1 = count1;
count1=0;
}问题是,产值几乎是输入频率的两倍,我不知道它有什么问题。在Google搜索之后,我了解到了中断的情况。好像没起作用。
发布于 2017-01-20 17:27:48
有一个工作示例这里。它使用本机ISR函数(更快)而不是arduino中断处理程序。使用Timer1来获得最佳的分辨率和精度。
代码很大,但你感兴趣的部分是:
void () ISR(TIMER1_OVF_vect) -> for Timer1溢出计数器ISR(INT0_vect) //外部中断引脚2 D2 voidPulseCaptureScheduler_callback() //启动捕获并标记超时隙PrintInfoScheduler_callback() //处理结果
https://stackoverflow.com/questions/34776524
复制相似问题