我知道 Arduino 有三个计时器(timer0、timer1、timer2),一个是 16 位,另一个是 8 位,但我不知道如何使用它们,如果可能的话,我可以在同一个项目中使用这三个计时器,每个都有不应该发生冲突的不同时间间隔。我假设我需要一个库来调用它们,但我不知道是哪一个。所有定时器都将运行函数而不直接与引脚交互,最短时间间隔将设置为 1/3 秒,最长时间间隔将在 2 秒到 0.5 秒之间变化。如果有人能给我一个带有三个计时器的草图示例,我可能会对我需要做什么有所了解。
问问题
3974 次
2 回答
0
简短的回答是:TimerThree 不适用于 Arduino UNO!它使用 Atmega328 CPU,它只包含:Timer0(由 Arduino 代码内部用于 millis()),Timer1 是 16 位定时器并且可用,Timer2 是一个 8 位定时器。
TimerThree 仅适用于 ATMEGA2560 或类似芯片,因此仅适用于 Arduino MEGA。
在包含 TimerThree 的页面上有一个完全错误的描述:首先,没有明确声明 TimerThree 不能与 UNO 一起使用,更糟糕的是,有一个声明说 TimerThree 库是由 Jérôme Despatis 于 2009 年 3 月修改的和 Jesse Tane 支持 ATmega328 显然是胡说八道。
于 2015-01-05T20:04:02.423 回答
0
您可以按间隔的最小公分母运行单个计时器。
为此,您需要有一个堆来存储要触发的事件。然后,每当您插入或触发事件时,您都会通过查看堆顶来更新计时器以获取您想要的最早事件。如果这比正在运行的任何东西都快,或者没有任何东西在运行,则更新计时器以触发新事件。当事件触发时,您将其从堆中移除。如果要定期触发,可以使用 now() + period 的新“时间”将事件添加回堆中。
于 2013-12-02T14:24:17.560 回答