前幾天做了一個能設定時間自動打開電源盒關閉電源的裝置,現在也把它寫出來......
下面是接線圖,直接用手畫加電腦畫的,大家講究著看看......

下面是Arduino端的程序:
#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);
}
需要兩個庫函數,DS1307和LCD5110_CN
將繼電器的輸入端接到D13端口,這樣就可以控制了。昨天晚上連了電壓力鍋,然后設定早上5點打開,7點關閉。今天早上已經成功的喝上粥了...呵呵...
