延时风扇(娄嵩楠)
本帖最后由 linkdfrobot 于 2015-4-12 10:24 编辑我们陆续学习了按钮电机继电器等等的使用方法。这次,我们来制作一个自定义时间的延时风扇:所需材料1×5mm LED灯1×led组(10个) 13×220欧电阻2×按钮1×继电器 HRS1H-S -DC5V1×小电机1 × 风扇叶片硬件链接
输入代码int led={0,1,2,3,4,5,6,7,8,9}; //把led列链接到0-9号数字端口
int button1=11,button2=12; //把两个按钮链接到10,11口
int relay=10; //链接继电器到12口
int time=1; //保存剩余时间
int buttonState; // 记录 button 当前状态值
int lastButtonState = LOW; // 记录 button 前一个状态值
void setup(){
//初始化数字端口
for(int n=0;n<=9;n++){
pinMode(led,OUTPUT);
}
pinMode(relay,OUTPUT);
pinMode(button1,OUTPUT);
pinMode(button2,OUTPUT);
digitalWrite(relay,LOW);
zhuanhuan(time);
settime();//调用设置时间的函数
}
//设置时间
void settime(){
while(digitalRead(button2)==LOW){ //如果检测到按钮2被按下就返回
if (readingState(button1)){ //如果检测到按钮1被按下就让时间*2
time=2*time;
}
zhuanhuan(time); //调用转换函数显示时间
}
}
void loop(){
for(;time>=0;time--){
digitalWrite(relay,HIGH); //time不为就在继电器端口输出高电位
zhuanhuan(time); //调用转换函数显示时间
delay(1000); //time的值即剩余运行秒速
}
digitalWrite(relay,LOW); //for循环结束后在继电器端口输出低电位
}
//把time的值在led上显示出来
void zhuanhuan(int t){
for(int i=0;i<=9;i++){
if(t%2 == 1){
digitalWrite(led,HIGH);
}
else{
digitalWrite(led,LOW);
}
t = t/2;
}
}
//按钮检测(带防长按)
boolean readingState(int num){
int state=false;
int reading=digitalRead(num);
if (reading==HIGH && lastButtonState==LOW){
state=true;
}
lastButtonState=reading;
return state;
}操作方式每次启动后都会自动进入设置时间的状态,默认时间为1秒,每按动一次按钮1就可以让时间乘2,按动按钮2结束设置,风扇开始转动直到剩余时间为0.代码回顾void zhuanhuan(int t){
for(int i=0;i<=9;i++){
if(t%2 == 1){
digitalWrite(led,HIGH);
}
else{
digitalWrite(led,LOW);
}
t = t/2;
}
}
把十进制时间转换为二进制并在led上输出本篇由娄嵩楠制作,罗亮指导
页:
[1]