最近在学习Arduino的简单器件组合
实验内容
按下按键,灯开始变换颜色,
当红灯亮了蜂鸣器响,蓝灯亮起时都不响
const int BLUE=11; //声明变量,蓝灯引脚接在第11针脚;
const int RED=12; //声明变量,红灯引脚接在第12针脚;
const int BUTTON=7;//声明变量,按钮接在第7针脚;
const int voice=10;//声明变量,声音接在第10针脚;
int val=0; //声明变量,用来存储按钮返回值HIGH或者LOW;
int val_old=0;//声明变量,存储上一次按钮返回值;比对val和val_old的值,来判断按钮是按下还是抬起
//val==LOW && val_old==HIGHT 抬起状态;val==HIGH && val_old==LOW 按下状态;
int state=0;//0 off,1 on 声明变量,起到中转的作用,小技巧;
void setup() //初始化;
{
pinMode(BLUE,OUTPUT); //定义LED灯输出模式;
pinMode(RED,OUTPUT); //定义LED灯输出模式;
pinMode(BUTTON,INPUT);//定义BUTTON为输入模式;
pinMode(voice,OUTPUT);//定义VOICE为输出模式
}
void loop()
{
val=digitalRead(BUTTON);//读取数字针脚的值;
if((val==HIGH) && (val_old==LOW))//比较前一次和现在的按钮返回的值,
//只有现在按下按钮这个状态下,才改变state的值
{
state=1-state;
}
if((val==LOW && val_old==HIGH)) //去抖的作用,一般10-15ms;
{
delay(10);
}
val_old=val;//把现在按钮返回的值赋予val_old;
if(state==1)//控制灯开关;
{
digitalWrite(BLUE,HIGH);//如果蓝色亮起红色暗
digitalWrite(RED,LOW);
if(digitalRead(RED)==LOW)//红灯暗了则蜂鸣器不响
digitalWrite(voice,LOW);
delay(1000);//延迟1s
digitalWrite(BLUE,LOW);//如果蓝灯暗红灯亮
digitalWrite(RED,HIGH);
if(digitalRead(RED)==HIGH)//红灯亮了
digitalWrite(voice,HIGH);//蜂鸣器响
delay(1000);
}
else
{
digitalWrite(BLUE,LOW);//如果红蓝灯都不亮
digitalWrite(RED,LOW);
digitalWrite(voice,LOW);//蜂鸣器也不响
}
}
参考来源:https://blog.csdn.net/nkd50000/article/details/80176039