Sadly I have no time left. Two ideas from me (see comments):
void loop() {
buttonState = digitalRead(BUTTON_PIN4);
if (buttonState != lastButtonState) {
}
if (buttonState == LOW) {
buttonPushCounter += 1;
// what if 8 is exceeded at this point? Won´t
if (buttonState == 0) {
// as the max value in switch statement is 8, set to 0 if 8 was last state
if (buttonPushCounter >= 8)
buttonPushCounter = 0;
else
++buttonPushCounter;
}
// make more sense?
delay(250);
}
lastButtonState = buttonPushCounter;
// Why do you remember the counter
// (which could be much higher then 0 or 1)?
// How ´bout
lastButtonState = buttonState;