Classic arcade with all the latest technological advancements, ready for the classics. Enjoy!
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
Joy_xinput_pulsadores_analogicos_autocalibrado.inoPrograma para configurar joy xinput con pulsadores analógicos autocalibradosino - 4.10 kB - 04/10/2026 at 20:46 |
|
|
Joy_restrictor_rotary_origen_eeprom_puerto_serie_v2_oled.inoPrograma para pro micro que controla el rotary automático y pantalla oledino - 23.93 kB - 04/10/2026 at 20:43 |
|
La idea es que al elegir el juego en el panel se ilumine sutilmente los mandos a utilizar: Joy, trackball, spinner, pulsadores arcade..etc.
Para 15 elementos (Joystick, 10 botones, Trackball, Spinner, Spinner Joy e Interruptor), vamos a estimar el recorrido:
Como la tira es de solo 2,7 mm, el diseño en 3D cambia. Tienes dos opciones para que sea sutil:
Para 15 secciones en una tira continua de 2,5 metros, la conexión es así:
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 »
[ 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 ]CÓDIGO ARDUINO
V y H
#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 ====================
// =====================================================
...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
5) COMPONENTES RECOMENDADOS
6) CONFIGURACIÓN LÓGICA
7) FLUJO DE FUNCIONAMIENTO
"V"
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
- 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
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
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 »
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.
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)
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);
}
| Sensor | Pro Micro |
|---|---|
| Pin 1 (VCC) | 5V |
| Pin 2 (GND) | GND |
| Pin 3 (VOUT) | A4 o A5 |

// 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 »

// 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 »
Create an account to leave a comment. Already have an account? Log In.
Become a member to follow this project and never miss any updates
About Us Contact Hackaday.io Give Feedback Terms of Use Privacy Policy Hackaday API Do not sell or share my personal information
Gee Bartlett
surfingsteve
You’re welcome