PaulS:
I suspect that if you use meaningful names for these three variables, it will become obvious what the problem is.
I knew what the values meant but like you said, may be for others makes it harder to follow or not understanding the meaning, I've changed the variables
StartMillis to Liftdownstarted
previousMillis to LiftdownpreviousMillis
interval to Liftdowntime
Like you said it may be staring me in the face what the error/issue is but I can't still see what the issue could be, I did try to add debounce to the buttons but still the same issue so I did not re-add it, May be I've tried to many times and lost my way it
const int Gate_limitpin = 11;
const int Max_hieghtlimitpin = 10;
const int Motor_enable = 2;
const int upbuttonPin = 13;
const int DwnbuttonPin = 12;
const int LIFT_DWN_COIL = 3;
const int LIFT_UP_COIL = 4;
const int HEIGHT_REACHED = 8;
boolean UP_FLAG = false;
boolean DWN_FLAG = false;
unsigned long Liftdownstarted = millis();
//unsigned long Liftdownstarted = millis();
int UP_duty = 50;
int Duty =90;
int Duty_SLOW1=80;
int Duty_MAX=100;
unsigned long Liftdowntime =10000;
unsigned long LiftdownpreviousMillis = 0;
void setup() {
Serial.begin(9600);
pinMode(LIFT_UP_COIL, OUTPUT);
pinMode(LIFT_DWN_COIL, OUTPUT);
pinMode(upbuttonPin, INPUT);
digitalWrite(upbuttonPin, HIGH);
pinMode(DwnbuttonPin, INPUT);
digitalWrite(DwnbuttonPin, HIGH);
pinMode(HEIGHT_REACHED, OUTPUT);
pinMode( Gate_limitpin, INPUT);
digitalWrite(Gate_limitpin, HIGH);
pinMode(Max_hieghtlimitpin, INPUT);
digitalWrite(Max_hieghtlimitpin, HIGH);
pinMode(Motor_enable, OUTPUT);
pinMode(HEIGHT_REACHED, INPUT);
digitalWrite(HEIGHT_REACHED, HIGH);
Serial.println(" STORED VALUES ");
Serial.println(" *****....***** ");
Serial.println(Duty);
Serial.println(Duty_MAX);
Serial.println(Duty_SLOW1);
Serial.println(Liftdowntime);
Serial.flush();
}
void loop() {
if ((digitalRead(Gate_limitpin) == LOW) || (digitalRead(Max_hieghtlimitpin) == LOW)) {
digitalWrite(Motor_enable, LOW);
digitalWrite(LIFT_UP_COIL, LOW);
Serial.println("Gate open or max hieght limit switch active");
LOCKED ();
}
if ((digitalRead(upbuttonPin) == LOW) && (digitalRead(HEIGHT_REACHED) == HIGH)) {
digitalWrite(Motor_enable, HIGH);
digitalWrite(LIFT_UP_COIL, HIGH);
UP_FLAG = 1;
Serial.println("lifting");
LIFTING_UP ();
}
// #### TURNS ON THE PUMP AND LIFT COIL FOR .3 SECONDS TO PREVENT INTAIL DROP OF PLATFORM #################
if (digitalRead(DwnbuttonPin) == LOW) {
delay(50);
digitalWrite(Motor_enable, HIGH);
digitalWrite(LIFT_UP_COIL, HIGH);
digitalWrite(LIFT_DWN_COIL, HIGH);
UP_duty = 50;
Duty = UP_duty;
delay(200);
digitalWrite(Motor_enable, LOW);
digitalWrite(LIFT_UP_COIL, LOW);
Duty = 0;
DWN_FLAG = 1;
Liftdownstarted = 0;
LiftdownpreviousMillis = 0;
Serial.println("LOWERING");
LIFTING_DOWN ();
}
}
void LIFTING_UP ()
{
while (true)
{
Serial.print("Duty =");
Serial.println(Duty);
// ##### CHECKING THE STATE OF THE LIMIT SWITCHES ####
if (digitalRead(Gate_limitpin) == LOW)
{
Serial.println( "GATE OPEN, CLOSE GATE");
digitalWrite(Motor_enable, LOW);
digitalWrite(LIFT_DWN_COIL, LOW);
digitalWrite(LIFT_UP_COIL, LOW);
// digitalWrite(UP_FLAG, LOW);
// digitalWrite(DWN_FLAG, LOW);
return;
}
// ##### FAIL SAFE LIMIT SWITCH #########
if (digitalRead(Max_hieghtlimitpin) == LOW) {
Serial.println( "FAIL SAFE LIMIT SWITCH ACTIVATED");
digitalWrite(Motor_enable, LOW);
digitalWrite(LIFT_DWN_COIL, LOW);
digitalWrite(LIFT_UP_COIL, LOW);
digitalWrite(UP_FLAG, LOW);
digitalWrite(DWN_FLAG, LOW);
return;
}
// #### SETS THE LIFT SPEED #################
if (UP_FLAG == 1 && (digitalRead(HEIGHT_REACHED) == HIGH)) {
Duty++;
delay(100);
if (Duty > Duty_MAX) { // SETS MAX LIFT SPEED;
Duty = Duty_MAX;
}
}
// ##### CHECKING THE STATE OF THE LIMIT SWITCHES AND PRE-SLOW DOWN ACTIVATION ####
if (UP_FLAG == 1 && (digitalRead(HEIGHT_REACHED) == LOW)) {
Duty--;
delay(50);
if (Duty < Duty_SLOW1) {
Duty = Duty_SLOW1;
Serial.println( "STAGE 1 COMPLETE SLOWING DOWN");
}
}
// ##### CHECKING THE STATE OF THE LIMIT SWITCHES AND PRE-SLOW DOWN ACTIVATION ####
if (UP_FLAG == 1 && (digitalRead(HEIGHT_REACHED) == LOW && Duty < Duty_SLOW1 + 5)) {
digitalWrite(Motor_enable, LOW);
digitalWrite(LIFT_DWN_COIL, LOW);
digitalWrite(LIFT_UP_COIL, LOW);
Serial.println( "LIFTING COMPLETED");
Duty = 5; //make sure the mosfets are fully off on power up
return;
}
} // end of while
} // end of LIFTING_UP
// #### IF LIMIT SWITCHES ARE ACTIVE STOP ALL FUNCTIONS #################
void LOCKED ()
{
while (true)
{
while ((digitalRead(Gate_limitpin) == LOW) || (digitalRead(Max_hieghtlimitpin) == LOW)) {
digitalWrite(Motor_enable, LOW);
digitalWrite(LIFT_DWN_COIL, LOW);
digitalWrite(LIFT_UP_COIL, LOW);
Serial.println("GATE OPEN, CLOSE GATE");
}
return;
}
}
// #### LOWER THE PLATFORM IF LIMIT SWITCHES ARE GOOD #################
void LIFTING_DOWN ()
{
while (true)
{
// Serial.println(Liftdownstarted);
// LiftdownpreviousMillis = Liftdownstarted;
//delay(100);
//'######## CHECKS IF THE GATE IS OPEN ###########
if ((DWN_FLAG == 1) && (digitalRead(Gate_limitpin) == LOW)) {
digitalWrite(Motor_enable, LOW);
digitalWrite(LIFT_DWN_COIL, LOW);
digitalWrite(LIFT_UP_COIL, LOW);
DWN_FLAG = true;
while (digitalRead(Gate_limitpin) == LOW) {
digitalWrite(Motor_enable, LOW);
digitalWrite(LIFT_DWN_COIL, LOW);
digitalWrite(LIFT_UP_COIL, LOW);
Serial.println("GATE OPEN, CLOSE GATE");
}
return;
}
//####### COUNTS DOWN THE TIME AND TURNS OFF THE DOWN REALY ############
Liftdownstarted = millis(); //Liftdownstarted = currentmillis
if ((DWN_FLAG == 1) && (Liftdownstarted - LiftdownpreviousMillis >= Liftdowntime)) { // Is liftstarted - liftdownpreviousmillis more than 10 seocnds stop lifdown
LiftdownpreviousMillis = Liftdownstarted; // make lifdownstarted = liftdownpreviuosmillis
digitalWrite(Motor_enable, LOW);
digitalWrite(LIFT_DWN_COIL, LOW);
Serial.println("LOWERING COMPLETED");
Liftdownstarted = 0; //again to make sure reset lifdownstarted
return;
}
}
}