#include <CountDown.h>
#include <ezButton.h>
#define OPEN 1
#define CLOSE 2
#define ON 1
#define OFF 2
#define DEBOUNCE_TIME 60
#define DELAY_TIME 2
CountDown cd(CountDown::SECONDS );
ezButton buttonStart(2);
uint8_t timer[2];
int buttonPin = 2;
int Led = 10;
uint8_t activeTimer = 0;
uint32_t counter = 0;
bool changed = true;
int mode=0; // 1-Close 2-open 0-standbuy
bool RunStatus=false;
bool Status=false;
void setSerial(){
Serial.begin(115200);
Serial.println("Started");
}
void setTimers(){
timer[0] = 10;
timer[1] = 10;
}
void pinOutSetup()
{ pinMode(buttonPin,INPUT_PULLUP);
pinMode(12, OUTPUT);
digitalWrite(12, HIGH);
//Close
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
pinMode(4, OUTPUT);
digitalWrite(4, LOW);
//Open
pinMode(5, OUTPUT);
digitalWrite(5, LOW);
pinMode(6, OUTPUT);
digitalWrite(6, LOW);
}
void setup() {
// put your setup code here, to run once:
setSerial();
pinOutSetup();
setTimers();
mode=CLOSE;
buttonStart.setDebounceTime(DEBOUNCE_TIME);
}
void RelayClose(int cmd)
{
switch (cmd) {
case ON:
digitalWrite(3, HIGH);
delay(DELAY_TIME*1000);
digitalWrite(4, HIGH);
break;
case OFF:
digitalWrite(3, LOW);
digitalWrite(4, LOW);
break;
default:
// statements
break;
}}
void RelayOpen(int cmd)
{
switch (cmd) {
case ON:
digitalWrite(5, HIGH);
delay(DELAY_TIME*1000);
digitalWrite(6, HIGH);
break;
case OFF:
digitalWrite(5, LOW);
digitalWrite(6, LOW);
break;
default:
// statements
break;
}}
void processCounterClose()
{if (RunStatus==false) { return ;}//not run
if (mode!=OPEN) return; // 1-Close 2-open 0-standbuy
RelayOpen(OFF);
RelayClose(ON);
// if (mode != 2) return;
counter = cd.remaining();
//Serial.println("cd.remaining()"); Serial.println(counter);
if (counter == 0)
{RunStatus=false;
mode=CLOSE; // 1-Close 2-open 0-standbuy
RelayClose(OFF);
// cd.stop();
Serial.println("EndProcess Close");
// delay(100);
}
else {
}
}
void processCounterOpen()
{if (RunStatus==false) { return ;}//under proces
if (mode!=CLOSE) return; // 1-Close 2-open 0-standbuy
RelayClose(OFF);
RelayOpen(ON);
// if (mode != 2) return;
counter = cd.remaining();
//Serial.println("cd.remaining()"); Serial.println(counter);
if (counter == 0)
{RunStatus=false;
mode=OPEN; // 1-Close 2-open 0-standbuy
RelayOpen(OFF);
Serial.println("EndProcess OPEN");
//cd.stop();
// delay(100);
}
else {
}
}
//-------------------------------------
void CloseGate()
{if (RunStatus==true) {Serial.println("Under Process");return;}//under proces
//Serial.println("Close Start");
RunStatus=true;
cd.start(timer[0] );
//cd.restart();
}
//-------------------------------
void OpenGate()
{if (RunStatus==true) {Serial.println("Under Process"); return;}
//Serial.println("Open Start");
RunStatus=true;
cd.start(timer[1]);
//cd.restart();
}
int debounce=0;
void CommandButton()
{ // if the button is pressed it is low state
debounce++;
Serial.println(debounce);
Serial.println(millis() - debounce);
//if ((millis() - debounce)<2000) return;
debounce=millis();
Serial.write("Recive Command."); // ESC command
if ( RunStatus==false) // not Under Process
{ if (mode==CLOSE) // 1-Close 2-open 0-standbuy //bool mode=false; //TRUE=Close FALSE=open
{//Open
digitalWrite(LED_BUILTIN,LOW); //see flickering led or less bright
Serial.println("Open Process");
mode=CLOSE;
OpenGate();
// digitalWrite(3, HIGH);
} else
{//Close
digitalWrite(LED_BUILTIN,HIGH); //see flickering led or less bright
Serial.println("Close Process");
mode=OPEN;
CloseGate();
}
}
}
void PrintStatus(int cmd)
{
switch (cmd) {
case OPEN:
Serial.print(" status->OPEN ");Serial.print(mode);
break;
case CLOSE:
Serial.print(" status->CLOSE ");Serial.print(mode);
break;
default:
// statements
break;
}}
void RunStatus(int cmd)
{
switch (cmd) {
case 1:
Serial.print(" status->OPEN ");Serial.print(mode);
break;
case 0:
Serial.print(" status->CLOSE ");Serial.print(mode);
break;
default:
// statements
break;
}}
unsigned long Show=0;
void loop() {
//int buttonState = digitalRead(buttonPin); //read the state of the button input
//if (buttonState == LOW) CommandButton ();
buttonStart.loop();
if (buttonStart.isPressed()) CommandButton();
processCounterClose();
processCounterOpen();
//Show=2000;
if ((millis() - Show)>=1000)
{
Serial.print("--------------------------------- "); Serial.println(millis());
PrintStatus(mode);
Serial.print(" RunStatus->");Serial.print(RunStatus);
Show=millis();
if (RunStatus==false)
{ Serial.println(" Iddle");
if (mode==CLOSE) Serial.print(" Close ");
if (mode==OPEN) Serial.print(" Open ");
}
else
{ Serial.println(" Running Process");
if (mode==CLOSE) { Serial.print(" Close timer->"); Serial.println(counter); }
if (mode==OPEN) { Serial.print(" Open tiemr->"); Serial.println(counter); }
}
Serial.println();
Serial.println();
Serial.println("-------------------------------------------------");
}
}