请教时间控制问题
本帖最后由 A书生 于 2015-1-19 09:25 编辑for 语句,while 语句都是用 数值控制循环次数的,但是我想 用时间控制循环可以吗???
比如我想获得光电门一分钟内有多少次数值改变这种,
或者,想知道 一秒钟有多少次高压脉冲, 并把数值输出出来。
有方法吗?求教。谢谢各位前辈 计数脉冲可以用 pulseIn()
有一种用法是
pulseIn(pin, value, timeout)
设定 timeout 就是给定时间,数这个时间之内的脉冲数量,达到时间之后自动退出 zoologist 发表于 2015-1-14 14:51 static/image/common/back.gif
计数脉冲可以用 pulseIn()
有一种用法是
谢谢你,那第一种情况可以解决吗?就是测出光电槽的变化次数,我用pulseIn测光电门的 高脉冲次数的时候静止不动的话,是每秒钟显示一次 0 ,但是轻轻推动小车数据就不是按照每秒钟出现一次了,我推动越快出来的数值也越快 zoologist 发表于 2015-1-14 14:51 static/image/common/back.gif
计数脉冲可以用 pulseIn()
有一种用法是
我刚刚入手,现在可以数出来每次高低电平变化的次数了,我是用光电槽,然后手动推动小车,想通过知道每秒或者每两秒车轮转过多少度,现在只能做出来显示电平变化次数,但是不知道怎么去限定每秒或者每两秒,还请前辈多多指教! 本帖最后由 A书生 于 2015-1-15 15:18 编辑
zoologist 发表于 2015-1-14 14:51 static/image/common/back.gif
计数脉冲可以用 pulseIn()
有一种用法是
int pin = 3;
int i;
int j;
int n=0;
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(pin,INPUT);
j=digitalRead(pin);
}
void loop()
{
// put your main code here, to run repeatedly:
i=digitalRead(pin);
if(i != j)
{
n++;
j=i;
Serial.println(n);
}
}
我现在是这样写的,每次有电平的变化就会显示一次数字,就像数数一样,一个个的出现 ,我现在想每秒显示一次,然后清零,再重新数,就是显示出来每秒有多少次变化,该怎么做?谢谢你。 哦 这样的话,建议你写一个中断处理,过来一个中断计数一次,每秒显示一次然后清零
你觉得怎么样 zoologist 发表于 2015-1-15 15:32 static/image/common/back.gif
哦 这样的话,建议你写一个中断处理,过来一个中断计数一次,每秒显示一次然后清零
你觉得怎么样
我还不会写中断,我去看看能不能学会,不会的地方再向您请教,谢谢。 zoologist 发表于 2015-1-15 15:32 static/image/common/back.gif
哦 这样的话,建议你写一个中断处理,过来一个中断计数一次,每秒显示一次然后清零
你觉得怎么样
您有时间的话可以帮忙写个例子吗?我比较笨。。。。 本帖最后由 A书生 于 2015-1-15 15:18 编辑
zoologist 发表于 2015-1-14 14:51
计数脉冲可以用 pulseIn()
有一种用法是
int pin = 3;
int i;
int j;
int n=0;
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(pin,INPUT);
j=digitalRead(pin);
}
void loop()
{
// put your main code here, to run repeatedly:
i=digitalRead(pin);
if(i != j)
{
n++;
j=i;
Serial.println(n);
}
}
我现在是这样写的,每次有电平的变化就会显示一次数字,就像数数一样,一个个的出现 ,我现在想每秒显示一次,然后清零,再重新数,就是显示出来每秒有多少次变化,该怎么做?谢谢你。
/*****检测一分钟内pin脚接收到低电平脉冲个数
****/
int pin = 3;
int n = 0;
double lasttime = 0;
double nowtime;
double time = 0;
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(pin, INPUT);
digitalWrite(pin,HIGH);
}
void loop()
{
// put your main code here, to run repeatedly:
nowtime = millis();
if (nowtime - lasttime < 60000)
{
if (digitalRead(pin) == LOW & (millis() - time) < 150) //防抖动处理
{
n++;
}
time = millis();
}
else{
lasttime = millis();
Serial.println(n);
n = 0;
}
}
试试这个程序吧,在Arduino1.5.8编译通过。 AP772 发表于 2015-1-15 22:57 static/image/common/back.gif
谢谢前辈!!!/拱手 这个时间millis的用法可以了,哈哈,不用去学中断了,我把时间改成了每秒,然后还是计算的高低电平转换的次数,再次向你表示感谢! 不用客气,我帮人人,人人帮我。我也是在论坛学习成长的:lol AP772 发表于 2015-1-19 09:37 static/image/common/back.gif
不用客气,我帮人人,人人帮我。我也是在论坛学习成长的
又遇到困难了,您有时间可以帮帮我吗 AP772 发表于 2015-1-19 09:37 static/image/common/back.gif
不用客气,我帮人人,人人帮我。我也是在论坛学习成长的
可不可以把问题发到你的邮箱里?
页:
[1]