Un simulador completo de Arduino desarrollado en Unity que ejecuta programas reales compilados desde Arduino IDE mediante archivos .hex.
- Características
- Capturas de Pantalla
- Instalación
- Uso Rápido
- Arquitectura del Sistema
- Documentación Técnica
- Contribución
- Roadmap
- Licencia
- Ejecución de archivos .hex reales compilados desde Arduino IDE
- Procesador AVR simulado con registros, memoria y stack
- Sistema de debugging avanzado con visualización en tiempo real
- Timing configurable para diferentes velocidades de simulación
- ✅ Parser completo de archivos Intel HEX
- ✅ Simulación de instrucciones AVR (LDI, OUT, SBI, CBI, RJMP, CALL, RET)
- ✅ Gestión de memoria (SRAM, EEPROM, registros I/O)
- ✅ Control visual de LEDs con efectos realistas
- ✅ Sistema de puertos I/O (PORTB, DDRB, PINB)
- ✅ Control manual y automático mediante interfaz
- Controles en tiempo real: Toggle, Blink, Modo automático
- Visualización del estado: Registros, memoria, contador de programa
- Debug interactivo: Ejecución paso a paso o continua
- Interfaz Unity integrada: Controles GUI nativos
Nota: Agrega aquí capturas de pantalla de tu simulador en funcionamiento
- Unity 2022.3 LTS o superior
- Arduino IDE (para compilar programas .hex)
- Git (para clonar el repositorio)
-
Clona el repositorio
git clone https://github.com/tu-usuario/arduino-simulator-unity.git cd arduino-simulator-unity
-
Abre en Unity
- Abre Unity Hub
- Haz clic en "Add project from disk"
- Selecciona la carpeta del proyecto clonado
- Abre el proyecto
-
Configura la escena
- Abre la escena
Assets/Scenes/ArduinoSimulator.unity
- Presiona Play para probar el simulador
- Abre la escena
-
Agrega tus archivos .hex
- Coloca tus archivos .hex en
Assets/StreamingAssets/
- Configura la ruta en el componente
HexFileParser
- Coloca tus archivos .hex en
-
Carga un programa .hex:
// En el inspector del HexFileParser Hex File Path: "sketch.hex" // Tu archivo compilado Load On Start: true
-
Controles de teclado:
ESPACIO
: Toggle LEDB
: Parpadeo LED (5 veces)A
: Modo automático ON/OFF
-
Debug avanzado:
- Habilita "Enable Debug" en AVRSimulator
- Usa "Step By Step" para ejecución manual
- Observa la ventana de debug en tiempo real
// Ejemplo: Blink LED (Pin 13)
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Compilar:
- Arduino IDE → Sketch → Export compiled Binary
- Copia el archivo .hex a
StreamingAssets/
- Ejecuta el simulador
graph TD
A[HexFileParser] --> B[ProgramMemory]
B --> C[AVRSimulator]
C --> D[InstructionDecoder]
C --> E[MemoryManager]
C --> F[IOController]
F --> G[LEDController]
C --> H[DebugInterface]
- HexFileParser: Lee y valida archivos Intel HEX
- AVRSimulator: Motor principal de simulación
- InstructionDecoder: Decodifica y ejecuta instrucciones AVR
- MemoryManager: Gestiona SRAM, registros y EEPROM
- IOController: Maneja puertos de entrada/salida
- LEDController: Renderiza efectos visuales de LEDs
Script | Descripción | Responsabilidad |
---|---|---|
AVRSimulator.cs [1] |
Motor principal del simulador | Ciclo de ejecución, debugging, control de estado |
HexFileParser.cs [3] |
Parser de archivos Intel HEX | Lectura, validación y carga de programas |
LEDController.cs [4] |
Control visual de LEDs | Efectos, animaciones, materialES emisivos |
ArduinoController.cs [1] |
Controlador de alto nivel | Interfaz unificada, controles manuales |
UIController.cs [5] |
Interfaz de usuario | Botones, sliders, indicadores de estado |
Instrucción | Opcode | Descripción | Estado |
---|---|---|---|
LDI |
0xE000 |
Load Immediate | ✅ Implementado |
OUT |
0xB800 |
Store Register to I/O | ✅ Implementado |
SBI |
0x9A00 |
Set Bit in I/O Register | ✅ Implementado |
CBI |
0x9800 |
Clear Bit in I/O Register | ✅ Implementado |
RJMP |
0xC000 |
Relative Jump | ✅ Implementado |
CALL |
0x940E |
Call Subroutine | ✅ Implementado |
RET |
0x9508 |
Return from Subroutine | ✅ Implementado |
[Header("Configuración del Simulador")]
public float clockFrequency = 16000000f; // 16 MHz
public int instructionsPerFrame = 100; // Rendimiento
public bool enableDebug = true; // Información debug
public bool stepByStep = false; // Ejecución manual
¡Las contribuciones son bienvenidas! Sigue estos pasos:
- Fork el proyecto
- Crea una rama feature (
git checkout -b feature/AmazingFeature
) - Commit tus cambios (
git commit -m 'Add some AmazingFeature'
) - Push a la rama (
git push origin feature/AmazingFeature
) - Abre un Pull Request
- 🔧 Instrucciones AVR adicionales (MUL, FMUL, BST, BLD)
- ⚡ Sistema de interrupciones (Timer, External, ADC)
- 🎛️ Periféricos adicionales (UART, SPI, I2C, ADC)
- 🐛 Testing y QA (Unit tests, integración)
- 📖 Documentación (Tutoriales, ejemplos)
- Sistema básico de interrupciones
- Instrucciones aritméticas avanzadas
- Mejorar precisión de timing
- Breakpoints condicionales
- Simulación de UART/Serial
- ADC para sensores analógicos
- PWM para control de servos
- I2C/SPI básico
- Soporte múltiples placas Arduino
- Sistema de plugins
- Exportación de datos de simulación
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para detalles.
-
Autor: Héctor Helí Ruiz García
-
Issues: GitHub Issues
-
Discussions: GitHub Discussions
- Comunidad Arduino por la documentación del AVR
- Unity Technologies por el motor de juego
- Contribuidores del proyecto Intel HEX format
⭐ ¡Si este proyecto te resulta útil, danos una estrella en GitHub! ⭐