#include <Adafruit_NeoPixel.h>
#include <WiFi.h>
#include <WebServer.h>
#define PIN_LED 2 // Pin yang digunakan untuk LED WS2812B
#define NUM_PIXELS 10 // Jumlah LED yang digunakan
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_PIXELS, PIN_LED, NEO_GRB + NEO_KHZ800);
const char* ssid = "Wokwi-GUEST"; // Nama WiFi Anda
const char* password = ""; // Kata sandi WiFi Anda
WebServer server(80);
int mode = 0; // Mode animasi default
int kecepatan = 50; // Kecepatan animasi default
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Menghubungkan ke WiFi...");
}
Serial.println("Terhubung ke WiFi");
Serial.println("Alamat IP: ");
Serial.println(WiFi.localIP());
pixels.begin();
pixels.show(); // Initialize all pixels to 'off'
server.on("/", handleRoot);
server.on("/set", handleSet);
server.begin();
Serial.println("Web server aktif");
}
void loop() {
server.handleClient();
switch (mode) {
case 0:
animasiStrobo();
break;
case 1:
animasiGaris();
break;
case 2:
animasiPulsasi();
break;
case 3:
animasiRainbow();
break;
}
}
void handleRoot() {
server.send(200, "text/html", "<html><body><h1>Animasi RGB</h1><form action=\"/set\" method=\"get\"><label>Mode:</label><select name=\"mode\"><option value=\"0\">Strobo</option><option value=\"1\">Garis</option><option value=\"2\">Pulsasi</option><option value=\"3\">Rainbow</option></select><br><label>Kecepatan:</label><input type=\"range\" name=\"kecepatan\" min=\"10\" max=\"1000\" value=\"" + String(kecepatan) + "\"><br><input type=\"submit\" value=\"Simpan\"></form></body></html>");
}
void handleSet() {
mode = server.arg("mode").toInt();
kecepatan = server.arg("kecepatan").toInt();
Serial.println("Mode: " + String(mode));
Serial.println("Kecepatan: " + String(kecepatan));
server.send(200, "text/plain", "Pengaturan berhasil disimpan");
}
void animasiStrobo() {
for (int i = 0; i < NUM_PIXELS / 2; i++) {
pixels.setPixelColor(i, pixels.Color(255, 0, 0)); // Merah
pixels.setPixelColor(NUM_PIXELS - i - 1, pixels.Color(0, 0, 255)); // Biru
pixels.show();
delay(kecepatan);
pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // Mati
pixels.setPixelColor(NUM_PIXELS - i - 1, pixels.Color(0, 0, 0)); // Mati
pixels.show();
delay(kecepatan);
}
}
void animasiGaris() {
for (int i = 0; i < NUM_PIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(255, 255, 255)); // Putih
pixels.show();
delay(kecepatan);
pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // Mati
pixels.show();
delay(kecepatan);
}
}
void animasiPulsasi() {
for (int i = 0; i < 256; i++) {
for (int j = 0; j < NUM_PIXELS; j++) {
pixels.setPixelColor(j, pixels.Color(i, i, i)); // Putih
}
pixels.show();
delay(kecepatan);
}
for (int i = 255; i >= 0; i--) {
for (int j = 0; j < NUM_PIXELS; j++) {
pixels.setPixelColor(j, pixels.Color(i, i, i)); // Putih
}
pixels.show();
delay(kecepatan);
}
}
void animasiRainbow() {
for (int i = 0; i < 256; i++) {
for (int j = 0; j < NUM_PIXELS; j++) {
pixels.setPixelColor(j, pixels.Color(i, 0, 0)); // Merah
}
pixels.show();
delay(kecepatan);
}
for (int i = 0; i < 256; i++) {
for (int j = 0; j < NUM_PIXELS; j++) {
pixels.setPixelColor(j, pixels.Color(0, i, 0)); // Hijau
}
pixels.show();
delay(kecepatan);
}
for (int i = 0; i < 256; i++) {
for (int j = 0; j < NUM_PIXELS; j++) {
pixels.setPixelColor(j, pixels.Color(0, 0, i)); // Biru
}
pixels.show();
delay(kecepatan);
}
}