Lost on how to control multiple led strips with MEGA

To make the effects run once/in sequence, perhaps something like:

#include "FastLED.h"

#define NUM_LEDS_PER_STRIP  37
#define NUM_STRIPS          12

const uint8_t pinStrip1 = 1;
const uint8_t pinStrip2 = 2;
const uint8_t pinStrip3 = 3;
const uint8_t pinStrip4 = 4;
const uint8_t pinStrip5 = 5;
const uint8_t pinStrip6 = 6;
const uint8_t pinStrip7 = 7;
const uint8_t pinStrip8 = 8;
const uint8_t pinStrip9 = 9;
const uint8_t pinStrip10 = 10;
const uint8_t pinStrip11 = 11;
const uint8_t pinStrip12 = 12;

//const uint8_t pinDebug = A0;

CRGB 
    grLeds[NUM_STRIPS][NUM_LEDS_PER_STRIP];
CLEDController 
    *stripControl[NUM_STRIPS];

uint8_t gBrightness = 255;

void setup() 
{ 
    stripControl[0] = &FastLED.addLeds<WS2812, pinStrip1, GRB>(grLeds[0], NUM_LEDS_PER_STRIP);
    stripControl[1] = &FastLED.addLeds<WS2812, pinStrip2, GRB>(grLeds[1], NUM_LEDS_PER_STRIP);
    stripControl[2] = &FastLED.addLeds<WS2812, pinStrip3, GRB>(grLeds[2], NUM_LEDS_PER_STRIP);
    stripControl[3] = &FastLED.addLeds<WS2812, pinStrip4, GRB>(grLeds[3], NUM_LEDS_PER_STRIP);
    stripControl[4] = &FastLED.addLeds<WS2812, pinStrip5, GRB>(grLeds[4], NUM_LEDS_PER_STRIP);
    stripControl[5] = &FastLED.addLeds<WS2812, pinStrip6, GRB>(grLeds[5], NUM_LEDS_PER_STRIP);
    stripControl[6] = &FastLED.addLeds<WS2812, pinStrip7, GRB>(grLeds[6], NUM_LEDS_PER_STRIP);
    stripControl[7] = &FastLED.addLeds<WS2812, pinStrip8, GRB>(grLeds[7], NUM_LEDS_PER_STRIP);
    stripControl[8] = &FastLED.addLeds<WS2812, pinStrip9, GRB>(grLeds[8], NUM_LEDS_PER_STRIP);
    stripControl[9] = &FastLED.addLeds<WS2812, pinStrip10, GRB>(grLeds[9], NUM_LEDS_PER_STRIP);
    stripControl[10] = &FastLED.addLeds<WS2812, pinStrip11, GRB>(grLeds[10], NUM_LEDS_PER_STRIP);
    stripControl[11] = &FastLED.addLeds<WS2812, pinStrip12, GRB>(grLeds[11], NUM_LEDS_PER_STRIP);

    //pinMode( pinDebug, OUTPUT );
    
}//setup

void loop() 
{ 
    doEffects();
    
}//loop

void doEffects( void )
{
    static uint8_t
        stripIdx = 0,
        stateEffects = 0;

    switch( stateEffects )
    {
        case    0:
            //stay in state 0 doing the meteor effect...
            meteorRain( stripIdx, CRGB(0x00,0x00,0x00), CRGB(0xff,0xff,0xff), 10, 64, true, 100 );
            stripIdx++;
            //until all strips are done...
            if( stripIdx == NUM_STRIPS )            
                stateEffects++;    //then bump to the next state
            
        break;

        case    1:
            //add another effect here and when done...
            for( stripIdx=0; stripIdx<NUM_STRIPS; stripIdx+=3 )
            {
                fill_solid( grLeds[stripIdx], NUM_LEDS_PER_STRIP, CRGB(0xff, 0x00, 0x00) );
                stripControl[stripIdx]->showLeds(gBrightness);
                fill_solid( grLeds[stripIdx+1], NUM_LEDS_PER_STRIP, CRGB(0x00, 0xff, 0x00) );
                stripControl[stripIdx+1]->showLeds(gBrightness);
                fill_solid( grLeds[stripIdx+2], NUM_LEDS_PER_STRIP, CRGB(0x00, 0x00, 0xff) );
                stripControl[stripIdx+2]->showLeds(gBrightness);
                
            }//for
            
            //move to the next effect
            stateEffects++;
            
        break;

        case    2:
            //add another effect and so on...
            //when done effects, just use an empty case like this
        break;
        
    }//switch
    
}//doEffects

void meteorRain(    uint8_t stripNo, 
                    CRGB ColorBackground, 
                    CRGB ColorMeteor, 
                    byte meteorSize, 
                    byte meteorTrailDecay, 
                    boolean meteorRandomDecay, 
                    uint32_t SpeedDelay ) 
{    
    // set background color    
    fill_solid( grLeds[stripNo], NUM_LEDS_PER_STRIP, ColorBackground );

    for(uint8_t i=0; i<NUM_LEDS_PER_STRIP*2; i++ ) 
    {
        // fade color to background color for all LEDs
        for(uint8_t led=0; led<NUM_LEDS_PER_STRIP; led++ ) 
        {
            if( (!meteorRandomDecay) || (random(10) > 5) ) 
            {
                grLeds[stripNo][led] = fadeTowardColor( grLeds[stripNo][led], ColorBackground, meteorTrailDecay ); 
                
            }//if
        
        }//for

        // draw meteor
        for( uint8_t j=0; j<meteorSize; j++ ) 
        {
            if( ( (i-j) < NUM_LEDS_PER_STRIP) && ((i-j) >= 0) ) 
            {
                grLeds[stripNo][i-j] = ColorMeteor;
            
            }//if
        
        }//for
       
        stripControl[stripNo]->showLeds(gBrightness);
        delayMicroseconds( SpeedDelay );
        
    }//for        
        
}//meteorRain

CRGB fadeTowardColor( CRGB &cur, const CRGB &target, uint8_t amount )
{
    nblendU8TowardU8( cur.red,   target.red,   amount);
    nblendU8TowardU8( cur.green, target.green, amount);
    nblendU8TowardU8( cur.blue,  target.blue,  amount);
    
    return cur;
    
}//fadeTowardColor

void nblendU8TowardU8( uint8_t &cur, const uint8_t target, uint8_t amount )
{
    if( cur == target) 
        return;
    
    if( cur < target ) 
    {
        uint8_t delta = target - cur;
        delta = scale8_video( delta, amount);
        cur += delta;
        
    }//if
    else 
    {
        uint8_t delta = cur - target;
        delta = scale8_video( delta, amount);
        cur -= delta;
        
    }//else
    
}//nblendU8TowardU8