本帖最后由 桐桐 于 2013-12-12 12:55 编辑
前几天做了一个能设定时间自动打开电源盒关闭电源的装置,现在也把它写出来......
下面是接线图,直接用手画加电脑画的,大家讲究着看看......
http://yun.baidu.com/share/link?shareid=2156123376&uk=3626293744
下面是程序: - #include <DS1307.h>
- #include <LCD5110_CN.h>
- LCD5110 myGLCD(2,3,4,6,5); //lcd5110接线柱定义
- extern uint8_t SmallFont[]; //定义小号字体
- extern uint8_t MediumNumbers[]; //定义中号字体
- String month; //定义一个月份字符串变量
- DS1307 rtc(7, 8); //定义ds1307接线柱
- Time t;
- int h1=0;
- int m1=0;
- int h2=0;
- int m2=0;
- int h1bt=0;
- int m1bt=0;
- int h2bt=0;
- int m2bt=0;
- int sdbt=0;
- int sd=0;
- void setup()
- {myGLCD.InitLCD();
- rtc.halt(false);
- Serial.begin(9600);
- pinMode(12, INPUT);
- pinMode(9, INPUT);
- pinMode(11, INPUT);
- pinMode(10, INPUT);
- pinMode(13,OUTPUT);
-
- digitalWrite(13,LOW);
- //**********初始化时间,当时间准确了后就不用再执行了,第一次用时记住*************
- //******************下面的“//”去掉*****************
- // rtc.setDOW(WEDNESDAY);
- // rtc.setTime(10, 53, 0);
- // rtc.setDate(11, 12, 2013);
- //****************************************************************
- }
- void loop()
- {
- h1bt=digitalRead(10);
- h2bt=digitalRead(11);
- m1bt=digitalRead(9);
- m2bt=digitalRead(12);
- //********读取来自 DS1307的数据************************
- t = rtc.getTime();
- month=rtc.getMonthStr(); //读取月份
- jishi(); //运行计时程序,程序在最后。
- //*****************以下是按钮程序,按住1号按钮改变打开小时数
- //******************按住2号按钮改变打开分钟数
- //******************按住3号按钮改变关闭小时数
- //******************按住4号按钮改变关闭分钟数
- while(h1bt==1)
- {
- if(h1<23)
- h1++;
- else
- h1=0;
- delay(300);
- h1bt=digitalRead(10);
- myGLCD.printNumI(h1, LEFT, 36);
- if(h1==23)
- {myGLCD.clrScr();
- jishi();
- }}
-
- while(h2bt==1)
- {if(h2<23)
- h2++;
- else
- h2=0;
- delay(300);
- h2bt=digitalRead(13);
- myGLCD.printNumI(h2, LEFT, 42);
- if(h2==23)
- {myGLCD.clrScr();
- jishi();
- }}
-
- while(m1bt==1)
- {if(m1<59)
- m1++;
- else
- m1=0;
- delay(300);
- m1bt=digitalRead(11);
- myGLCD.printNumI(m1, CENTER, 36);
- if(m1==59)
- { myGLCD.clrScr();
- jishi();
- }}
-
- while(m2bt==1)
- {if(m2<59)
- m2++;
- else
- m2=0;
- delay(300);
- m2bt=digitalRead(7);
- myGLCD.printNumI(m2, CENTER, 42);
- if(m2==59)
- { myGLCD.clrScr();
- jishi();
- }}
-
-
- myGLCD.printNumI(h1, LEFT, 36);
- myGLCD.printNumI(h2, LEFT, 42);
- myGLCD.printNumI(m1, CENTER, 36);
- myGLCD.printNumI(m2, CENTER, 42);
- //*************以下是当时间等于设定的打开时间时打开,等于关闭时间时关闭******
- if(t.hour==h1&&t.min==m1)
- digitalWrite(12,HIGH);
- if(t.hour==h2&&t.min==m2)
- digitalWrite(12,LOW);
- delay (1000);
- myGLCD.clrScr();
- }
- //*****************以下是计时函数**************************
- void jishi(){
- myGLCD.setFont(SmallFont);
- myGLCD.printNumI(t.year, CENTER, 6);
- myGLCD.print(month, LEFT, 12);
-
- myGLCD.printNumI(t.date, RIGHT, 12);
- myGLCD.setFont(MediumNumbers);
- myGLCD.printNumI(t.hour, LEFT, 18);
- myGLCD.printNumI(t.min, CENTER, 18);
- myGLCD.printNumI(t.sec, RIGHT, 18);
-
- myGLCD.setFont(SmallFont);
- myGLCD.print("on", RIGHT, 36);
- myGLCD.print("off", RIGHT, 42);
- }
- //**************************************************************************
复制代码
下面是实物图,将灯换成继电器就可以控制电源了,昨天晚上已经成功的控制了我家的电压力锅,在早上5点开烧,到7点关闭。早上已经喝上粥了,呵呵。
http://yun.baidu.com/share/link?shareid=2163991999&uk=3626293744
两个库文件链接:
http://yun.baidu.com/share/link?shareid=2212864208&uk=3626293744 |