我想要检测方波信号的所有上升沿,并通过串行监视器输出它们。为此,我使用了Arduino UNO,它应该使用中断引脚来检测边缘。信号来自信号发生器(信号是可调的(50 be是理想的))。我已经在下面写了这段代码,但它不起作用,因为如果我设置频率并启动代码,例如在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);
}
}发布于 2021-06-08 13:04:54
如果要检测上升沿,请更改以下行:
attachInterrupt(digitalPinToInterrupt(interruptPin), interrupt_call, CHANGE);至:
attachInterrupt(digitalPinToInterrupt(interruptPin), interrupt_call, RISING);当计数器变量为零时,不要打印它,因此从loop函数中删除以下行:
}else{
Serial.println(counter);您的中断引脚可能是浮动的。您是否将其配置为输入引脚?在包含attachInterrupt()的行之前,在setup函数中添加以下行
pinMode(interruptPin, INPUT_PULLUP);现在,您应该可以看到在loop函数期间发生的上升沿的数量。将其设置为一个较高的值(例如,10秒),看看您的1 Hz方波是否获得了大约10。如果不起作用,也可以在这里发布main函数/完整代码。
发布于 2021-06-08 16:03:30
谢谢你的帮助!我已经改正了所有的错误。不幸的是,现在输出的是相同的错误。我在这里以图像的形式发布了输出。这是什么原因呢?中断通过了吗?

易失性int计数器= 0;常量int interruptPin = 3;
void setup() {
Serial.begin(9600);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), interrupt_call,
RISING);
}
void interrupt_call() {
counter++;
}
void loop() {
if(counter){
Serial.println(counter);
counter=0;
}
}发布于 2021-06-08 06:34:54
谢谢你的快速回复。我的意思是,如果我将信号发生器的频率设置为1 1Hz,然后启动代码,中断的上升沿将在每个周期的几次中被检测到,但实际上中断在每个时间周期只能触发一次,并在Serielen Monitor中输出。我已经将我的输出上传为图像。如果能给我一个建议或点子,我将不胜感激。
https://stackoverflow.com/questions/67876110
复制相似问题