Traffic Light Controller

Thanks for all the input, sorry my diagram sucks so much but the relay coils are connected to ground in the actual circuit.

And yeah, its a bunch of delay()s controlled by variable resister input so i can change the speed of each pattern. I'm not too picky as long as it works. Although I am curious how I would do it without using delay. here is one of the patterns

     if(buttonCount==0)//light pattern 1: scrolling down
     {
       sensorValue = analogRead(analogInPin);
       if(cnt1==0)
       {
         allOff(digitalG,digitalG2,digitalG3,digitalY,digitalY2,digitalY3,digitalR,digitalR2,digitalR3);
         digitalWrite(digitalG,HIGH);
         digitalWrite(digitalG2,HIGH);
         digitalWrite(digitalG3,HIGH);
         cnt1++;
       }
       else if(cnt1==1)
       {
         delay(20*sensorValue);
         allOff(digitalG,digitalG2,digitalG3,digitalY,digitalY2,digitalY3,digitalR,digitalR2,digitalR3);
         digitalWrite(digitalY,HIGH);
         digitalWrite(digitalY2,HIGH);
         digitalWrite(digitalY3,HIGH);
         cnt1++;
       }
       else if(cnt1==2)
       {
         delay(20*sensorValue);
         allOff(digitalG,digitalG2,digitalG3,digitalY,digitalY2,digitalY3,digitalR,digitalR2,digitalR3);
         digitalWrite(digitalR,HIGH);
         digitalWrite(digitalR2,HIGH);
         digitalWrite(digitalR3,HIGH);
         cnt1++;
       }
       else if (cnt1 ==3)
       {
         delay(20*sensorValue);
         allOff(digitalG,digitalG2,digitalG3,digitalY,digitalY2,digitalY3,digitalR,digitalR2,digitalR3);
         cnt1++;
       }
       else
       {
         cnt1=0;//reset counter
       }
        
     }