#include <FastLED.h>
#include <EEPROM.h>
// Jumlah LED dan pin yang digunakan
#define NUM_LEDS 10
#define DATA_PIN 23
// Deklarasi array LED
CRGB leds[NUM_LEDS];
// Alamat EEPROM untuk menyimpan warna
#define EEPROM_ADDRESS 0
// Fungsi untuk mengonversi karakter hex ke nilai integer
uint8_t hexToInt(char hex) {
if (hex >= '0' && hex <= '9') return hex - '0';
if (hex >= 'A' && hex <= 'F') return hex - 'A' + 10;
if (hex >= 'a' && hex <= 'f') return hex - 'a' + 10;
return 0;
}
// Fungsi untuk mengonversi string hex ke CRGB
CRGB hexToRgb(String hexColor) {
// Pastikan string hex diawali dengan '#'
if (hexColor.startsWith("#")) hexColor.remove(0, 1);
// Konversi setiap pasangan karakter hex ke nilai warna
uint8_t r = (hexToInt(hexColor[0]) << 4) | hexToInt(hexColor[1]);
uint8_t g = (hexToInt(hexColor[2]) << 4) | hexToInt(hexColor[3]);
uint8_t b = (hexToInt(hexColor[4]) << 4) | hexToInt(hexColor[5]);
return CRGB(r, g, b);
}
// Fungsi untuk menyimpan warna ke EEPROM
void saveColorToEEPROM(CRGB color) {
EEPROM.write(EEPROM_ADDRESS, color.r);
EEPROM.write(EEPROM_ADDRESS + 1, color.g);
EEPROM.write(EEPROM_ADDRESS + 2, color.b);
EEPROM.commit(); // Menyimpan perubahan ke EEPROM
}
// Fungsi untuk membaca warna dari EEPROM
CRGB readColorFromEEPROM() {
uint8_t r = EEPROM.read(EEPROM_ADDRESS);
uint8_t g = EEPROM.read(EEPROM_ADDRESS + 1);
uint8_t b = EEPROM.read(EEPROM_ADDRESS + 2);
return CRGB(r, g, b);
}
void setup() {
// Setel kecepatan serial (opsional, untuk debugging)
Serial.begin(115200);
// Inisialisasi EEPROM dengan ukuran 512 byte
EEPROM.begin(512);
// Inisialisasi LED
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(64);
// Membaca warna terakhir dari EEPROM dan mengatur LED ke warna tersebut
CRGB storedColor = readColorFromEEPROM();
fill_solid(leds, NUM_LEDS, storedColor);
FastLED.show();
}
void loop() {
// Cek apakah ada data yang tersedia di Serial
if (Serial.available() > 0) {
// Baca string yang diterima dari Serial Monitor
String input = Serial.readStringUntil('\n');
input.trim(); // Hapus karakter whitespace dari awal dan akhir string
// Validasi apakah input merupakan kode warna hex yang valid (7 karakter, termasuk '#')
if (input.length() == 7 && input[0] == '#') {
// Konversi hex ke RGB
CRGB color = hexToRgb(input);
// Setel semua LED ke warna tersebut
fill_solid(leds, NUM_LEDS, color);
FastLED.show();
// Simpan warna ke EEPROM
saveColorToEEPROM(color);
// Cetak warna yang diterapkan ke Serial Monitor
Serial.print("Warna diatur ke: ");
Serial.println(input);
} else {
Serial.println("Kode warna tidak valid. Gunakan format: #RRGGBB");
}
}
}