Try this:
unsigned long startTime = millis();
unsigned long myDelay = 1000; // 1 second. Change to whatever delay you want
int state = 1;
if(buttonPushCounter ==0 && currentgear == '2' && previousgear == '1' ) {
while(state < 5){
switch (state){
case 1:
if (millis()-startTime >=myDelay){ //has time elapsed?
Serial1.write("\x10\x40\x87") ; //yes
startTime = millis(); //reset startTime for next output
state++; //go to next state
}
break;
case 2:
if (millis()-startTime >=myDelay){
Serial1.write("\x10\x40\x88") ;
startTime = millis();
state++;
}
break;
case 3:
if (millis()-startTime >=myDelay){
Serial1.write("\x10\x40\x89") ;
startTime = millis();
state++;
}
break;
case 4:
if (millis()-startTime >=myDelay){
Serial1.write("\x10\x40\x32") ;
startTime = millis();
state++;
}
break;
default: //you should never get here
state = 1; //reset to start, just in case!
break;
}
}
}