Blink Multiple LEDs No Delay

The goal of my whole project is to control (blink) a large amount of LEDs with my Arduino. I would be using 16 outputs to blink all my LEDs. I wouldn't have any problems, but all the codes I typed up have delays in them...and I have more than one blink pattern. I was hoping to add a push button to allow me to flip though them. Seeing how it wasn't going work out well I looked in to the Blink Without Delay. I was able get a fair understanding how the code is working.
But I'm having a very hard time figuring out how to add on to the code so I can blink multiple LEDs. Everything I look up on the web points back to the code on how to blink a single LED with out a delay. I've been running around in circles with this now for last three weeks. Could someone please show me an example on how to blink multiple LEDs with no delay.
Most of my codes I typed up before were dealing with half the LEDs on and the rest off till the other ones turn off. I guess an example on how to do that with Four LEDs (2xLEDs on 2xLEDs off back and forth) should be enough for me to work off of.

Thank you.

Code Im working with

const int ledPin =  13;
const int ledPin2 =  12;
const int ledPin3 =  10;
const int ledPin4 =  9;
int ledState = LOW;

unsigned long previousMillis = 0;

const long interval = 1000;

void setup() {

  pinMode(ledPin, OUTPUT);

void loop() {

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;

    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    digitalWrite(ledPin, ledState);

This code blinks many lights in a fixed pattern generated at random Then after so long another set of random patterns is generated and that shows for a time.

/* Random blinking lights
for use on a Christmas tree heat sink
By Grumpy Mike

#define numberOfLights 16

byte pins[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
byte pinState[numberOfLights];
long int changeTime[numberOfLights];
int flashRate[numberOfLights];
long flashChange;   // how often to change the flashing patterns

void setup() {
  for(int i = 0; i< numberOfLights; i++) {
    pinMode(pins[i], OUTPUT);
    changeTime[i] = millis() + random(1000, 200);
    pinState[i] = LOW;

void loop() {
  for(int i = 0; i < numberOfLights; i++) {
   if(changeTime[i] <= millis()) {
   pinState[i] = ~pinState[i];
   digitalWrite(pins[i], pinState[i]);
   changeTime[i] = millis() + flashRate[i];
  if(flashChange <= millis()) setFlashTime();

void setFlashTime(){
  for(int i=0; i<numberOfLights; i++){
    flashRate[i] = random(200, 1500);
  flashChange = millis() + 100000;  // next time to change pattern

If you look at my code libraries (link below) there is a sketch called MultiBlink where you can define a table of data for the LEDs to be on/off, timing, etc, and the sketch will keep track of it all and run it. No need to change any code, just the data. You can use it as-is or get ideas of how you could do your own.

Just in case

If your LEDs are connected directly to the Arduino (via a resistor) and all of them are on, you might be overloading the Vcc or GND pin of the micro. For the 328 (e.g. on the Uno), it’s 200mA max. Check the datasheet of the processor on your board.