【发布时间】:2014-04-25 02:04:06
【问题描述】:
在基于 Leonardo 板的 Arduino Esplora 上,驱动 RGB LED 的红色组件的引脚 5 的 PWM 支持看起来与tone 功能共享一个定时器。这会产生意想不到的后果,即在播放音调后使 Red 组件变得无用,因为它的行为变得不可预测。
这是一个简单的setup 例程来演示问题:
void setup()
{
//analogWrite(5, 255);
//delay(1000);
analogWrite(5, 1);
delay(2000);
Esplora.tone(440);
delay(1000);
Esplora.noTone();
}
这会将 LED 的红色通道打开到最低设置并保持两秒钟,然后播放 440 HZ 音调 1/4 秒,但只要音调开始,而不是保持低亮度, LED 完全熄灭。
如果您取消前两行的注释,这一次当音调开始时,而不是像以前那样(错误地)关闭,它现在(同样错误地)恢复为全亮度。
在调用tone 之后,我无法弄清楚如何恢复 Red 组件(或更具体地说是引脚 5 上的 PWM)的正常功能。
我的猜测是为声音生成合适的 HZ,tone 更改了定时器的设置,这会影响 PWM 功能。如果我能找到如何手动重置计时器以再次正确支持 LED 的 PWM,那可能就是解决方案。但是我是 Arduino、计时器等的新手,所以这纯粹是猜测,我可能对这种方法或我对它的理解完全错误,但从我读过的内容来看,这似乎是朝着正确的方向发展.
那么有人知道如何在该引脚上恢复正确的 PWM 功能吗?
标记
【问题讨论】:
-
故障前后的TCCR3A、TCCR3B、TCCR4A、TCCR4B、TCCR4C、TCCR4D、TCCR4E的值是多少(请用十六进制表示)?
-
Arduino 新手。我如何检查这些?任何草图代码将不胜感激。 (你是不是投票给我的人?如果是,请详细说明原因??)
-
通过串口输出即可。
-
使用这些名称调用 Serial.write(),我得到以下信息: 之前:TCCR3A:1 TCCR3B:3 TCCR4A:2 TCCR4B:7 TCCR4C:1 TCCR4D:1 TCCR4E:0 之后:TCCR3A: 0 TCCR3B: 9 TCCR4A: 2 TCCR4B: 7 TCCR4C: 1 TCCR4D: 1 TCCR4E: 0(你的意思是二进制吗?十六进制和十进制对于所有小于等于 9 的值都是相同的。)