本帖最后由 linkdfrobot 于 2015-4-12 10:24 编辑
我们陆续学习了按钮电机继电器等等的使用方法。这次,我们来制作一个自定义时间的延时风扇: 所需材料 1× 5mm LED灯 1× led组(10个) 13× 220欧电阻 2× 按钮 1× 继电器 HRS1H-S -DC5V 1× 小电机 1 × 风扇叶片 硬件链接
输入代码
- int led[10]={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[n],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[i],HIGH);
- }
- else{
- digitalWrite(led[i],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[i],HIGH);
- }
- else{
- digitalWrite(led[i],LOW);
- }
- t = t/2;
- }
- }
复制代码
把十进制时间转换为二进制并在led上输出 |
-
|
|
|
|
|