// put #include <Adafruit_NeoPixel.h>
#define PIN D5 // Pin de salida para NeoPixel
#define NUMPIXELS 8 // Número de NeoPixels
#define BUTTON_PIN D7 // Pin del botón
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 100 // Tiempo (en milisegundos) para pausar entre actualizaciones
bool reverse = false; // Variable para almacenar el estado de dirección del patrón
void setup() {
Serial.begin(9600); // Inicializa la comunicación serial
pinMode(BUTTON_PIN, INPUT_PULLUP); // Configura el pin del botón como entrada con pull-up
pixels.begin(); // Inicializa el objeto de la tira de NeoPixel
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN); // Lee el estado del botón
// Detecta si el botón está presionado
if (buttonState == LOW) {
reverse = !reverse; // Cambia la dirección del patrón
Serial.println("Botón presionado - Cambiando dirección del patrón arcoíris");
delay(500); // Pequeña pausa para evitar múltiples cambios rápidos de dirección
}
// Muestra el patrón arcoíris en la dirección adecuada
showRainbowPattern(DELAYVAL, reverse);
}
void showRainbowPattern(int wait, bool reverse) {
static long firstPixelHue = 0; // Static para mantener el estado entre llamadas
for (int i = 0; i < NUMPIXELS; i++) {
int pixelHue = reverse ? firstPixelHue - (i * 65536L / NUMPIXELS) : firstPixelHue + (i * 65536L / NUMPIXELS);
pixels.setPixelColor(i, pixels.gamma32(pixels.ColorHSV(pixelHue)));
}
pixels.show();
firstPixelHue += reverse ? -256 : 256;
delay(wait);
}