电子说
步骤1:
使12v至5v DC降压
步骤2:
为ARDUINO制作继电器电路并显示电路
步骤3:
//代码设置时间开关要求
#include“ Wire.h”
#includeLiquidCrystal lcd(7,6,5,4,3 ,2);//lcd(rs,enable,d4,d5,d6,d7)
const char * AMPM; int bulb = 0;
字节秒,分钟,小时,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};
字节off [8] = {0b01110,0b10001,0b10001,0b10001,0b10001,0b10001,0b11111,0b01010};
字节spark [8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b10101 ,0b01010};
void setup()
{
Wire.begin();
lcd.createChar(1,on);//开启灯泡压脚
lcd.createChar(0,off);//关闭灯泡
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);
}
无效循环()
{
getDateDs1307( &second,&minute,&hour,&dayOfWeek,&dayOfMonth,&month和&year);//GET值
ampm();
Convert_Hours();
lcd.clear();//清除显示
displaytime();//显示时间
match_bulb_time();//配合设置的灯泡计时
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小时内应用零+
(分钟《10)? (m =“ 0” + String(minute)):(m = String(minute));//用1至9分钟应用零+
(秒《10)? (s =“ 0” + String(second)):(s = String(second));//以1至9秒应用零+
lcd.print(“” + String(h)+“:” + m +“:” + s +“” + AMPM);
}
else
{
lcd.begin(16,2);
(H 《10)? (h =“ 0” + String(H)):(h = String(H));//在1至9小时内应用零+
(分钟《10)? (m =“ 0” +字符串(分钟)):(m =字符串(分钟));//用1至9分钟应用零+
(秒《10)? (s =“ 0” + String(second)):(s = String(second));//以1至9秒应用零+
(dayOfMonth 《10)? (d =“ 0” + String(dayOfMonth)):(d = String(dayOfMonth));//在1至9天
(月《10)应用零+吗? (mth =“ 0” + String(month)):(mth = String(month));//在1至9个月内申请零+
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()
{
开关(小时)//将灯泡应用于带小时的开启
{//上午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)//继电器开关
{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);//关闭继电器
//显示灯泡关闭图标
lcd.setCursor(14,1);
lcd.write((byte)0);
lcd.write((byte)0);
}
}
步骤4:
现在按照URS设置时间将BLUB ON关闭
全部0条评论
快来发表一下你的评论吧 !