#include <Adafruit_NeoPixel.h>
#include <math.h>

#define PIN_RED_LED 33
#define PIN_WS2812B 26  // The ESP32 pin GPIO16 connected to WS2812B
#define NUM_PIXELS 12   // The number of LEDs (pixels) on WS2812B LED strip

int area_num = 3, area1 = 4, area2 = 8, area3 = 12;

Adafruit_NeoPixel ws2812b(NUM_PIXELS, PIN_WS2812B, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode (PIN_WS2812B, OUTPUT);
  pinMode (PIN_RED_LED, OUTPUT);
  digitalWrite(PIN_RED_LED, HIGH);
  ws2812b.begin();  // initialize WS2812B strip object (REQUIRED)
}

void loop() {
  ws2812b.clear();  // set all pixel colors to 'off'. It only takes effect if pixels.show() is called

  // turn pixels to green one-by-one with delay between each pixel
  for (int pixel = 0; pixel < area1; pixel++) {         // for each pixel
    ws2812b.setPixelColor(pixel, ws2812b.Color(255, 0, 0));  // it only takes effect if pixels.show() is called
    ws2812b.show();                                          // update to the WS2812B Led Strip
    delay(100);  // 500ms pause between each pixel
  }

  /*
  ws2812b.clear();
  ws2812b.show();  // update to the WS2812B Led Strip
  delay(1000);     // 2 seconds off time,
  */

  // turn on all pixels to red at the same time for two seconds
  for (int pixel = area1; pixel < area2; pixel++) {         // for each pixel
    ws2812b.setPixelColor(pixel, ws2812b.Color(0, 255, 0));  // it only takes effect if pixels.show() is called
  }
  ws2812b.show();  // update to the WS2812B Led Strip
  delay(1000);     // 1 second on time

  for (int pixel = area2; pixel < area3; pixel++) {         // for each pixel
    ws2812b.setPixelColor(pixel, ws2812b.Color(0, 0, 255));  // it only takes effect if pixels.show() is called
    ws2812b.show();                                          // update to the WS2812B Led Strip
    delay(100);  // 500ms pause between each pixel
  }

  /* turn off all pixels for one seconds
  ws2812b.clear();
  ws2812b.show();  // update to the WS2812B Led Strip
  delay(1000);     // 1 second off time
  */
}