我需要一个函数来返回arduino上指定时间内的脉冲数。这是我正在使用的部分代码,但该函数没有重新调整任何东西(甚至没有返回0)
...
long Itime = 0;
int Dtime = 25;
...
int Counter() {
unsigned long Ftime = millis();
int c = 0;
int i = 0;
while ( Ftime - Itime < Dtime ) {
if ( digitalRead(PSPin) == HIGH ) {
i=i+1;
while ( digitalRead(PSPin) == HIGH) { // delays the function until
c=c+1; // the next cycle
c=c-1;
}
}
}
Itime = Ftime;
return i;
}
我真的不明白为什么这个功能没有回复'我'。如果有人可以提供帮助,我会很高兴。谢谢
编辑: PSPin上的信号是150hz方波信号,这意味着周期约为6ms,由于我的时间是25ms,它应该至少返回3个脉冲。 我把这个函数称为仅用于测试目的,因为我也认为我的程序卡在了Counter()函数上,但我无法弄清楚原因。
void loop() {
if ( Counter() == 0 )
digitalWrite(TestPinA, HIGH);
if ( Counter() > 0 )
digitalWrite(TestPinB, HIGH);
}
但两个引脚都不会返回HIGH。 我非常感谢你的帮助。
答案 0 :(得分:0)
使用中断来简化工作。
volatile int IRQcount;
int pin = 2;
int pin_irq = 0; //IRQ that matches to pin 2
void setup() {
// put your setup code here, to run once:
attachInterrupt(pin_irq, IRQcounter, RISING);
delay(25);
detachInterrupt(pin);
Serial.print(F("Counted = ");
Serial.println(IRQcount);
}
void IRQcounter() {
IRQcount++;
}
void loop() {
// put your main code here, to run repeatedly:
}
如果你想使用INT0 / 1以外的引脚。您可以使用PinChangeInt Libray来使用任何图钉。
答案 1 :(得分:0)
你被困在
中while ( Ftime - Itime < Dtime )
因为在WHILE循环中代码永远不会实际更新Ftime或Dtime。请尝试以下方法:
int PSPin = 13;
int DurationTime = 25; // best to have same type as compare or cast it later, below.
int Counter() {
int i = 0;
unsigned long StartTime = millis();
unsigned long PrvTime = StartTime ;
while ( PrvTime - StartTime < (unsigned long) DurationTime ) {
if ( digitalRead(PSPin) == HIGH ) {
i=i+1;
while ( digitalRead(PSPin) == HIGH); // BLOCK the function until cycles
}
PrvTime = millis();
}
return i;
}