how i to infinity loop except push the button

i have a project that i make a 3 trafic light with 9LED, and i integrated with a railroad crossing (servo) and than a push button as a input, my plan is when i push the button once its move the servo into 0-90 degree and the light only the red colour high, than if i push the button twice, its move the servo into 0-90 degree and the light have a 3 fase of colour pattern, and my plan the pattern didnt stop or keep looping, except i push the button again.
now my problem is when i push the button twice, the led stop at the third pattern.
my question is how to make my project always looping ?

#include <Servo.h>
Servo servo;
int button= 12;
int nilaitombol;
int count;
int ledDelay = 300; 
int redPin = 11;
int yellowPin = 10;
int bluePin = 9;
int merah = 8;
int kuning = 7;
int hijau = 6;
int bereum = 5;
int koneng = 4;
int hejo = 3;

void setup(){
  servo.attach(13);
 pinMode(redPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(merah, OUTPUT);
  pinMode(kuning, OUTPUT);
  pinMode(hijau, OUTPUT);
  pinMode(bereum, OUTPUT);
  pinMode(koneng, OUTPUT);
  pinMode(hejo, OUTPUT);
  pinMode(button, INPUT);
}
void loop(){
nilaitombol= digitalRead(button);
if(nilaitombol == 1){
count++;
delay(300);
if(count==1){
  digitalWrite(kuning, LOW);digitalWrite(koneng, LOW);  digitalWrite(bluePin, LOW);
digitalWrite(redPin, HIGH);
digitalWrite(merah, HIGH);
digitalWrite(bereum, HIGH);
 servo.write (90);
  delay(2000);
  servo.write (0);
}
if(count==2){
 servo.write (0);
  delay(2000);
  servo.write (90);
  digitalWrite(redPin, LOW);
digitalWrite(merah, LOW);
digitalWrite(bereum, LOW);
  digitalWrite(bluePin, HIGH); digitalWrite(merah, HIGH);digitalWrite(bereum, HIGH); // jalan yos sudarso-madiun(hijau), jln prambanan-nganjuk (merah), jln yos sudarso-nganjuk(merah)
  digitalWrite(redPin, LOW); digitalWrite(kuning, LOW); digitalWrite(koneng, LOW); 
  delay(900);delay(1400); delay(2000); // tunda beberapa milisecond
  digitalWrite(redPin, HIGH); digitalWrite(hijau, HIGH);digitalWrite(hejo, HIGH);
   digitalWrite(merah, LOW);digitalWrite(bereum, LOW); digitalWrite(bluePin, LOW); // 
  delay(ledDelay); delay(1500);delay(900);// tunda 3 detik
  digitalWrite(bluePin, HIGH); digitalWrite(kuning, HIGH);digitalWrite(koneng, HIGH);// 
  digitalWrite(redPin, LOW); digitalWrite(yellowPin, LOW); digitalWrite(hijau, LOW); digitalWrite(hejo, LOW); //
  delay(2000); delay(ledDelay); delay(ledDelay);// 
count=0;
}
}
}

Hello ganjargan,
Welcome.
++Karma; // For correctly posting your code in code tags on your first post.

You need to get rid of the delays, here are two tutorials that should help you:
Using millis for timing
Demonstration for several things at the same time

Good luck.

Sorry, but I can't understand your description of the problem.

Have a look at how the code is organized in Several Things at a Time

Note how each function runs very briefly and returns to loop() so the next one can be called. None of the functions tries to complete a task in one call. And there may be dozens of calls to a function before it is actually time for it to do anything.

Also note that delay() blocks the Arduino from doing other things until the delay period is complete. My demo uses millis() for non-blocking timing. Have a look at Using millis() for timing. A beginners guide if you need more explanation.

Please use the AutoFormat tool to lay out your code for easier reading and don't put multiple statements on one line.

...R