• Iluminación de Elementos en Panel de juego

    SrRubio3 days ago 0 comments

    La idea es que al elegir el juego en el panel se ilumine sutilmente los mandos a utilizar: Joy, trackball, spinner, pulsadores arcade..etc.

    1. Cálculo de Materiales y Energía

    Para 15 elementos (Joystick, 10 botones, Trackball, Spinner, Spinner Joy e Interruptor), vamos a estimar el recorrido:

    • Perímetro por botón: Un botón estándar de 28 mm tiene un perímetro de unos 9 cm. Si rodeas cada uno, usarás mucha tira. Si solo pasas un "segmento" por debajo o por un lado, usarás menos.
    • Estimación de longitud: Si calculamos unos 10-15 cm de tira por cada uno de los 15 elementos (contando el recorrido entre ellos), necesitarás unos 2 a 2,5 metros de tira.
    • Cálculo de Amperaje: * 160 LEDs/metro $\times$ 2 metros = 320 LEDs.
      • Consumo máximo (Blanco, brillo 100%): $\approx 15\text{A}$ (¡Muchísimo!).
      • Consumo Real (Sutil): Al 15% de brillo y colores simples, el consumo bajará a unos 1.5A - 2A.
    • Fuente recomendada: 5V / 4A (o 5A para ir sobrado).

    2. Diseño del Panel y Montaje (Sin Fibra)

    Como la tira es de solo 2,7 mm, el diseño en 3D cambia. Tienes dos opciones para que sea sutil:

    • Opción A (Halo visto): Diseñas un surco de 3 mm de ancho alrededor de cada botón donde encajas la tira COB mirando hacia arriba. La tira se ve directamente como un anillo de luz de neón.
    • Opción B (Retroiluminación): La tira va por debajo del panel, y dejas una pared de plástico muy fina (0.6mm - 0.8mm) de filamento traslúcido o natural. La luz COB atravesará el plástico creando un brillo difuso y suave. Dejar unos 3mm desde la tira al plástico para que difumine la luz. También se puede crear el hueco de color blanco para que rebote la luz.

    3. Esquema Eléctrico Detallado

    Para 15 secciones en una tira continua de 2,5 metros, la conexión es así:

    1. Arduino Nano: Pin D6 a la tira.
    2. Resistencia: $330\Omega$ entre el pin D6 y el cable de datos de la tira.
    3. Condensador: $1000\mu\text{F}$ entre el +5V y el GND de la fuente para evitar que el primer LED se queme al encender.
    4. Alimentación Doble (Power Injection): Debido a que la tira es muy fina (2.7mm), las pistas de cobre internas son delgadas. Si conectas solo por un extremo, el final de la tira se verá más tenue o rojizo. Conecta los 5V y GND de la fuente tanto al principio como al final de la tira.

    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     6          // Pin de datos al Arduino
    #define NUM_LEDS    320        // Ajusta según la cantidad total de LEDs (Largo tira * 160)
    #define BRIGHTNESS  40         // Valor 0-255. 40 es perfecto para iluminación sutil.
    #define LED_TYPE    WS2812B    // Tu tira COB usa este protocolo
    #define COLOR_ORDER GRB
    
    CRGB leds[NUM_LEDS];
    
    void setup() {
      // Inicializamos la tira COB
      FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
      FastLED.setBrightness(BRIGHTNESS);
      FastLED.clear();
    }
    
    void loop() {
      // 1. Borrar todo para que los tramos de unión entre botones no brillen
      FastLED.clear();
    
      // 2. DEFINICIÓN DE TRAMOS (Ajustar los números según tu instalación real)
      // fill_solid(&(leds[INDICE_INICIO]), CANTIDAD_LEDS, COLOR);
    
      // SECCIÓN JOYSTICK: Los primeros 20 LEDs de la tira
      fill_solid(&(leds[0]), 20, CRGB::Blue);
    
      // SECCIÓN BOTONES (10 botones): Suponiendo que cada uno usa 10 LEDs y hay 5 de separación
      // Botón 1
      fill_solid(&(leds[30]), 10, CRGB::DeepPink);
      // Botón 2
      fill_solid(&(leds[45]), 10, CRGB::DeepPink);
      // ... repites para los 10 botones ...
    
      // SECCIÓN TRACKBALL: Un tramo más largo, por ejemplo 30 LEDs
      fill_solid(&(leds[200...
    Read more »

  • Montaje Giro de Pantalla

    SrRubio04/16/2026 at 08:28 0 comments

       [ PANTALLA ]
            │
       ┌───────────┐
       │    HUB    │  ← pieza que diseñarás (gira)
       └────┬──────┘
            │ (prisionero M4)
            │
         ║██████║   ← eje motor (Ø8 mm, gira)
         ║      ║
         ║      ║
       ┌─╨──────╨─┐
       │  608ZZ   │  ← rodamiento
       └─┬──────┬─┘
         │      │
         │      │ ← alojamiento Ø21.8 mm
    ┌────┴──────┴────┐
    │ SOPORTE FIJO   │  ← NO gira (atornillado a chasis)
    └────────────────┘
    
            │
       [ MOTOR + REDUCTORA ]

  • Giro de Pantalla. Programa arduino (Pruebas II)

    SrRubio04/14/2026 at 12:33 0 comments

      CÓDIGO ARDUINO

    • ✔ UART completo (RX/TX)
    • ✔ Homing inteligente al arranque
    • ✔ Movimiento suave (aceleración)
    • ✔ Control por finales de carrera
    • ✔ Comandos V y H
    • ✔ Sin dependencia de pasos (solo movimiento)
    • ✔ Pulsador para movimiento manual.
    • #include 
      
      // =====================================================
      // =============== CONFIGURACIÓN HARDWARE ===============
      // =====================================================
      
      // Pines del driver TMC2209 (STEP/DIR/ENABLE)
      #define STEP_PIN 6
      #define DIR_PIN 7
      #define EN_PIN 8
      
      // Finales de carrera (inputs con pullup interno)
      #define HOME_PIN 4   // Posición horizontal (0°)
      #define VERT_PIN 5   // Posición vertical (90°)
      
      // Botón manual de control
      #define BTN_PIN 9
      
      // =====================================================
      // ================= DRIVER TMC2209 =====================
      // =====================================================
      
      // Resistencia de sensado del driver (depende del módulo)
      #define R_SENSE 0.11f
      
      // Comunicación UART con el driver (Serial1 hardware)
      TMC2209Stepper driver(&Serial1, R_SENSE);
      
      // =====================================================
      // ================== MOTOR PASO A PASO =================
      // =====================================================
      
      // Control del motor en modo STEP/DIR
      AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
      
      // =====================================================
      // ================== PARÁMETROS MOTOR ==================
      // =====================================================
      
      #define MAX_SPEED 3000        // Velocidad máxima normal
      #define ACCELERATION 2000     // Aceleración (suavidad)
      #define HOMING_SPEED 1500     // Velocidad reducida en homing
      
      // =====================================================
      // ================== BOTÓN (DEBOUNCE) ==================
      // =====================================================
      
      // Tiempo mínimo entre pulsaciones válidas
      unsigned long lastBtnTime = 0;
      const unsigned long debounceMs = 200;
      
      // Estado anterior del botón
      bool lastBtnState = HIGH;
      
      // =====================================================
      // ====================== SETUP =========================
      // =====================================================
      
      void setup() {
      
        // Comunicación serie con PC (RetroBat u otro sistema)
        Serial.begin(115200);
      
        // UART hacia el driver TMC2209
        Serial1.begin(115200);
      
        // ---------------- PINES ----------------
        pinMode(EN_PIN, OUTPUT);
        pinMode(HOME_PIN, INPUT_PULLUP);
        pinMode(VERT_PIN, INPUT_PULLUP);
        pinMode(BTN_PIN, INPUT_PULLUP);   // botón activo a GND
      
        // Activar driver (EN activo en LOW)
        digitalWrite(EN_PIN, LOW);
      
        // ---------------- CONFIGURACIÓN DRIVER ----------------
        driver.begin();               // inicia comunicación
        driver.toff(4);               // activa etapas de potencia
        driver.rms_current(800);      // corriente del motor
        driver.microsteps(16);        // microstepping
        driver.interpolate(true);     // suavizado
        driver.en_spreadCycle(false); // modo silencioso (stealthChop)
      
        // ---------------- CONFIGURACIÓN MOTOR ----------------
        stepper.setMaxSpeed(MAX_SPEED);
        stepper.setAcceleration(ACCELERATION);
      
        Serial.println("Inicializando sistema...");
      
        // Ejecuta homing inicial (referencia mecánica)
        homing();
      
        Serial.println("Sistema listo");
      }
      
      // =====================================================
      // ======================= LOOP =========================
      // =====================================================
      
      void loop() {
      
        // ---- Control manual por botón físico ----
        handleButton();
      
        // ---- Control por serie (PC / software) ----
        if (Serial.available()) {
      
          char comando = Serial.read();
      
          if (comando == 'V') moverVertical();
          if (comando == 'H') moverHorizontal();
        }
      
        // Mantiene el movimiento del motor (NO bloquearlo)
        stepper.run();
      }
      
      // =====================================================
      // ============ GESTIÓN BOTÓN MANUAL ====================
      // =====================================================
      ...
    Read more »

  • Giro de Pantalla. Sistema eléctrico (Pruebas I)

    SrRubio04/14/2026 at 12:27 0 comments

    1) ESQUEMA ELÉCTRICO (UART COMPLETO)

                        ┌──────────── PC ─────────────┐
                        │                             │
                        │        USB (5V + DATA)      │
                        └────────────┬────────────────┘
                                     │
                                     ▼
                            ┌─────────────────┐
                            │  PRO MICRO      │
                            │                 │
                            │ VCC (USB 5V) ───┐
                            │ GND ────────────┼───────────────┐
                            │                 │               │
                            │ Pin 6 ──────────┼──────────► STEP
                            │ Pin 7 ──────────┼──────────► DIR
                            │ Pin 8 ──────────┼──────────► EN
                            │                 │
                            │ Pin 1 (TX) ──1kΩ──────────► RX (TMC)
                            │ Pin 0 (RX) ◄────────────── TX (TMC)
                            │                 │
                            │ Pin 4 ◄─────────┴── HOME SWITCH
                            │ Pin 5 ◄──────────── VERT SWITCH
                            └─────────────────┘
                                     │
                                     │
                                     ▼
                             ┌──────────────┐
                             │   TMC2209    │
                             │              │
            12V ────────────►│ VMOT         │
            GND ────────────►│ GND ◄────────┘ (GND común)
                             │              │
            5V (USB) ───────►│ VIO          │
                             │              │
                             │ STEP ◄───────┘
                             │ DIR  ◄───────┘
                             │ EN   ◄───────┘
                             │ RX   ◄───────┐
                             │ TX   ────────┘
                             │              │
                             │ A1 ──────────┐
                             │ A2 ──────────┘ → Bobina A
                             │              │
                             │ B1 ──────────┐
                             │ B2 ──────────┘ → Bobina B
                             └──────────────┘
                                     │
                                     ▼
                              MOTOR NEMA17
                         (17HS4401S-PG5.18)

     2) TABLA COMPLETA DE CONEXIONES

    UART ← driver

    Comprobado con multimetro Negro-Verde 1 bobina; Azul-rojo la otra.


    3) FINALES DE CARRERA (CLARO)

    GND ───── COM
    PIN ───── NO

    ✔ Sin pulsar → HIGH

    ✔ Pulsado → LOW

    4) COMPONENTES OBLIGATORIOS

    🔋 Condensador VMOT

    • 100–220 µF / 25V
    • entre VMOT y GND

    🔧 Resistencia UART

    • 1kΩ entre Pin 1 (TX) y RX del TMC 

    5) COMPONENTES RECOMENDADOS

    • 10–47 µF en 5V
    • 100nF cerca del Pro Micro
    • cable corto motor

    6) CONFIGURACIÓN LÓGICA

    7) FLUJO DE FUNCIONAMIENTO

    1. PC → envía "V"
    2. Pro Micro → mueve motor
    3. Detecta final 90°
    4. Para

    8) CHECKLIST FINAL (ANTES DE ENCENDER)

    ✔ Motor conectado A1 A2 B1 B2
    ✔ 12V SOLO en VMOT
    ✔ 5V SOLO en VIO
    ✔ UART cruzado (TX↔RX)
    ✔ GND común
    ✔ USB conectado
    ✔ Condensador VMOT

  • Montaje Pulsador Analógico

    SrRubio04/12/2026 at 17:56 0 comments

    - Imprimir las piezas

    https://makerworld.com/es/models/2652823-analog-arcade-button#profileId-2933046

    - Componentes

    https://hackaday.io/project/202601/components

    - Yo he reciclado conectores faston machos para incorporar en la base. Me he ayudado del soldador para el injerto.

    - Posteriormente, introducimos el sensor hall con la cara "no plana" hacia arriba e insertando las patillas en los injertos faston.

    - Luego los soldamos por debajo.

    - Una vez tengamos la base preparada. Conectamos las conexiones al arduino pro micro para comprobar la poralidad del imán antes de fijarlo al pulsador. Previamente tenemos que cargar el .ino en el arduino. 

    Joy_xinput_pulsadores_analogicos_autocalibrado.ino

    - Después de probar la polaridad, insertamos el imán y pegamos en a parte interior del pulsador.

    - Para terminar, colocamos el muelle en el pulsador e introducimos en la base por las guías haciendo presión

  • Montaje Joystick Restrictor automático + oled + rotary

    SrRubio04/08/2026 at 07:18 0 comments

    Desmontaje de Joystick Sanwa

    https://hackaday.io/project/202601/log/246482-restrictor-automtico-rotary-en-joy-sanwa-ii

    Imprimir piezas diseñadas en 3D

    https://makerworld.com/es/models/2644182-restrictor-automatico-oled-memoria-rotary#profileId-2922120

    Montaje

    - Soldamos los 4 injertos de M2 en la base del joystick impreso

    - Soldamos 2 injertos más en la columna del switch de home del restrictor (posición octogonal).

    - Encajamos la arandela original del sanwa en la base impresa.

    - Insertamos las 4 tuercas de M3 en los respectivos agujeros para fijar la base a la placa.

    - Atornillar los tornillos M3 originales del joystick

    - Insertamos el eje, incluyendo el pivote (3) por encima de la placa y por debajo el retenedor del muelle (6). Finalmente montamos la placa electrónica

    - En este paso podemos montar el muelle (7) y el actuador impreso (8),  para luego fijar el restrictor impreso. O bien montar el restrictor y añadir muelle y actuador después. Para fijarlo usaremos 4 tornillos M2 que atornillaremos en los injertos soldados.

    - A continuación, montamos el engranje más grande.  Añadimos las figuras sobre él y atornillamos 4 pernos de M2 con cabeza plana que evitaran que las piezas se salgan y giren sobre los cilindros impresos. También podemos atornillas con M2 el switch de palanca. Para ayudar en el montaje, monte también el adaptador para el rotary que hace a su vez de fijador del muelle (sustitución dl circlip). Empujamos el actuador hacia la base e insertamos la mitad del adaptador, luego añadimos la otra mitad y fijamos con una mini brida.

    - Posterirormente montamos el motor y el engranaje pequeño, dejando la posición de octogono configurado y el switch de palanca activado.

    -Por último, fijamos el codificador/rotary por medio de su propia tuerca al mecanismo que provocará el giro una vez lo centremos en el eje impreso del restrictor.

    Cargar los ino a los arduinos pro micro:

    https://hackaday.io/project/202601-the-ultimate-mini-arcade/files


    Joy_restrictor_rotary_origen_eeprom_puerto_serie_v2_oled.ino
    Joy_xinput_pulsadores_analogicos_autocalibrado.ino

    Pinaje/Conexiones:

    Selección de figura restrictor con Retrobat.

    https://hackaday.io/project/202601/log/246431-retrobat-restrictor

  • Pulsadors Arcade efecto Hall 2

    SrRubio03/30/2026 at 10:19 0 comments

    He estado haciendo muchas pruebas en el diseño del pulsador. He partido de un pulsador de 24mm que he modificado para adaptar el sensor, muelle y demás.

    El problema ha sido el rozamiento y el guiado.

     Al final he llegado a un diseño entre pulsador arcade y pedal. A falta de mejorar o no las conexiones, ya lo he terminado.

    También es importante el material y la orientación de la impresión. Puesto que si no se realiza bien, el material se puede partir.

    He usado PETG para la base y he estado probando con PLA en el pulsador con buenos resultados. A falta de últimas pruebas ya ya veo el final de este mini proyecto.

    https://vm.tiktok.com/ZNRCdyoyw/

    En cuanto a la programación, he seguido usando la librería xinput pero añadiendo autocalibración, efecto pedal..

    #include <XInput.h>  // Librería para emular mando Xbox por USB
    
    
    // ================= CONFIG =================
    
    // Resolución del ADC (10 bits: 0–1023)
    const int ADC_Max = 1023;
    
    
    // ===== Pines de triggers (sensores Hall) =====
    const int Pin_TriggerL = A2;
    const int Pin_TriggerR = A3;
    
    
    // ===== Pines de botones =====
    const int Pin_ButtonA = 0;
    const int Pin_ButtonB = 1;
    const int Pin_ButtonX = 2;
    const int Pin_ButtonY = 3;
    const int Pin_ButtonLB = 4;
    const int Pin_ButtonRB = 5;
    const int Pin_ButtonBack  = 6;
    const int Pin_ButtonStart = 7;
    const int Pin_ButtonL3 = 8;
    const int Pin_ButtonR3 = 9;
    
    
    // ===== D-Pad =====
    const int Pin_DpadUp    = 10;
    const int Pin_DpadDown  = 11;
    const int Pin_DpadLeft  = 12;
    const int Pin_DpadRight = 13;
    
    
    // ===== FILTRO (suaviza la señal analógica) =====
    
    // Valores filtrados (estado interno)
    float filteredL = 0;
    float filteredR = 0;
    
    // Factor de suavizado:
    // 0.1 = muy suave (más retardo)
    // 0.3 = más rápido (menos suavizado)
    const float alpha = 0.2;
    
    
    // ===== AUTO-CALIBRACIÓN =====
    
    // Inicializamos extremos "imposibles"
    // Se irán ajustando automáticamente en uso
    int minL = 1023;
    int maxL = 0;
    
    int minR = 1023;
    int maxR = 0;
    
    
    // ================= SETUP =================
    
    void setup() {
    
      Serial.begin(115200);  // Comunicación serie para debug
    
      // Configura el rango de los triggers (0–1023)
      XInput.setTriggerRange(0, ADC_Max);
    
      // Desactiva envío automático (control manual con XInput.send())
      XInput.setAutoSend(false);
    
    
      // Configura todos los botones como entrada con pull-up interno
      // -> estado normal = HIGH
      // -> pulsado = LOW
      pinMode(Pin_ButtonA, INPUT_PULLUP);
      pinMode(Pin_ButtonB, INPUT_PULLUP);
      pinMode(Pin_ButtonX, INPUT_PULLUP);
      pinMode(Pin_ButtonY, INPUT_PULLUP);
      pinMode(Pin_ButtonLB, INPUT_PULLUP);
      pinMode(Pin_ButtonRB, INPUT_PULLUP);
      pinMode(Pin_ButtonBack, INPUT_PULLUP);
      pinMode(Pin_ButtonStart, INPUT_PULLUP);
      pinMode(Pin_ButtonL3, INPUT_PULLUP);
      pinMode(Pin_ButtonR3, INPUT_PULLUP);
    
      pinMode(Pin_DpadUp, INPUT_PULLUP);
      pinMode(Pin_DpadDown, INPUT_PULLUP);
      pinMode(Pin_DpadLeft, INPUT_PULLUP);
      pinMode(Pin_DpadRight, INPUT_PULLUP);
    
    
      delay(1000);  // Espera para estabilizar sensores Hall
    
    
      // Inicializa los filtros con el valor actual
      // Evita saltos bruscos al arrancar
      filteredL = analogRead(Pin_TriggerL);
      filteredR = analogRead(Pin_TriggerR);
    
    
      // Inicia el dispositivo XInput
      XInput.begin();
    }
    
    
    // ================= LOOP =================
    
    void loop() {
    
      // ===== BOTONES =====
      // Se invierte la lectura (!)
      // porque INPUT_PULLUP: LOW = pulsado
    
      XInput.setButton(BUTTON_A, !digitalRead(Pin_ButtonA));
      XInput.setButton(BUTTON_B, !digitalRead(Pin_ButtonB));
      XInput.setButton(BUTTON_X, !digitalRead(Pin_ButtonX));
      XInput.setButton(BUTTON_Y, !digitalRead(Pin_ButtonY));
    
      XInput.setButton(BUTTON_LB, !digitalRead(Pin_ButtonLB));
      XInput.setButton(BUTTON_RB, !digitalRead(Pin_ButtonRB));
    
      XInput.setButton(BUTTON_BACK,  !digitalRead(Pin_ButtonBack));
      XInput.setButton(BUTTON_START, !digitalRead(Pin_ButtonStart));
    
      XInput.setButton(BUTTON_L3, !digitalRead(Pin_ButtonL3));
     XInput.setButton(BUTTON_R3,...
    Read more »

  • Pulsadores Arcade Efecto Hall

    SrRubio03/06/2026 at 18:51 0 comments

    Actualmente estoy haciendo pruebas con sensores hall activados por imán. Este mismo recurso es el que quiero usar para añadir mando analógico a la palanca restrictor/rotary. Es más sencillo empezar por un pulsador y experimentar.

    Patillaje del SS49E

    Con la cara que no es plana del sensor mirando hacia ti
    y las patillas hacia abajo:

    Pin 1 → VCC (alimentación)

    Pin 2 → GND

    Pin 3 → VOUT (salida analógica)

    Conexión típica al Arduino Pro Micro

    Para configurar el sensor he usado el código para mandos xinput, con el que configuraremos los movimientos del joy y la función de los pulsadores.

    https://github.com/dmadison/ArduinoXInput

    Ya he modificado el código para configurar los triggers :

    else {
    // Read trigger potentiometer values
    int triggerLeft  = analogRead(Pin_TriggerL);
    int triggerRight = analogRead(Pin_TriggerR);
    
    // Escalar el sensor Hall (centro → mínimo)
    triggerLeft = constrain(triggerLeft, 520, 780);
    triggerLeft = map(triggerLeft, 520, 780, 0, 1023);
    triggerRight = constrain(triggerRight, 580, 780);
    triggerRight = map(triggerRight, 580, 780, 0, 1023);
    
    // Enviar a XInput
    XInput.setTrigger(TRIGGER_LEFT, triggerLeft);
    XInput.setTrigger(TRIGGER_RIGHT, triggerRight);
    }
    
    SensorPro Micro
    Pin 1 (VCC)5V
    Pin 2 (GND)GND
    Pin 3 (VOUT)A4 o A5

    https://vm.tiktok.com/ZNRmveXVV/

  • Array Imagen OLED Restrictor III

    SrRubio03/06/2026 at 18:37 0 comments

    // ROMBO 128x64
    const unsigned char bitmap_rombo[] PROGMEM = {
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xf1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x83, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x01, 0xc0, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0xe0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0xf0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0xf0, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0xf0, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x07, 0xe0, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x03, 0x80, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x80, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xf0, 0x01, 0x80, 0x03, 0xf1, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x01, 0x8f, 0xf0, 0x01, 0x80, 0x03, 0xf8, 0xc0, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x03, 0x8f, 0xf0, 0x1d, 0x8c, 0x03, 0xf8, 0x60, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x01, 0x87, 0xf0, 0x79, 0x8f, 0x03, 0xf0, 0x60, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x80, 0xf9, 0x8e, 0x80, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xf8, 0x0e, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0xff, 0x3e, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xff, 0xff, 0x80, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x7f, 0xff, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x3f, 0xfe, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0xf8, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00...
    Read more »

  • Array Imagen OLED Restrictor II

    SrRubio03/06/2026 at 18:36 0 comments

    // CUADRADO 128x64
    const unsigned char bitmap_cuadrado[] PROGMEM = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xc0, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x01, 0xe0, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xf0, 0x03, 0xf0, 0x03, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xf0, 0x03, 0xf0, 0x03, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xf0, 0x01, 0xe0, 0x03, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xf8, 0x01, 0xe0, 0x03, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xf8, 0x00, 0xc0, 0x07, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x03, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x01, 0xe0, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x03, 0xf0, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x07, 0xf8, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x07, 0xf0, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x07, 0xf0, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x03, 0xe0, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x01, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0xe0, 0x00, 0x80, 0x01, 0xf9, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe0, 0x00, 0xc0, 0x01, 0xfd, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe0, 0x0f, 0x9c, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0xe0, 0x3d, 0x8f, 0x00, 0xf9, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x5d, 0xc6, 0x80, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x5c, 0x8e, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x5f, 0xfe, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x7f, 0xff, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x3f, 0xff, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
      0x00, 0x00,...
    Read more »