4. Código Maestro (Explicado en el propio código)
Este código está diseñado para que definas "Zonas". Los LEDs que queden en el espacio vacío entre un botón y otro se quedarán apagados (CRGB::Black), creando la ilusión de que son tramos separados.
#include <FastLED.h>
#define LED_PIN 10
#define NUM_LEDS 60
#define BRIGHTNESS 35
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
// =========================
// DEFINICIÓN DE ZONAS
// =========================
// Joystick
#define JOY_START 0
#define JOY_END 11
// Botón A
#define BTN_A_START 12
#define BTN_A_END 17
// Botón B
#define BTN_B_START 18
#define BTN_B_END 23
// Botón C
#define BTN_C_START 24
#define BTN_C_END 29
// Botón D
#define BTN_D_START 30
#define BTN_D_END 35
// Trackball
#define TRK_START 36
#define TRK_END 55
// =========================
void setup() {
Serial.begin(115200);
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
apagarTodo();
Serial.println("Sistema LED Arcade listo");
}
// =========================
void loop() {
if (Serial.available()) {
String cmd = Serial.readStringUntil('\n');
cmd.trim();
Serial.print("Comando: ");
Serial.println(cmd);
apagarTodo();
// =====================================
// JOYSTICK + 2 BOTONES
// =====================================
if (cmd == "J2") {
iluminarZona(JOY_START, JOY_END, CRGB::Blue);
iluminarZona(BTN_A_START, BTN_A_END, CRGB::Red);
iluminarZona(BTN_B_START, BTN_B_END, CRGB::Red);
}
// =====================================
// JOYSTICK + 4 BOTONES
// =====================================
else if (cmd == "J4") {
iluminarZona(JOY_START, JOY_END, CRGB::Blue);
iluminarZona(BTN_A_START, BTN_A_END, CRGB::Green);
iluminarZona(BTN_B_START, BTN_B_END, CRGB::Green);
iluminarZona(BTN_C_START, BTN_C_END, CRGB::Green);
iluminarZona(BTN_D_START, BTN_D_END, CRGB::Green);
}
// =====================================
// TRACKBALL
// =====================================
else if (cmd == "TR") {
iluminarZona(TRK_START, TRK_END, CRGB::Purple);
}
// =====================================
// APAGAR
// =====================================
else if (cmd == "OFF") {
apagarTodo();
}
FastLED.show();
}
}
// =========================
// FUNCIONES
// =========================
void iluminarZona(int inicio, int fin, CRGB color) {
for (int i = inicio; i <= fin; i++) {
leds[i] = color;
}
}
// =========================
void apagarTodo() {
FastLED.clear();
FastLED.show();
}
5. Resumen de Instalación y Detalles de Éxito
- Cuidado Térmico: Aunque la tira COB es eficiente, 320 LEDs generan algo de calor. No la pegues con pegamento instantáneo (cianocrilato), usa su propia cinta 3M y, si es necesario, refuerza con clips impresos en 3D.
- Mapeo de Píxeles: Una vez pegada la tira, carga un código de "test" que encienda los LEDs de 10 en 10 para identificar visualmente en qué número de LED empieza y acaba cada botón. Es más fácil que medir con regla.
- Radio de Giro: La tira COB ultra estrecha es muy flexible lateralmente (puedes hacer círculos planos), pero no intentes doblarla "de canto" bruscamente.
- Difusión: Si la luz te parece demasiado puntual incluso siendo COB, imprime una pequeña "tapa" de 1mm de grosor en PLA Blanco sobre el canal de la tira; eso hará que la luz se vea como un neón sólido.
Un último detalle técnico: Dado que vas a usar una tira de alta densidad (160 LED/m), asegúrate de usar cables de alimentación de buen grosor (AWG20) para llevar la corriente de la fuente a la tira, así evitarás caídas de tensión.
Resumen de Conexiones con el Pro Micro
- Data de la tira LED: Va al Pin 10 del Pro Micro (recuerda poner la resistencia de 330 Ohmios en medio).
- Alimentación de la tira LED (5V): Va directa a tu fuente de alimentación de 5V y 10A (con el condensador de 1000microF).
- GND: El cable negativo de la tira, el negativo de la fuente y el pin GND del Pro Micro deben estar todos unidos.
SrRubio
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.