✅ Skema Sederhana Koneksi:
Neopixel DIN → Pin 6 Arduino
Neopixel VCC → 5V
Neopixel GND → GND
Push Button satu sisi → GND
Push Button sisi lain → Pin 2 Arduino (dengan pull-down resistor 10kΩ ke GND)
🧠 Kode Program Arduino:
#include <Adafruit_NeoPixel.h>
#define BUTTON_PIN 2
#define LED_PIN 6
#define NUM_LEDS 8 // Ubah sesuai jumlah LED Neopixel
Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
int buttonState;
int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
int mode = 0;
void setup() {
pinMode(BUTTON_PIN, INPUT);
strip.begin();
strip.show(); // Matikan semua LED awalnya
}
void loop() {
int reading = digitalRead(BUTTON_PIN);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading == HIGH && lastButtonState == LOW) {
mode++;
if (mode > 2) mode = 0; // Ubah sesuai jumlah mode
setMode(mode);
}
}
lastButtonState = reading;
}
void setMode(int m) {
switch (m) {
case 0:
colorWipe(strip.Color(255, 0, 0), 50); // Merah
break;
case 1:
colorWipe(strip.Color(0, 255, 0), 50); // Hijau
break;
case 2:
rainbowCycle(10); // Efek pelangi
break;
}
}
void colorWipe(uint32_t color, int wait) {
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, color);
strip.show();
delay(wait);
}
}
void rainbowCycle(int wait) {
uint16_t i, j;
for (j = 0; j < 256; j++) {
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i * 256 / strip.numPixels() + j) & 255));
}
strip.show();
delay(wait);
}
}
uint32_t Wheel(byte WheelPos) {
if (WheelPos < 85) {
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}