首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阿迪诺定时器好像要崩溃了?

阿迪诺定时器好像要崩溃了?
EN

Stack Overflow用户
提问于 2013-06-20 08:23:39
回答 1查看 976关注 0票数 1

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

于是我拿起我的阿迪诺·梅加板,在它周围搭建了一些硬件(用于DMX的信号转换器),并使用库DmXSimple测试了DMX调光器。很好用!

下一步:测试PING传感器。我使用了库NewPing,连接了传感器。很好用!

现在,这两个程序在一个程序中:使用相同的代码导入两个库。,它不起作用!

计时器碰撞?Well...anyway -我不知道怎么解决这个问题。我该怎么办?如果这是一个计时器问题(也就是说,两个库都调用同一个计时器),我真的不知道如何修改库以使其正常工作。

EN

回答 1

Stack Overflow用户

发布于 2013-06-20 13:11:01

在Arduino上有两个计时器,您可以把这两个作品都放在一边。DmxSimple显式地说它使用计时器#2,而对于NewPing则不清楚。但是NewPing库不需要使用计时器就可以工作。您可以让DmxSimple使用它的计时器(这对于与其总线进行接近实时的交互是强制性的),而您可以在循环函数中处理声纳定位:

代码语言:javascript
复制
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中替换它:

代码语言:javascript
复制
OCR2A = 249;
TIMSK2 |= (1 << OCIE2A);

使用

代码语言:javascript
复制
OCR3A = 640;
TIMSK3 |= (1 << OCIE3A);

在stop_timer中:

代码语言:javascript
复制
TIMSK2 &= ~(1 << OCIE2A);

使用

代码语言:javascript
复制
TIMSK3 &= ~(1 << OCIE3A);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17208703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档