/*
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// # # # # # ###### ####### ####### # #######
// ## ## # # ## # # # # # # # # #
// # # # # # # # # # # # # # # # # #
// # # # # # # # # # # # # # # # #####
// # # ####### # # # # # # # # ####### #
// # # # # # ## # # # # # # # #
// # # # # # # ###### ####### ####### # # #
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
#include <Adafruit_NeoPixel.h>
// Tentukan pin untuk LED
#define PIN 6 // Pin yang terhubung ke WS2811
#define LED_COUNT 30 // Jumlah LED
#define INTERVAL 50 // Interval waktu dalam ms (untuk efek meteor)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, PIN, NEO_GRB + NEO_KHZ800);
int currentLED = 0; // LED yang sedang menyala
unsigned long previousMillis = 0;
bool meteorFinished = false; // Menandakan apakah meteor sudah mencapai ujung
void setup() {
strip.begin(); // Inisialisasi strip LED
strip.show(); // Pastikan semua LED mati saat startup
}
void loop() {
unsigned long currentMillis = millis(); // Waktu sekarang
// Periksa apakah interval sudah tercapai
if (currentMillis - previousMillis >= INTERVAL) {
previousMillis = currentMillis;
// Matikan semua LED jika meteor belum mencapai ujung
if (!meteorFinished) {
for (int i = 0; i < LED_COUNT; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // Matikan LED
}
// Menyalakan LED sesuai dengan efek meteor
strip.setPixelColor(currentLED, strip.Color(0, 0, 255)); // Biru (R=0, G=0, B=255)
strip.show(); // Perbarui tampilan LED
// Update posisi LED berdasarkan arah
currentLED++; // Bergerak ke kanan
// Jika sudah mencapai ujung, set semua LED menjadi menyala penuh
if (currentLED >= LED_COUNT) {
meteorFinished = true; // Meteor telah selesai
// Menyalakan semua LED dengan warna biru
for (int i = 0; i < LED_COUNT; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 255)); // Menyalakan semua LED biru
}
strip.show(); // Perbarui tampilan LED
}
}
}
}