一、前言
1.新手小白上手ardiuno,技术尚不成熟,代码较为简单,可给予指正与建议;
2.本次实验的代码有借鉴,逻辑关系较为模糊(初学暂未上道,请多多包涵,予以指教)。
二、实验要求
①按键要做成开关,开关点击一次,LED开启,再点击一次开关LED关闭;
②按键按下执行交通灯,按键松开当前交通灯开始运转(红黄绿模拟交通灯,红灯先亮,接着黄灯闪烁三次完毕之后,绿灯亮起)一次之后停止运行。
三、准备材料
1.面包板;
2.audiuno开发板;
3.红黄绿发光二极管分别为2、1、1个;
4.按键2个;
4.杜邦线若干条(不致使电路短路并使程序成功跑动即可);
5.220Ω电阻4个、25Ω(有电阻即可,使电流避开电阻,且电阻起保护电路作用)电阻2个;
四、接线实验(接线图仅供参考)
参考操作图进行接线练习,接线完毕情况如下图所示。
1.任务①接线如下图所示;
2.任务②接线如下图所示(与任务①共同被接线在面包板上,方便直接操作)。
五、实操代码(按键处有借鉴,仅供参考学习,或有雷同或最优解)
1.先定义变量而后读写;
int ledpin=8;
int inpin_1=7;
int val_1=0;
int ledpin_red=11;
int ledpin_yellow=12;
int ledpin_green=13;
int inpin_2=6;
int val_2=0;
void setup()
{
pinMode(ledpin,OUTPUT);
pinMode(inpin_1,INPUT);
pinMode(ledpin_red,OUTPUT);
pinMode(ledpin_yellow,OUTPUT);
pinMode(ledpin_green,OUTPUT);
pinMode(inpin_2,INPUT);
}
2.以下为任务一的代码编写(有借鉴);
注:val_1!=val_1”是为确认按键状态是否改变。
void loop()
{
if(digitalRead(inpin_1)==HIGH)
{
val_1 =! val_1;
digitalWrite(ledpin,val_1);
delay(500);
}
3.任务二代码如下(比较笨的方法,复制粘贴,可使用for循环进行优化);
if(digitalRead(inpin_2)==HIGH)
{
val_2 =! val_2;
digitalWrite(ledpin_red,HIGH);
delay(5000);
digitalWrite(ledpin_red,LOW);
digitalWrite(ledpin_yellow,HIGH);
delay(1000);
digitalWrite(ledpin_yellow,LOW);
delay(100);
digitalWrite(ledpin_yellow,HIGH);
delay(1000);
digitalWrite(ledpin_yellow,LOW);
delay(100);
digitalWrite(ledpin_yellow,HIGH);
delay(1000);
digitalWrite(ledpin_yellow,LOW);
delay(100);
digitalWrite(ledpin_green,HIGH);
delay(5000);
digitalWrite(ledpin_green,LOW);
delay(100);
}
}
六、实验结果
1.任务一:按下按键后红灯亮起,再按一次红灯灭;
2.任务二:按下按键停留,消除按键内的弹簧抖动,使按键检测到电流流通之后执行一次交通灯的有序变化,执行完一次之后结束,发光二极管恢复关闭状态;
3.实验结果不展示,可操作代码接上电源后自行实验验证。
七、心得
在按键的部分卡住,不知道如何使用代码将按键的功能变成开关,实验多次未果之后寻得小伙伴的帮助,完成开关灯的实验;但任务二的原本计划为将按键变成开关,使按键按下之后,交通灯循环执行红黄绿灯的模拟交通信号,再按一次之后交通灯的循环停止,整个程序停止,但由于技术欠佳,未能如愿,便更改计划降低难度,待日后探讨。
八、学习之路艰苦,革命尚未成功,同志仍需努力!