#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, 15, NEO_GRB | NEO_KHZ800);

void setup() {
  strip.begin();
  strip.clear(); // Inicializa todos os pixels como desligado
  strip.show();
}

void loop() {
  colorWipe(strip.Color(255, 0, 0), 50); // Red
  colorWipe(strip.Color(0, 255, 0), 50); // Green
  colorWipe(strip.Color(0, 0, 255), 50); // Blue

  theaterChase(strip.Color(127, 127, 127), 50); // White
  theaterChase(strip.Color(127, 0, 0), 50); // Red
  theaterChase(strip.Color(0, 0, 127), 50); // Blue

  rainbow(20);
  rainbowCycle(20);
  theaterChaseRainbow(50);
}

// Preenche os pixels um após o outro com uma cor
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);
  }
}

// Efeito de arco-íris
void rainbow(uint8_t wait) {
  uint16_t i, j;

  for (j = 0; j < 256; j++) {
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, wheel((i + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Um pouco diferente, isso torna o arco-íris igualmente distribuído por todos os pixels
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for (j = 0; j < 256 * 5; j++) { // 5 ciclos de todas as cores no anel
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Luzes rastejantes estilo teatro
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 10; j++) { // Faça 10 ciclos de perseguição
    for (int q = 0; q < 3; q++) {
      for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, c); // Acende cada terceiro pixel
      }
      strip.show();

      delay(wait);

      for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, 0); // Apaga cada terceiro pixel
      }
    }
  }
}

// Luzes rastejantes estilo teatro com efeito arco-íris
void theaterChaseRainbow(uint8_t wait) {
  for (int j = 0; j < 256; j++) { // Ciclo de todas as 256 cores no anel
    for (int q = 0; q < 3; q++) {
      for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, wheel( (i + j) % 255)); // Acende cada terceiro pixel
      }

      strip.show();
      delay(wait);

      for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, 0); // Apaga cada terceiro pixel
      }
    }
  }
}

// Insira um valor de 0 a 255 para obter um valor de cor
// As cores são uma transição r-g-b de volta para red
uint32_t wheel(byte wheelPos) {
  wheelPos = 255 - wheelPos;

  if (wheelPos < 85) {
    return strip.Color(255 - wheelPos * 3, 0, wheelPos * 3);
  }

  if (wheelPos < 170) {
    wheelPos -= 85;
    return strip.Color(0, wheelPos * 3, 255 - wheelPos * 3);
  }

  wheelPos -= 170;
  return strip.Color(wheelPos * 3, 255 - wheelPos * 3, 0);
}
Loading
franzininho-wifi