对于一个有一些交互式安装的展览,我必须创建一个系统,它可以读取三个超声波PING传感器的数据,并在一个输出端连接一个DMX调光器。
于是我拿起我的阿迪诺·梅加板,在它周围搭建了一些硬件(用于DMX的信号转换器),并使用库DmXSimple测试了DMX调光器。很好用!
下一步:测试PING传感器。我使用了库NewPing,连接了传感器。很好用!
现在,这两个程序在一个程序中:使用相同的代码导入两个库。,它不起作用!
计时器碰撞?Well...anyway -我不知道怎么解决这个问题。我该怎么办?如果这是一个计时器问题(也就是说,两个库都调用同一个计时器),我真的不知道如何修改库以使其正常工作。
发布于 2013-06-20 13:11:01
在Arduino上有两个计时器,您可以把这两个作品都放在一边。DmxSimple显式地说它使用计时器#2,而对于NewPing则不清楚。但是NewPing库不需要使用计时器就可以工作。您可以让DmxSimple使用它的计时器(这对于与其总线进行接近实时的交互是强制性的),而您可以在循环函数中处理声纳定位:
void loop() {
int dst = sonar.ping_cm();
delay(50);
DmxSimple.write(1, dst);
}你不应该让计时器冲突的。
查看NewPing的源代码,如果您使用timer_us()/timer_ms()函数,那么它将使用timer_us(),但如果不是使用,则不会使用timer。但是,如果您在阿迪诺·莱昂纳多 (或Arduino微公司或其他基于ATmega32U4的微控制器)上运行它,它将使用与DmxSimple不冲突的Timer4。
如果要修补NewPing库以使用Timer3,则可能需要在NewPing.cpp中替换它:
OCR2A = 249;
TIMSK2 |= (1 << OCIE2A);使用
OCR3A = 640;
TIMSK3 |= (1 << OCIE3A);在stop_timer中:
TIMSK2 &= ~(1 << OCIE2A);使用
TIMSK3 &= ~(1 << OCIE3A);https://stackoverflow.com/questions/17208703
复制相似问题