= 2; //Green detection from other Arduino
int redpin = 3; //Red detection from other Arduino
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Setup
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //Sync RTC and Computer time
Serial.begin(9600);
pinMode(buttonUP, INPUT_PULLUP); //Use internal pullups for control panel switches
pinMode(buttonDWN, INPUT_PULLUP);//^
pinMode(buttonSEL, INPUT_PULLUP);//^
pinMode(buttonESC, INPUT_PULLUP);//^
pinMode(disprelay, OUTPUT); //Configure relay output pins
pinMode(power, OUTPUT); //^
pinMode(fwd, OUTPUT);//^
pinMode(bwd, OUTPUT);//^
digitalWrite(disprelay, LOW); //Set default to turn backlight on
digitalWrite(power, HIGH); //Have everything else off
digitalWrite(fwd, HIGH);//^
digitalWrite(bwd, HIGH);//^
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//LCD Setup
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
lcd.begin (20,4); //Configure LCD
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); //^
lcd.setBacklight(HIGH);//^
mainmenu();//^
pinMode(senseLED, OUTPUT); //Configure LED
digitalWrite(senseLED,LOW); //Configure LED
pinMode(redpin, INPUT); //Configure sensor input
pinMode(greenpin, INPUT); //Configure sensor input
digitalRead(greenpin); //Read sensor from Arduino
digitalRead(redpin); //Read sensor from Arduino
blindposition = 1; //Retact blind
}
void loop()
{
getbutton(); //Get menu button presses
printtime(); //Update time
checktime(); //Check if blind needs to move
redstate = digitalRead(redpin); //Get sensor
greenstate = digitalRead(greenpin); //Get sensor
checkblind(); //Check position
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Get Time From I2C RTC
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
无效gettime() {
如果(!RTC。begin()){ //报道如果RTC没有发现
串行out.println(“找不到
RTC”);而(1);
}
如果(RTC。lostpower()){
串行out.println(“RTC失去动力,让我们的时间!; //Sets time if power lost.
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
DateTime now = rtc.now(); //Update time
seconds = (now.second()); //Update seconds
minutes = (now.minute()); //Update minutes
hours = (now.hour()); //Update hours
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Print Time to LCD
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void printtime(){ //Print the time on screen
gettime(); //Get the time from RTC
lcd.setCursor(10,0);
lcd.print("T:");
lcd.setCursor(12,0);
lcd.print(hours, DEC); //Use DEC to convert to numbers
lcd.setCursor(14,0);
lcd.print(':');
lcd.setCursor(15,0);
lcd.print(minutes, DEC); //Use DEC to convert to numbers
lcd.setCursor(17,0);
lcd.print(':');
lcd.setCursor(18,0);
lcd.print(seconds, DEC); //Use DEC to convert to numbers
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Displays Menu
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mainmenu(){ //Reddraw static menu
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Disp PWR");
lcd.setCursor(1,1);
lcd.print("Set Open Time");
lcd.setCursor(1,2);
lcd.print("Set Down Time");
lcd.setCursor(1,3);
lcd.print("MANUAL TRIGGER");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Shows cursor
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void cursorpos(){ //Update/Move cursor
if (active == 1){
if (counter == 0){
lcd.setCursor(0,0);
lcd.print(">");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
menu = 1;
}
if (counter == 1){ //Update/Move cursor
lcd.setCursor(0,1);
lcd.print(">");
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
menu = 2;
}
if (counter == 2){ //Update/Move cursor
lcd.setCursor(0,2);
lcd.print(">");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
menu = 3;
}
if (counter == 3){ //Update/Move cursor
lcd.setCursor(0,3);
lcd.print(">");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print(" ");
menu = 4;
}
}
if(active == 0){ //If set open time selected show this
oTimedisplay();
}
if(active == 2){ //If set close time selected show this
cTimedisplay();
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Open Time
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void opentime(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Menu");
}
void getbutton(){ // Get button input and assign to correct variables
up = digitalRead(buttonUP);
dwn = digitalRead(buttonDWN);
sel = digitalRead(buttonSEL);
esc = digitalRead(buttonESC);
if(esc == LOW){
active = 1;
mainmenu();
Serial.print("ESC"); // Get button input and assign to correct variables
upminutesa = setupminutesa;
upminutesb = setupminutesb;
uphoursa = setuphoursa;
uphoursb = setuphoursb;
dwnminutesa = setdwnminutesa;
dwnminutesb = setdwnminutesb;
dwnhoursa = setdwnhoursa;
dwnhoursb = setdwnhoursb;
digitalWrite(disprelay, LOW);
motorstop(); //stop motor if selected
}
switch(counter){ //loop logic keepin numbers within the limit
case 4:
counter = 3;
break;
case -1:
counter = 0;
break;
}
如果((!= prevup)/测试开关机
&(上= =低)){
柜台;
如果(主动= = 0){
setcounter + +;
}
(主动= =如果2){
setcountera + +;
}
digitalwrite(disprelay,低);
}
prevup =!= prevdwn)/测试开关机
&(DWN = =低)){
计数器+;如果(主动= = 0
){
setcounter --;
}
(主动= =如果2){
setcountera --;
}
digitalwrite(disprelay,低);
}
prevdwn =胆胃宁!= prevSel) //testing switch press
&&(sel == LOW)){
if (countera < 3){
countera ++;
setcounter = 0;
}
else{
countera = 0;
}
if (menu == 1){
disPWR();
}
if (menu == 2){
oTime();
}
if (menu == 3){
cTime();
}
if (menu == 4){
trig();
}
}
prevSel = sel;
}
void disPWR(){
Serial.println("disPWR");
digitalWrite(disprelay, HIGH);
lcd.clear();
}
void oTime(){
active = 0;
lcd.clear();
lcd.setCursor(0 ,0);
lcd.print("Set Open: ");
lcd.setCursor(0,1);
lcd.print("Prog Time> ");
//
lcd.setCursor(12,1);
lcd.print(upminutesa);
//
lcd.setCursor(13,1);
lcd.print(upminutesb);
//
lcd.setCursor(14,1);
lcd.print(":");
//
lcd.setCursor(15,1);
lcd.print(uphoursa);
//
lcd.setCursor(16,1);
lcd.print(uphoursb);
//
lcd.setCursor(0,2);
lcd.print("Edit Time> ");
}
void oTimedisplay(){
lcd.setCursor(12,2);
lcd.print(setupminutesa);
//
lcd.setCursor(13,2);
lcd.print(setupminutesb);
//
lcd.setCursor(14,2);
lcd.print(":");
lcd.setCursor(15,2);
lcd.print(setuphoursa);
lcd.setCursor(16,2);
lcd.print(setuphoursb);
lcd.setCursor(0,3);
lcd.print("Sel Digit>");
if (countera == 0){ //First hour digit
lcd.setCursor(12,3);
lcd.print("^");
switch (setcounter){
case 3:
setcounter = 2;
case -1:
setcounter = 0;
}
setupminutesa = setcounter;
}
if (countera == 1){ //Second hour digit
lcd.setCursor(13,3);
lcd.print("^");
switch (setcounter){
case 10:
setcounter = 9;
case -1:
setcounter = 0;
}
switch (setupminutesa){
case 2:
switch (setcounter){
case 5:
setcounter = 0;
}
}
setupminutesb = setcounter;
}
if (countera == 2){ //First Minute digit
lcd.setCursor(15,3);
lcd.print("^");
switch (setcounter){
case 6:
setcounter = 5;
case -1:
setcounter = 0;
}
setuphoursa = setcounter;
}
if (countera == 3){ //Second minute digit
lcd.setCursor(16,3);
lcd.print("^");
switch (setcounter){
case 10:
setcounter = 9;
case -1:
setcounter = 0;
}
setuphoursb = setcounter;
}
Serial.println("Done");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void cTime(){ //Menu for setting close time
active = 2;
lcd.clear();
lcd.setCursor(0 ,0);
lcd.print("Set Close: ");
lcd.setCursor(0,1);
lcd.print("Prog Time> ");
//
lcd.setCursor(12,1);
lcd.print(dwnminutesa);
//
lcd.setCursor(13,1);
lcd.print(dwnminutesb);
//
lcd.setCursor(14,1);
lcd.print(":");
//
lcd.setCursor(15,1);
lcd.print(dwnhoursa);
//
lcd.setCursor(16,1);
lcd.print(dwnhoursb);
//
lcd.setCursor(0,2);
lcd.print("Edit Time> ");
}
void cTimedisplay(){
lcd.setCursor(12,2);
lcd.print(setdwnminutesa);
//
lcd.setCursor(13,2);
lcd.print(setdwnminutesb);
//
lcd.setCursor(14,2);
lcd.print(":");
lcd.setCursor(15,2);
lcd.print(setdwnhoursa);
lcd.setCursor(16,2);
lcd.print(setdwnhoursb);
lcd.setCursor(0,3);
lcd.print("Sel Digit>");
if (countera == 0){ //First hour digit
lcd.setCursor(12,3);
lcd.print("^");
switch (setcountera){
case 3:
setcountera = 2;
case -1:
setcountera = 0;
}
setdwnminutesa = setcountera;
}
if (countera == 1){ //Second hour digit
lcd.setCursor(13,3);
lcd.print("^");
switch (setcountera){
case 10:
setcountera = 9;
case -1:
setcountera = 0;
}
switch (setdwnminutesa){
case 2:
switch (setcountera){
case 5:
setcountera = 0;
}
}
setdwnminutesb = setcountera;
}
if (countera == 2){ //First Minute digit
lcd.setCursor(15,3);
lcd.print("^");
switch (setcountera){
case 6:
setcountera = 5;
case -1:
setcountera = 0;
}
setdwnhoursa = setcountera;
}
if (countera == 3){ //Second minute digit
lcd.setCursor(16,3);
lcd.print("^");
switch (setcountera){
case 10:
setcountera = 9;
case -1:
setcountera = 0;
}
setdwnhoursb = setcountera;
}
Serial.println("Done");
}
void trig(){ //Keep track of blind position
trigcounter ++;
switch(trigcounter){
case 3:
trigcounter = 1;
}
if(trigcounter == 1){
blindposition = 1;
}
if(trigcounter == 2){
blindposition = 2;
}
Serial.println("Trig");
}
void motorfwd(){ //Move motor forwards
digitalWrite(power, LOW);
digitalWrite(bwd,HIGH);
digitalWrite(fwd,LOW);
}
void motorbwd(){ //Move motor backwards
digitalWrite(power, LOW);
digitalWrite(fwd,HIGH);
digitalWrite(bwd,LOW);
}
void motorstop(){ //Stop the motor
digitalWrite(power, HIGH);
digitalWrite(fwd,HIGH);
digitalWrite(bwd,HIGH);
}
void checktime(){ //Check the time form the RTC
DateTime now = rtc.now();
minup = upminutesa*10 + upminutesb;
hourup = uphoursa*10 + uphoursb;
mindwn = dwnminutesa*10 + dwnminutesb;
hourdwn = dwnhoursa*10 + dwnhoursb;
if(minup == now.hour()){
if(hourup = =现在。minute()){
blindposition = 1;} }
如果(hourdwn = =现在。minute()){
如果(mindwn = =现在。hour()){
blindposition = 2;} } }
无效checkblind() { //检查
盲目状态。如果(blindposition = = 1){
如果(greenstate = =高){
motorstop();
blindposition = 3;}如果
(greenstate = =低){
motorfwd();
} }如果
(blindposition = = 2){
如果(RedState = =高){
motorstop();
blindposition = 3;}如果
(RedState = =低){
motorbwd();
} }如果
(blindposition = = 3
连接<u>上</u>Arduino和选择合适的板和COM端口,以前所做的那样。然后继续上传代码。
-
blindopener2m_diytronics.ino
下载
步骤49:电压调整
最后一步是调整硬件从升压转换器的输出电压。
首先,除去正输出线和电源的盲刀采用直流输入。用你的万用表,将积极探索正极端子块和黑探讨负端子(标记在PCB)。
然后将电位器用螺丝刀到多表的读数是12v。
注意:您可能需要改变转动方向,如果电压下降。
最后取下电源并重新插入正极线。
|