在《爱上arduino》看到的代码不太懂
本帖最后由 华琳 于 2012-8-31 14:49 编辑//example 03c:按下按钮后保持LED开启
#define LED 13 //定义LED引脚为13
#define BUTTON 7 //定义BUTTON引脚为7
//连接上按钮
int val = 0; //val储存按钮的状态
int old_val = 0; //暂存val变量的上一个时间单位
int state = 0; //0表示LED关闭;1表示打开
void setup()
{
pinMode(LED,OUTPUT);
pinMode(BUTTON,INPUT);
}
void loop()
{
val = digitalRead(BUTTON); //读取输入数值并储存
//检查按钮变化情况
if((val == HIGH)&&(old_val == LOW))
{
state = 1 - state;
delay(10);
}
old_val = val; //val已经是旧的了,暂存一下
if(state == 1)
{
digitalWrite(LED,HIGH);
}else{
digitalWrite(LED,LOW);
}
}
以上的是代码,电路就不画出来了,电路很简单,LED插在引脚13和GND上,5v上伸出的线连着开关,开关的另一只脚分别直接连着引脚7,还有连一只10k电阻连在GND上。
我怎么也看不懂这个是代码怎么运作的,还有为什么要“old_val=val”
还有当开关关闭后,下面这部分代码怎么会成立
if((val == HIGH)&&(old_val == LOW))
{
state = 1-state;
delay(10);
}我是刚刚接触arduino的,请各位高手帮帮忙!!! 还有当开关关闭后,下面这部分代码怎么会成立....
这段代码的意思是按一下按钮,状态标志反转一下,old_val == LOW是保证当你按住按钮不放的时候,这个状态不会连续快速转换。。。因为你按住的时候,old_val就是HIGH,也就是说这段代码只执行了一次 飞翔的红猪 发表于 2012-8-30 16:46 static/image/common/back.gif
还有当开关关闭后,下面这部分代码怎么会成立....
这段代码的意思是按一下按钮,状态标志反转一下,old_ ...
还有,那 “old_val=val” 是为什么 华琳 发表于 2012-8-30 18:27 static/image/common/back.gif
还有,那 “old_val=val” 是为什么
old_val的意思是上次的数据,而val是当前的数据,每次执行程序后会把当前的数据给old_val。程序具体流程是这样的:当按键按下,引脚接高电平,就是说val值为HIGH,而old_val的值默认为LOW,这样当按键按下之后会执行第一条if语句,并且state会变为1,然后跳出if语句,执行old_val=val,就是把old_val变为HIGH,然后再执行下面的if语句,因为state为1,所以执行LED为HIGH,这时候回到最上面的if语句,会发现old_val已经为HIGH,不满足if语句的执行条件,故state的值不会改变,LED的状态也不会改变,继续往下又会执行old_val=val,此时按键还没松开,因为单片机的速度很快。就这样一遍又一遍的循环执行,虽然按键不放开,但是灯的状态不会改变。当按键松开后,第一条if语句肯定不成立了,因为val的值变为LOW了,然后执行old_val=val,此时al的为LOW,所以old_val也为LOW,但是state的值无变化所以LED仍然为HIGH.让按键重新按下的时候第一条if语句执行,state的状态变为0,继续执行old_val=val,然后下面的if语句,由于state的状态为0,所以执行的是下面的else语句,所以LED灭掉。所以程序的最后执行效果就是按下按键灯的状态取反一下。 maojidan 发表于 2012-8-30 18:51 static/image/common/back.gif
old_val的意思是上次的数据,而val是当前的数据,每次执行程序后会把当前的数据给old_val。程序具体流程是 ...
好详细啊,谢谢了!!! 受教,我也是新手,也刚开始看 pinMode(BUTTON,IMPUT);
pinMode(BUTTON,INPUT); 受教l了,谢谢大师们指点 氛围不错,支持!!! 一点就透,谢谢讲解!
页:
[1]