Happy Father's Day! Hope you're having a great time with your offspring and this project. We're model rocketeers from way back. Here's a sketch to try, maybe it will help get past the countdown part. It's just a demo, no LCD, etc., and does not attempt to address all the features and requirements posted earlier

#include <Button.h> //https://github.com/JChristensen/Button
#include <Streaming.h> //http://arduiniana.org/libraries/streaming/
#define BUTTON_START 4 //wire from pin 4 to ground
#define BUTTON_ABORT 5 //wire from pin 5 to ground
#define redLED 6 //wire from pin 6 to ground through appropriate current limiting resistor (e.g. 330 ohm)
#define grnLED 7 //wire from pin 7 to ground through appropriate current limiting resistor (e.g. 330 ohm)
#define PIEZO 8 //wire from pin 8 to ground through appropriate current limiting resistor (e.g. 100 ohm)
#define DEBOUNCE_MS 25 //debounce interval (ms)
#define COUNTDOWN_SEC 10 //number of seconds to countdown from
Button btnStart(BUTTON_START, true, true, DEBOUNCE_MS); //instantiate the buttons, pullups on, inverted logic
Button btnAbort(BUTTON_ABORT, true, true, DEBOUNCE_MS);
unsigned long ms; //the time from millis()
unsigned long msCount; //time when the count was changed
unsigned long msLED; //time when the LED was turned on
int count; //the countdown counter
enum {START, STANDBY, COUNTDOWN, ABORT, LAUNCH, WAIT}; //states for the state machine
uint8_t STATE; //current state machine state
void setup(void)
{
Serial.begin(115200);
pinMode(redLED, OUTPUT);
pinMode(grnLED, OUTPUT);
pinMode(PIEZO, OUTPUT);
}
void loop(void)
{
ms = millis();
btnStart.read();
btnAbort.read();
switch ( STATE ) {
case START:
noTone(PIEZO);
digitalWrite(redLED, LOW);
digitalWrite(grnLED, HIGH);
Serial << endl << "Stand by to begin countdown sequence..." << endl;
STATE = STANDBY;
break;
case STANDBY:
if ( btnStart.wasPressed() ) {
count = COUNTDOWN_SEC;
tone(PIEZO, 1500, 800);
digitalWrite(redLED, HIGH);
digitalWrite(grnLED, LOW);
msCount = ms;
msLED = ms;
STATE = COUNTDOWN;
Serial << "Countdown: " << _DEC(count) << " ... ";
}
break;
case COUNTDOWN:
if ( btnAbort.wasPressed() ) {
STATE = ABORT;
break;
}
if ( ms - msLED >= 500 && count > 1) {
digitalWrite(redLED, LOW);
msLED = ms;
}
if ( ms - msCount >= 1000 ) {
msCount = ms;
digitalWrite(redLED, HIGH);
msLED = ms;
tone( PIEZO, 1500, --count == 1 ? 900 : 100 );
if ( count == 0 )
STATE = LAUNCH;
else
Serial << _DEC(count) << " ... ";
}
break;
case ABORT:
Serial << endl << "Countdown aborted at T-" << _DEC(count) << " seconds!" << endl;
STATE = START;
break;
case LAUNCH:
tone(PIEZO, 2000, 1000);
digitalWrite(redLED, HIGH);
digitalWrite(grnLED, HIGH);
msLED = ms;
Serial << "LAUNCH!" << endl;
STATE = WAIT;
break;
case WAIT:
if ( ms - msLED >= 2000 ) STATE = START;
break;
}
}