如何解决Arduino 未检测到 50Hz 方波信号的上升沿
我想检测方波信号的所有上升沿并通过串行监视器输出它们。我为此使用了 Arduino UNO,它应该使用中断引脚来检测边缘。信号来自信号发生器(信号是可调的(50Hz 是可取的)。我在下面写了这个代码,但它不起作用,因为如果我设置频率并启动代码,例如在 f=1Hz 20中断被触发!
有人能告诉我我应该如何以及使用哪种方法来实现 Arduino 的这种操作吗?
提前致谢。
volatile int counter = 0;
const int interruptPin = 2;
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(interruptPin),interrupt_call,CHANGE);
}
void interrupt_call() {
counter++;
}
void loop() {
if(counter){
Serial.println(counter);
counter=0;
}else{
Serial.println(counter);
}
}
解决方法
如果要检测上升沿,请更改以下行:
attachInterrupt(digitalPinToInterrupt(interruptPin),interrupt_call,CHANGE);
致:
attachInterrupt(digitalPinToInterrupt(interruptPin),RISING);
当计数器变量为零时不要打印它,因此从 loop
函数中删除以下几行:
}else{
Serial.println(counter);
您的中断引脚可能悬空。您是否将其配置为输入引脚?在 setup
函数中,在包含 attachInterrupt()
的行之前添加以下行:
pinMode(interruptPin,INPUT_PULLUP);
现在,您应该会看到在 loop
函数期间发生的上升沿的数量。
将其设置为一个较高的值(例如,10 秒),看看您的 1 Hz 方波是否得到大约 10。如果它不起作用,请在此处发布 main
函数/完整代码。
感谢您的帮助!我已经纠正了我所有的错误。不幸的是,现在输出相同的错误。我将输出作为图像发布在这里。这是什么原因?中断通过吗?
易失性整数计数器 = 0; const int interruptPin = 3;
void setup() {
Serial.begin(9600);
pinMode(interruptPin,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin),RISING);
}
void interrupt_call() {
counter++;
}
void loop() {
if(counter){
Serial.println(counter);
counter=0;
}
}
,
感谢您的快速回复。我的意思是,如果我将信号发生器的频率设置为 1Hz 然后启动代码,则在每个周期数次中检测到中断的上升沿,但实际上中断每个时间段可能只触发一次并在 Serielen 中输出监视器。我已将输出上传为图像。如果您提供提示或想法,我将不胜感激。
,我认为您调用 loop
函数的代码部分丢失了,但我刚刚意识到对于典型的 arduino 代码,延迟必须插入到 loop
函数本身中。>
所以你可以通过将 delay(1000)
附加到 loop
函数来添加它,所以它变成:
void loop()
{
if (counter) {
Serial.println(counter);
counter=0;
}
delay(1000);
}
在本例中,循环的周期为 1000
毫秒。因此,您现在应该看到一秒内出现的上升沿(如果有)的数量,而不是每次出现时都打印“1”。
请注意,您可以通过编辑问题而不是添加其他答案来提供有关问题的更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。