Light a WS2812 with a couple of colors

Hi,

I can really use some help with a problem I had with a Neopixel code with WS2812. I read tons of guides and still can't figure the problem out:

I need to light a 16 LEDS WS2812 with Neopixel with a couple of colours - The first 9 LEDS in red, then the next 5 in yellow and the rest in green with a push of a button.
The thing is, it needs to show the green first, then the yellow, and then the rest.

The following code is what I tried:

#include <Adafruit_NeoPixel.h>

#define BUTTON_PIN 2 // Digital IO pin connected to the button. This will be
// driven with a pull-up resistor so the switch should
// pull the pin to ground momentarily. On a high -> low
// transition the button press logic will execute.

#define PIXEL_PIN 6 // Digital IO pin connected to the NeoPixels.

#define PIXEL_COUNT 16

// Parameter 1 = number of pixels in strip, neopixel stick has 8
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_RGB Pixels are wired for RGB bitstream
// NEO_GRB Pixels are wired for GRB bitstream, correct for neopixel stick
// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)
// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

bool oldState = HIGH;
int showType = 0;

void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}

void loop() {
// Get current button state.
bool newState = digitalRead(BUTTON_PIN);

// Check if state changed from high to low (button press).
if (newState == LOW && oldState == HIGH) {
// Short delay to debounce button.
delay(20);
// Check if button is still low after debounce.
newState = digitalRead(BUTTON_PIN);
if (newState == LOW) {
showType++;
if (showType > 9)
showType=0;

colorWipe(strip.Color(255, 0, 0), 50); // Red
}
}
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

Could really use some help.

Read how to posr code using code tags.
...And what is Your code producing? I have NEOs for testing.....

Railroader:
Read how to posr code using code tags.
...And what is Your code producing? I have NEOs for testing.....

just red wiping through the whole WS2812

The thing is, it needs to show the green first, then the yellow, and then the rest.

When? On the 6th Tuesday of each month?

If you want to light up one LED, of any color, then colorWipe() is NOT the function to use. The techniques IN colorWipe() can be used to light the first n LEDs in the strip using one color, the next m LEDs in the strip in another color, and the remaining LEDs in the strip in another color.

But, you need to define how long one LED is lit before the next one lights. Lighting them all at once is also possible, as is lighting just a set of them (more than one).