arduino小程序求助!!
本帖最后由 金色驼铃 于 2012-9-27 12:21 编辑本程序的目的是通过判断引脚2为高电平的持继时间,当超过2S时,给引脚8一个高电平。
void loop() {
if (digitalRead(2) == HIGH)//
{
delay(50); //去除杂波
time1 = millis();
Serial.print("Button-time-1: ");
Serial.println(time1);
while ((millis() - time1) >2000)//当高电平时间超过2S时
{
Serial.print("timeout:");
Serial.println(millis()-time1);
digitalWrite(8,HIGH);
delay(500);
digitalWrite(8,LOW);
delay(500);
}
问题是当2引脚为高电平时,程序根本不执行while语句,不知道为什么????
你直接在loop()函数里写就好了,就是你利用延时delay();等待延时到2s就执行相应的动作! 因为time1 = millis();这一句在时间差不到2秒前一直在不断的初始化,所以millis() - time1) >2000永远不能被执行!!!
飞翔的红猪 发表于 2012-9-26 17:01 static/image/common/back.gif
因为time1 = millis();这一句在时间差不到2秒前一直在不断的初始化,所以millis() - time1) >2000永远不能被 ...
time1 =millis(),这句我的理解是,当2为高位时,time1取当前时间啊, Randy 发表于 2012-9-26 16:54 static/image/common/back.gif
你直接在loop()函数里写就好了,就是你利用延时delay();等待延时到2s就执行相应的动作!
这个思路正好,我没想到,不过与原来的思路不一样了
if(digitalRead(2)==HIGH)
{
delay(50);
if(digitalRead(2)==HIGH)
{
if(flag==0)//如果原来按键是未按下的
{
time1=millis();
flag=1;//置位标志,防止语句重复运行
Serial.print("Button-time-1: ");
Serial.println(time1);
}
}
}
else flag=0;//如果按键抬起,标志复位
while ((millis() - time1) >2000&&flag==1)//当高电平时间超过2S时
{
Serial.print("timeout:");
Serial.println(millis()-time1);
digitalWrite(8,HIGH);
delay(500);
digitalWrite(8,LOW);
delay(500);
}
看看这样是不是符合你的本意? 你的timer1每循环一次都要刷新一次,while的条件永远也没法成立。 pulseIn 函数不就可以了吗?
pulseIn用于测量将一个指定的引脚设置为高或低的持续时间。 飞翔的红猪 发表于 2012-9-26 17:27 static/image/common/back.gif
if(digitalRead(2)==HIGH)
{
delay(50);
谢谢飞翔的红猪,你的修改正合我意,再次感谢 看来论坛好人多~:lol
页:
[1]