A different version with a BUTflag variable to keep track of the button press and release. I have not dealt with the DUMPTIME variable but hopefully this will give you an idea of how to use flags so the logic doesn't fail.
#define DUMP 2 // Pin connected to big dump relay
#define BUTTON 3 // Pin connected to manual dump push button.
#define BUTTONlight 4 // Pin connected to push button light.
#define DELAY 50 // Debounce Time
int BUTstate; // Current reading from BUTTON pin
int BUTflag = 0;
int go = 0;
long lastDebounce = 0; // Last time output was changed
unsigned long DUMPTIME;
unsigned long LOT;
unsigned long prevTIME;
int LOK = 0;
int readTselector(int pin)
// returns the button number pressed, or zero for none pressed
// int pin is the analog pin number to read
{
int c = analogRead(pin); // get the analog value
if (c > 1000){
return 0; // buttons have not been pressed
}
else if (c<1000 && c>600){
return 1; // button 1 pressed
}
else if (c<520 && c>400){
return 2; // button 2 pressed
}
else if (c>100 && c<400){
return 3; // button 3 pressed
}
else if (c<100){
return 4; // button 4 pressed
}
else return 0; // just in case
}
long DTselect()
{
switch(readTselector(1)){
case 0: return 210000; // no buttons pressed
break;
case 1: return 180000; // someone pressed a button!
break;
case 2: return 150000;
break;
case 3: return 120000;
break;
case 4: return 90000;
break;
default: return 210000; // default
break;
}
}
int LOselect()
{
switch( readTselector(2) ){
case 0: return 20000; // no buttons pressed
break;
case 1: return 15000; // someone pressed a button!
break;
case 2: return 10000;
break;
case 3: return 5000;
break;
case 4: return 0;
break;
default: return 20000; // default
break;
}
}
void setup()
{
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode (BUTTON, INPUT);
pinMode (BUTTONlight, OUTPUT);
pinMode (DUMP, OUTPUT);
digitalWrite(DUMP, HIGH);
delay(10000);
digitalWrite(DUMP, LOW);
digitalWrite(BUTTONlight, HIGH);
}
void loop()
{
DUMPTIME = DTselect();
LOT = LOselect();
BUTstate = digitalRead(BUTTON);
unsigned long currTIME = millis();
/*
if ((currTIME - prevTIME) >= DUMPTIME && !LOK){
LOK = 1;
digitalWrite(BUTTONlight, LOW);
digitalWrite(DUMP, HIGH);
delay(10000);
digitalWrite(DUMP, LOW);
prevTIME = currTIME;
}
else */
if (LOK){
delay(LOT);
digitalWrite(BUTTONlight, HIGH);
LOK = 0;
}
else if(!LOK){
if(!go && BUTstate && !BUTflag){
lastDebounce = millis();
BUTflag = 1;
}
else if (!go && BUTstate && BUTflag==1 && (millis() - lastDebounce) > DELAY){
BUTflag = 2;
}
else if (!go && !BUTstate && BUTflag==2){
BUTflag = 0;
go = 1;
}
else if (go){
digitalWrite(BUTTONlight, LOW);
digitalWrite(DUMP, HIGH);
delay(10000);
digitalWrite(DUMP, LOW);
prevTIME = currTIME;
go = 0;
LOK = 1;
}
}
}