Programa con tira LED NEOPIXEL y Pulsador

Buenas soy nuevo por aquí, y aun no me manejo muy bien con los programas, aqui os dejo el que tengo hecho que consiste en un pulsador y un contador:
Pulso 1: Enciende Rojo.
Pulso 2: Apaga la tira.
Pulso 3: Enciende Blanco.
Pulso 4: Apaga la tira.
Pulso 5: Enciende bandera de Francia.
Pulso 6: Apaga y pone el contador a 0 para volver a empezar.

Lo que quiero hacer es que un pulso encienda rojo, otro pulso lo apague. Hasta ahí bien pero ahora me gustaría que con 3 pulsos encienda blanco, y otro pulso lo apague, esto sin pasar por el rojo, y lo mismo para el modo Francia con 5 pulsos, sin que pase por blanco ni por rojo, otro pulso apaga, todo esto con un solo pulsador, y fin del programa y no tengo ni idea de como conseguirlo si alguien me pudiese echar una mano estaría agradecido.

Aquí el programa:

int BOTON = 2;
int CONTADOR = 0;
int ESTADO_ANTERIOR = 0;

#include "FastLED.h"

#define NUM_LEDS 9

#define DATA_PIN 13

#define BRILLO 255

CRGB leds[NUM_LEDS];

void setup() { 

FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
FastLED.setBrightness(BRILLO);
pinMode(BOTON,INPUT);
Serial.begin(9600);
}

void loop() {
int LECTURA = digitalRead(BOTON);
if(LECTURA!=ESTADO_ANTERIOR){
if(LECTURA==HIGH){
  CONTADOR++;
  
Serial.println(CONTADOR);
}
}

ESTADO_ANTERIOR = LECTURA;

if(CONTADOR==1){

  leds[0] = CRGB::Red;
FastLED.show();
leds[1] = CRGB::Red;
FastLED.show();
leds[2] = CRGB::Red;
FastLED.show();
leds[3] = CRGB::Red;
FastLED.show();
leds[4] = CRGB::Red;
FastLED.show();
leds[5] = CRGB::Red;
FastLED.show();
leds[6] = CRGB::Red;
FastLED.show();
leds[7] = CRGB::Red;
FastLED.show();
leds[8] = CRGB::Red;
FastLED.show();

}

if(CONTADOR==2){

  leds[0] = CRGB::Black;
FastLED.show();
leds[1] = CRGB::Black;
FastLED.show();
leds[2] = CRGB::Black;
FastLED.show();
leds[3] = CRGB::Black;
FastLED.show();
leds[4] = CRGB::Black;
FastLED.show();
leds[5] = CRGB::Black;
FastLED.show();
leds[6] = CRGB::Black;
FastLED.show();
leds[7] = CRGB::Black;
FastLED.show();
leds[8] = CRGB::Black;
FastLED.show();

}

if(CONTADOR==3){

  leds[0] = CRGB::White;
FastLED.show();
leds[1] = CRGB::White;
FastLED.show();
leds[2] = CRGB::White;
FastLED.show();
leds[3] = CRGB::White;
FastLED.show();
leds[4] = CRGB::White;
FastLED.show();
leds[5] = CRGB::White;
FastLED.show();
leds[6] = CRGB::White;
FastLED.show();
leds[7] = CRGB::White;
FastLED.show();
leds[8] = CRGB::White;
FastLED.show();

}

if(CONTADOR==4){

    leds[0] = CRGB::Black;
FastLED.show();
leds[1] = CRGB::Black;
FastLED.show();
leds[2] = CRGB::Black;
FastLED.show();
leds[3] = CRGB::Black;
FastLED.show();
leds[4] = CRGB::Black;
FastLED.show();
leds[5] = CRGB::Black;
FastLED.show();
leds[6] = CRGB::Black;
FastLED.show();
leds[7] = CRGB::Black;
FastLED.show();
leds[8] = CRGB::Black;
FastLED.show();

}

if(CONTADOR==5){

  leds[0] = CRGB::Red;
FastLED.show();
leds[1] = CRGB::Red;
FastLED.show();
leds[2] = CRGB::Red;
FastLED.show();
leds[3] = CRGB::White;
FastLED.show();
leds[4] = CRGB::White;
FastLED.show();
leds[5] = CRGB::White;
FastLED.show();
leds[6] = CRGB::Blue;
FastLED.show();
leds[7] = CRGB::Blue;
FastLED.show();
leds[8] = CRGB::Blue;
FastLED.show();

}

if(CONTADOR==6){

   leds[0] = CRGB::Black;
FastLED.show();
leds[1] = CRGB::Black;
FastLED.show();
leds[2] = CRGB::Black;
FastLED.show();
leds[3] = CRGB::Black;
FastLED.show();
leds[4] = CRGB::Black;
FastLED.show();
leds[5] = CRGB::Black;
FastLED.show();
leds[6] = CRGB::Black;
FastLED.show();
leds[7] = CRGB::Black;
FastLED.show();
leds[8] = CRGB::Black;
FastLED.show();

CONTADOR=0;

}
}