步驟1:
使12v至5v DC降壓
步驟2:
為ARDUINO制作繼電器電路并顯示電路
步驟3:
//代碼設(shè)置時間開關(guān)要求
#include“ Wire.h”
#includeLiquidCrystal lcd(7,6,5,4,3 ,2);//lcd(rs,enable,d4,d5,d6,d7)
const char * AMPM; int bulb = 0;
字節(jié)秒,分鐘,小時,dayOfWeek,dayOfMonth,月份,年份;
char * days [] = {“”,“星期日”,“星期一”,“星期二”,“星期三”,“星期四”,“星期五”,“星期六”};
int H;字符串s,m,d,mth,h;
#define DS1307_I2C_ADDRESS 0x68
byte on [8] = {0b01110,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b01010};
字節(jié)off [8] = {0b01110,0b10001,0b10001,0b10001,0b10001,0b10001,0b11111,0b01010};
字節(jié)spark [8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b10101 ,0b01010};
void setup()
{
Wire.begin();
lcd.createChar(1,on);//開啟燈泡壓腳
lcd.createChar(0,off);//關(guān)閉燈泡
lcd.createChar(2,spark);//火花
lcd.begin(16,2);
lcd.print(“ DIAMOND AHIR”);
lcd.setCursor(0,1);
lcd.print(“ X-PERT GROUP”);
delay(3000);
Serial.begin(9600);
}
無效循環(huán)()
{
getDateDs1307( &second,&minute,&hour,&dayOfWeek,&dayOfMonth,&month和&year);//GET值
ampm();
Convert_Hours();
lcd.clear();//清除顯示
displaytime();//顯示時間
match_bulb_time();//配合設(shè)置的燈泡計時
delay(1000);//等待1秒鐘
}
byte bcdToDec(byte val){return((val/16 * 10)+(val%16));}
void getDateDs1307(byte * second,byte * minute,byte * hour,byte * dayOfWeek,byte * dayOfMonth,byte * month,byte * year)
{
//從RTC DS1307讀取值
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS,7);
* second = bcdToDec(Wire.read()&0x7f);
* minute = bcdToDec(Wire.read());
* hour = bcdToDec(Wire.read()&0x3f);
* dayOfWeek = bcdToDec(Wire.read());
* dayOfMonth = bcdToDec(Wire.read());
* month = bcdToDec(Wire.read());
* year = bcdToDec(Wire.read()); }
void ampm(){(hour》 11)?(AMPM =“ PM”):( AMPM =“ AM”); }
void Convert_Hours(){if(hour == 12 || hour == 0)H = 12;否則if(hour》 12)H = hour%12;否則H =小時; }
void displaytime()
{
if(minute == 0)//每小時僅顯示一分鐘
{
lcd.begin(16,2);
lcd.print(“ DIAMOND AHIR”);
lcd.setCursor(0,1); (H 《10)? (h =“ 0” + String(H)):(h = String(H));
//在1至9小時內(nèi)應(yīng)用零+
(分鐘《10)? (m =“ 0” + String(minute)):(m = String(minute));//用1至9分鐘應(yīng)用零+
(秒《10)? (s =“ 0” + String(second)):(s = String(second));//以1至9秒應(yīng)用零+
lcd.print(“” + String(h)+“:” + m +“:” + s +“” + AMPM);
}
else
{
lcd.begin(16,2);
(H 《10)? (h =“ 0” + String(H)):(h = String(H));//在1至9小時內(nèi)應(yīng)用零+
(分鐘《10)? (m =“ 0” +字符串(分鐘)):(m =字符串(分鐘));//用1至9分鐘應(yīng)用零+
(秒《10)? (s =“ 0” + String(second)):(s = String(second));//以1至9秒應(yīng)用零+
(dayOfMonth 《10)? (d =“ 0” + String(dayOfMonth)):(d = String(dayOfMonth));//在1至9天
(月《10)應(yīng)用零+嗎? (mth =“ 0” + String(month)):(mth = String(month));//在1至9個月內(nèi)申請零+
lcd.setCursor(0,0);
lcd.print(h +“:” + m +“:” + s +“” + AMPM);//小時:分鐘:秒AM/PM
lcd.setCursor(0,1);
lcd.print(d +“:” + mth +“:” +年+“” + days [dayOfWeek]);//DAY:MONTH:YEAR WEEK
}
}//END FUNCTION
void match_bulb_time()
{
開關(guān)(小時)//將燈泡應(yīng)用于帶小時的開啟
{//上午6點至下午6點至燈泡上
情況0:bulb = 1;打破;//12
情況1:bulb = 1;打破;//1
情況2:bulb = 1;打破;//2
情況3:bulb = 1;打破;//3
情況4:bulb = 1;打破;//4
情況5:bulb = 1;打破;//5
情況6:bulb = 1;打破;//6
情況7:bulb = 0;打破;//7
情況8:bulb = 0;打破;//8
情況9:bulb = 0;打破;//9
情況10:bulb = 0;打破;//10
情況11:bulb = 0;打破;//11
情況12:bulb = 0;打破;//12
情況13:bulb = 0;打破;//1
情況14:bulb = 0;打破;//2
案例15:bulb = 0;打破;//3
情況16:bulb = 0;打破;//4
情況17:bulb = 0;打破;//5
情況18:bulb = 1;打破;//6
案例19:bulb = 1;打破;//7
案例20:bulb = 1;打破;//8
情況21:bulb = 1;打破;//9
情況22:bulb = 1;打破;//10
案例23:bulb = 1;打破;//11
默認值:break;
}
if(bulb == 1)//繼電器開關(guān)
{digitalWrite(8,LOW);//或接地
digitalWrite(9,HIGH);//ON RELAY
//在LCD上顯示BULB圖標
lcd.setCursor(14,0);
lcd.write((byte)2);
lcd.write((byte)2);
lcd.setCursor(14,1);
lcd.write((byte)1);
lcd.write((byte)1);
}
if(bulb == 0)
{
digitalWrite(8,LOW);//或接地
digitalWrite(9,LOW);//關(guān)閉繼電器
//顯示燈泡關(guān)閉圖標
lcd.setCursor(14,1);
lcd.write((byte)0);
lcd.write((byte)0);
}
}
步驟4:
現(xiàn)在按照URS設(shè)置時間將BLUB ON關(guān)閉
-
控制器
+關(guān)注
關(guān)注
114文章
17096瀏覽量
184166
發(fā)布評論請先 登錄
評論