Timer Arduino计时器似乎要崩溃了?

Timer Arduino计时器似乎要崩溃了?,timer,arduino,dmx512,Timer,Arduino,Dmx512,对于一些交互式装置的展览,我必须创建一个系统,从三个超声波PING传感器读取数据,并在一个输出端连接一个调光器 因此,我拿起我的主板,围绕它构建了一些硬件(DMX的信号逆变器),并使用该库测试了DMX调光器。很好用 下一步:测试PING传感器。我使用了图书馆,连接了传感器。很好用 现在,在一个程序中,将两个库合并在一起:使用相同的代码导入两个库它不工作 计时器碰撞?嗯……无论如何——我不知道如何解决这个问题。我该怎么办?如果是计时器问题(即,两个库调用同一个计时器),我真的不知道如何修改库以使其

对于一些交互式装置的展览,我必须创建一个系统,从三个超声波PING传感器读取数据,并在一个输出端连接一个调光器

因此,我拿起我的主板,围绕它构建了一些硬件(DMX的信号逆变器),并使用该库测试了DMX调光器。很好用

下一步:测试PING传感器。我使用了图书馆,连接了传感器。很好用

现在,在一个程序中,将两个库合并在一起:使用相同的代码导入两个库它不工作


计时器碰撞?嗯……无论如何——我不知道如何解决这个问题。我该怎么办?如果是计时器问题(即,两个库调用同一个计时器),我真的不知道如何修改库以使其工作。

Arduino上有两个计时器,您可以将这两个计时器放在一边。DmxSimple明确表示它使用计时器#2,而NewPing则不清楚。但是NewPing库可以在不使用计时器的情况下工作。您可以使用DmxSimple的计时器使其工作(这对于与其总线的近实时交互是必需的),而您可以处理sonar ping in-the-loop功能:

void loop() {
    int dst = sonar.ping_cm();
    delay(50);
    DmxSimple.write(1, dst);
}
在那里,你不应该让计时器发生冲突

查看NewPing的源代码,如果使用
timer\u-us()
/
timer\u-ms()
函数,则使用Timer2,否则使用无定时器。但是,如果您在(或任何其他基于微控制器的)上运行它,它将使用与DmxSimple不冲突的Timer4

如果要修补NewPing库以使用Timer3,则可能需要在NewPing.cpp中替换它:

OCR2A = 249;
TIMSK2 |= (1 << OCIE2A);
OCR2A=249;

TIMSK2 |=(1Arduino上有两个计时器,您可以将这两个计时器都放在一边。DmxSimple明确表示它使用计时器#2,而对于NewPing则不清楚。但是NewPing库可以在不使用计时器的情况下工作。您可以使用其计时器使DmxSimple工作(这对于与其总线的近实时交互是必需的),而您可以处理sonar ping in-the-loop功能:

void loop() {
    int dst = sonar.ping_cm();
    delay(50);
    DmxSimple.write(1, dst);
}
在那里,你不应该让计时器发生冲突

查看NewPing的源代码,如果您使用
timer_us()
/
timer_ms()
函数,它将使用Timer2,但如果您在(或任何其他基于微控制器的)上运行它,它将使用与DmxSimple不冲突的Timer4

如果要修补NewPing库以使用Timer3,则可能需要在NewPing.cpp中替换它:

OCR2A = 249;
TIMSK2 |= (1 << OCIE2A);
OCR2A=249;

TIMSK2 |=(1)谢谢你的帮助,zmo!我似乎已经找到了一种方法。我将NewPing库中的Timer2改为Timer4。虽然我不知道自己在做什么,但我一直在尝试并出错,直到得到一些有用的结果。然而,你的建议,在Ping代码中使用延迟,对我没有帮助,因为我真的必须避免任何类型的错误f延迟陷阱,由于我程序的其余部分需要一个常数(和“不间断”)更新。也许你想看看修改过的NewPing库,在那里我尝试用计时器4替换计时器2。说我正在开发Arduino Mega 1280可能会很有趣。谢谢你的帮助,zmo!我似乎已经想出了一个办法。我把NewPing库中的计时器2改成了计时器4。虽然我不知道自己在做什么ing我不断地尝试和出错,直到得到一些有用的结果。然而,你的建议在Ping代码中使用延迟对我没有帮助,因为我真的必须避免任何类型的延迟陷阱,因为我的程序的其余部分需要一个常量(和“不间断”)更新。也许你想看看修改过的NewPing库,在那里我试着用定时器4替换定时器2。说我正在开发Arduino Mega 1280可能会很有趣。
TIMSK3 &= ~(1 << OCIE3A);