6690浏览
查看: 6690|回复: 0

延时风扇(娄嵩楠)

[复制链接]
本帖最后由 linkdfrobot 于 2015-4-12 10:24 编辑

我们陆续学习了按钮电机继电器等等的使用方法。这次,我们来制作一个自定义时间的延时风扇:
所需材料
1×  5mm LED延时风扇(娄嵩楠)图1
1×  led组(10个)
13×  220欧电阻延时风扇(娄嵩楠)图2
2×  按钮延时风扇(娄嵩楠)图3
1×  继电器 HRS1H-S -DC5V延时风扇(娄嵩楠)图4
1×  小电机延时风扇(娄嵩楠)图5
1 × 风扇叶片延时风扇(娄嵩楠)图6
硬件链接
延时风扇(娄嵩楠)图7
输入代码
  1. int led[10]={0,1,2,3,4,5,6,7,8,9}; //把led列链接到0-9号数字端口
  2. int button1=11,button2=12;         //把两个按钮链接到10,11口
  3. int relay=10;                      //链接继电器到12口
  4. int time=1;                        //保存剩余时间
  5. int buttonState;                   // 记录 button 当前状态值
  6. int lastButtonState = LOW;         // 记录 button 前一个状态值
  7. void setup(){
  8. //初始化数字端口
  9. for(int n=0;n<=9;n++){
  10.     pinMode(led[n],OUTPUT);
  11.   }
  12.   pinMode(relay,OUTPUT);
  13.   pinMode(button1,OUTPUT);
  14.   pinMode(button2,OUTPUT);
  15.   digitalWrite(relay,LOW);
  16.   zhuanhuan(time);
  17.   settime();//调用设置时间的函数
  18. }
  19. //设置时间
  20. void settime(){
  21.   while(digitalRead(button2)==LOW){ //如果检测到按钮2被按下就返回
  22.     if (readingState(button1)){     //如果检测到按钮1被按下就让时间*2
  23.       time=2*time;
  24.     }
  25.     zhuanhuan(time);                //调用转换函数显示时间
  26.   }
  27. }
  28. void loop(){
  29.   for(;time>=0;time--){
  30.     digitalWrite(relay,HIGH);      //time不为就在继电器端口输出高电位
  31.     zhuanhuan(time);               //调用转换函数显示时间
  32.     delay(1000);                   //time的值即剩余运行秒速
  33.   }
  34.   digitalWrite(relay,LOW);         //for循环结束后在继电器端口输出低电位
  35. }
  36. //把time的值在led上显示出来
  37. void zhuanhuan(int t){
  38.   for(int i=0;i<=9;i++){
  39.     if(t%2 == 1){
  40.       digitalWrite(led[i],HIGH);
  41.     }
  42.     else{
  43.       digitalWrite(led[i],LOW);
  44.     }
  45.     t = t/2;
  46.   }
  47. }
  48. //按钮检测(带防长按)
  49. boolean readingState(int num){
  50.   int state=false;
  51.   int reading=digitalRead(num);
  52.   if (reading==HIGH && lastButtonState==LOW){
  53.     state=true;
  54.   }
  55.   lastButtonState=reading;
  56.   return state;
  57. }
复制代码
操作方式
每次启动后都会自动进入设置时间的状态,默认时间为1秒,每按动一次按钮1就可以让时间乘2,按动按钮2结束设置,风扇开始转动直到剩余时间为0.
代码回顾
  1. void zhuanhuan(int t){
  2.   for(int i=0;i<=9;i++){
  3.     if(t%2 == 1){
  4.       digitalWrite(led[i],HIGH);
  5.     }
  6.     else{
  7.       digitalWrite(led[i],LOW);
  8.     }
  9.     t = t/2;
  10.   }
  11. }
复制代码

把十进制时间转换为二进制并在led上输出
本篇由娄嵩楠制作,罗亮指导
绘图.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail