Push button delay

Hello,

I-m very new to arduino and as my first project i just connected a bunch of LEDs which light up in different patterns depending on how many times a button has been pressed. The problem is that i need to leave pressed the button for about 3 seconds in order to take effect. It is not doing it instantly.

Here's the code I'm using.

// set pin numbers:
const int buttonPin = 12;     // the number of the pushbutton pin
int ledPins[] = {A5, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 };       // an array of pin numbers to which LEDs are attached

// variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button

void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT_PULLUP);

  // initialize serial communication:
  pinMode (A5, OUTPUT);          // different led patterns
  pinMode (2, OUTPUT);
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  pinMode (8, OUTPUT);
  pinMode (7, OUTPUT);
  pinMode (9, OUTPUT);
  pinMode (10, OUTPUT);
  pinMode (11, OUTPUT);
  pinMode (13, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {

    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:

      buttonPushCounter++;
      Serial.println(buttonState);
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    } else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println(buttonState);
      Serial.println("off");
    }
  }

  // save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;


  // turns on the LED based on the buttonPushCounter
  switch (buttonPushCounter) {
    case 0:
      digitalWrite (A5, LOW);
      delay (60);
      digitalWrite (2, LOW);
      delay (59);
      digitalWrite (3, LOW);
      delay (58);
      digitalWrite (4, LOW);
      delay (57);
      digitalWrite (5, LOW);
      delay (56);
      digitalWrite (6, LOW);
      delay (55);
      digitalWrite (7, LOW);
      delay (54);
      digitalWrite (8, LOW);
      delay (53);
      digitalWrite (9, LOW);
      delay (52);
      digitalWrite (10, LOW);
      delay (51);
      digitalWrite (11, LOW);
      delay (50);
      digitalWrite (13, LOW);
      delay (49);
      digitalWrite (A5, HIGH);
      delay (48);
      digitalWrite (2, HIGH);
      delay (47);
      digitalWrite (3, HIGH);
      delay (46);
      digitalWrite (4, HIGH);
      delay (45);
      digitalWrite (5, HIGH);
      delay (44);
      digitalWrite (6, HIGH);
      delay (43);
      digitalWrite (7, HIGH);
      delay (42);
      digitalWrite (8, HIGH);
      delay (41);
      digitalWrite (9, HIGH);
      delay (40);
      digitalWrite (10, HIGH);
      delay (39);
      digitalWrite (11, HIGH);
      delay (38);
      digitalWrite (13, HIGH);
      break;
    case 1:
      digitalWrite (13, LOW);
      delay (60);
      digitalWrite (11, LOW);
      delay (59);
      digitalWrite (10, LOW);
      delay (58);
      digitalWrite (9, LOW);
      delay (57);
      digitalWrite (8, LOW);
      delay (56);
      digitalWrite (7, LOW);
      delay (55);
      digitalWrite (6, LOW);
      delay (54);
      digitalWrite (5, LOW);
      delay (53);
      digitalWrite (4, LOW);
      delay (52);
      digitalWrite (3, LOW);
      delay (51);
      digitalWrite (2, LOW);
      delay (50);
      digitalWrite (A5, LOW);
      delay (49);
      digitalWrite (13, HIGH);
      delay (48);
      digitalWrite (11, HIGH);
      delay (47);
      digitalWrite (10, HIGH);
      delay (46);
      digitalWrite (9, HIGH);
      delay (45);
      digitalWrite (8, HIGH);
      delay (44);
      digitalWrite (7, HIGH);
      delay (43);
      digitalWrite (6, HIGH);
      delay (42);
      digitalWrite (5, HIGH);
      delay (41);
      digitalWrite (4, HIGH);
      delay (40);
      digitalWrite (3, HIGH);
      delay (39);
      digitalWrite (2, HIGH);
      delay (38);
      digitalWrite (A5, HIGH);
      break;
    case 2:
      digitalWrite (13, HIGH);
      delay (60);
      digitalWrite (11, HIGH);
      delay (59);
      digitalWrite (10, HIGH);
      delay (58);
      digitalWrite (9, HIGH);
      delay (57);
      digitalWrite (8, HIGH);
      delay (56);
      digitalWrite (7, HIGH);
      delay (55);
      digitalWrite (6, HIGH);
      delay (54);
      digitalWrite (5, HIGH);
      delay (53);
      digitalWrite (4, HIGH);
      delay (52);
      digitalWrite (3, HIGH);
      delay (51);
      digitalWrite (2, HIGH);
      delay (50);
      digitalWrite (A5, HIGH);
      delay (49);
      digitalWrite (13, LOW);
      delay (48);
      digitalWrite (11, LOW);
      delay (47);
      digitalWrite (10, LOW);
      delay (46);
      digitalWrite (9, LOW);
      delay (45);
      digitalWrite (8, LOW);
      delay (44);
      digitalWrite (7, LOW);
      delay (43);
      digitalWrite (6, LOW);
      delay (42);
      digitalWrite (5, LOW);
      delay (41);
      digitalWrite (4, LOW);
      delay (40);
      digitalWrite (3, LOW);
      delay (39);
      digitalWrite (2, LOW);
      delay (38);
      digitalWrite (A5, LOW);
      break;
    case 3:
      digitalWrite (13, HIGH);
      delay (60);
      digitalWrite (10, HIGH);
      delay (59);
      digitalWrite (8, HIGH);
      delay (58);
      digitalWrite (6, HIGH);
      delay (57);
      digitalWrite (4, HIGH);
      delay (56);
      digitalWrite (2, HIGH);
      delay (55);
      digitalWrite (A5, HIGH);
      delay (54);
      digitalWrite (3, HIGH);
      delay (53);
      digitalWrite (5, HIGH);
      delay (52);
      digitalWrite (7, HIGH);
      delay (51);
      digitalWrite (9, HIGH);
      delay (50);
      digitalWrite (11, HIGH);
      delay (49);
      digitalWrite (11, LOW);
      delay (48);
      digitalWrite (9, LOW);
      delay (47);
      digitalWrite (7, LOW);
      delay (46);
      digitalWrite (5, LOW);
      delay (45);
      digitalWrite (3, LOW);
      delay (44);
      digitalWrite (A5, LOW);
      delay (43);
      digitalWrite (2, LOW);
      delay (42);
      digitalWrite (4, LOW);
      delay (41);
      digitalWrite (6, LOW);
      delay (40);
      digitalWrite (8, LOW);
      delay (39);
      digitalWrite (10, LOW);
      delay (38);
      digitalWrite (13, LOW);
      break;

    default:
      buttonPushCounter = 0;
      break;
  }

}

Any ideas on how can i make the button work instantly?

Thanks in advance!

That is because you have delay functions in your code and so the code only looks at your button at the end of each cycle.

Look at the sticky post at the start of the section, how to do several things at once.

Thank you very much! exactly what I needed.

I really appreciate it.