我正在开发一个使用Arduino测量输入方波频率的小项目,我使用定时器和硬件中断来完成它,这是我的代码:
internal class Node
{
private int ID { get; private set; }
private string NodeQuestion { public get; public set; }
private int State { public get; public set; } // 0 for Non-Visited, 1 for Visited
private Node Left { public get; public set; }
private Node Right { public get; public set; }
public Node(...)
{
....
}
.
.
.
}
问题是输出值几乎是输入频率的两倍, 我不知道它有什么问题。我在谷歌密集搜索后了解到了中断。似乎它不起作用。
答案 0 :(得分:0)
有一个工作示例here。 它使用本机ISR功能(更快)而不是arduino中断处理程序。 使用Timer1获得最佳分辨率和精度。
代码很大但你感兴趣的部分是:
The "// Setup Timer1 for precise timing" portion of void setup() ISR(TIMER1_OVF_vect) -> for timer1 overflow counter ISR(INT0_vect) // External Interrupt pin 2 [D2] void PulseCaptureScheduler_callback() // Starts a capture and flags a timeout void PrintInfoScheduler_callback() // Processes the results