使用Arduino测量频率

时间:2016-01-13 20:34:15

标签: c++ arduino

我正在开发一个使用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(...)
   {
     ....
   }
   .
   .
   .
}

问题是输出值几乎是输入频率的两倍, 我不知道它有什么问题。我在谷歌密集搜索后了解到了中断。似乎它不起作用。

1 个答案:

答案 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