Muchas veces queremos añadir algún elemento a nuestras maquetas con algún tipo de efecto o pequeña automatización y consultando con nuestros amigos como implementarlo siempre hay alguien que dice: “Eso con Arduino es más sencillo de hacer!”.
Os presento simplex.h una librería para Arduino para realizar animaciones y algo más en nuestras maquetas con comandos simples y compatibles con la programación tradicional del lenguaje Arduino.
simplex.h es una librería para Arduino que aprovechando la potencia del preprocesador del lenguaje Arduino proporciona comandos simples para automatizar nuestras maquetas y es plenamente integrable con el lenguaje Arduino.
Para usar la librería sólo hay que copiar los archivos simplex.h y simplex.cpp al directorio donde se encuentra vuestro sketch, incluir la librería y en el loop() poner RUN_SIMPLEX al inicio:
Otra opción es descargar esta librería como archivo .zip y añadirla en el Arduino IDE desde el menú Programa -> Incluir Librería -> Añadir biblioteca .ZIP ..., además también estarán disponibles los ejemplos en el menú Archivo y no necesitareis copiar los archivos simplex.h y simplex.cpp al directorio donde se encuentra vuestro sketch.
IMPORTANTE Entre el comando y el ( no deben escribirse espacios ya que sino el prepocesador generará un error al compilar el código.
| Comando | Descripción |
|---|---|
| RUN_SIMPLEX | Procesa las acciones de simplex.h |
| SET_NAME(n,p) | Asigna un valor (0...255) a un nombre de constante (pin, etc.,..) |
| VAR_NAME(n) | Define el nombre de una variable |
| SET_VAR(n,p) | Dar un valor a una variable (entre -32768 a 32767) |
| PIN_OUT(p) | Define un pin como salida (relé, luces,...) |
| PIN_COIL(p) | Define un pin como salida de pulso (Bobina desvío,…) |
| PIN_EFFECT(p) | Define un pin como efecto de luz |
| PIN_SERVO(p) | Define un pin como servo (máx. 12: _MAX_SERVO) |
| PIN_INPUT(p) | Define un pin como entrada |
| PIN_BUTTON(p) | Define un pin como entrada anti rebote (Pulsador, final carrera…) |
| PIN_SENSOR(p) | Define un pin como una entrada de sensor |
| PIN_STEPPER4(p) | Define 4 pins consecutivos para control motor paso a paso (tipo 28BYJ-48) |
| PIN_STEPPER2(p) | Define 2 pins consecutivos para control motor paso a paso (tipo driver A4988 y similares, p: STEP, p+1: DIR) |
| PIN_MODE(p,n) | Establece el modo de un pin (tipo PIN_OUT/ PIN_EFFECT/PIN_STEPPER) |
| PIN_TIME(p,n) | Establece el tiempo para un pin o la velocidad de un servo o motor paso a paso |
| SET(p) | Activa pin de salida (tipo PIN_OUT/ PIN_EFFECT/ PIN_COIL) |
| RESET(p) | Desactiva pin de salida (tipo PIN_OUT/ PIN_EFFECT/ PIN_COIL) |
| SERVO(p,n) | Mover el servo a una posición (0..180) |
| STEPPER_SET(p,n) | Establece el paso actual (posición) del motor paso a paso |
| STEPPER_GO(p,n) | Mover el motor paso a paso a la posición absoluta |
| STEPPER_CW(p,n) | Mover el motor paso a paso a la posición relativa (sentido horario) |
| STEPPER_CCW(p,n) | Mover el motor paso a paso a la posición relativa (sentido antihorario) |
| ARRIVED(p) | Comprobar si el servo llegó a la posición |
| PRESSED(p) | Comprobar si se pulsó el botón |
| ACTIVE(p) | Comprobar si el sensor esta activo |
| FREE(p) | Comprobar si el sensor esta libre |
| FSM_NEW(n) | FSM, define el nombre de una nueva FSM (Multi FSM) |
| FSM_USE(n) | FSM, usar los estados correspondientes al FSM (Multi FSM) |
| FSM_NAME(n) | FSM, define el nombre de un nuevo estado |
| FSM_STATE(n) | FSM, comprobar estado actual |
| FSM_GO(n) | FSM, transición a un nuevo estado |
| SET_TIMER(p,n) | Arrancar un temporizador (máx. 4: _MAX_TIMERS) |
| TIMEOUT(p) | Comprobar si el temporizador acabó (máx. 4: _MAX_TIMERS) |
| WAIT(n) | Espera un tiempo procesando acciones simplex |
| WAIT_SERVO(p) | Espera que un servo llegue a la posición procesando acciones simplex |
| WAIT_RELEASE(p) | Espera a que se suelte el botón procesando acciones simplex |
| WAIT_STEPPER(p) | Espera que un motor paso a paso llegue a la posición procesando acciones simplex |
| FUNCTION(n) | Define una función |
| CALL(n) | Llamar a una función |
| REPEAT(n) | Repetir comandos (2..65535 veces, máx. 4 bucles: _MAX_REPEAT) |
| AND(x,y) | Comprobar si ambas condiciones son verdaderas |
| OR(x,y) | Comprobar si al menos una condición es verdadera |
| NOT(x) | Negación lógica |
| EQUAL(x,y) | Comprobar si dos valores son iguales |
| Comando | Descripción |
|---|---|
| PIN_DCC() | Usar pin de entrada DCC (_DCC_PIN) |
| DCC_ACC_RED(n) | Comprobar si el número de accesorio recibido está en rojo |
| DCC_ACC_GREEN(n) | Comprobar si el número de accesorio recibido está en verde |
| Comando | Descripción |
|---|---|
| XNET_ADDR(n) | Inicializa interface Xpressnet (MAX485). Dirección válida: 1..31 |
| XNET_RED(n) | Mover el accesorio a rojo (1..1024) |
| XNET_GREEN(n) | Mover el accesorio a verde (1..1024) |
| XNET_TOGGLE(n) | Mover accesorio a la otra posición (1..512) |
| XNET_ACTIVE(n,p) | Comprobar si la entrada p del módulo RS n está ocupada |
| XNET_FREE(n,p) | Comprobar si la entrada p del módulo RS n está libre |
| XNET_CHANGED(n) | Comprobar si hay cambios en el módulo RS n |
| Efecto | Descripción |
|---|---|
| NORMAL | Salida normal |
| INVERT | Salida invertida |
| FLASH | Salida intermitente |
| Efecto | Descripción |
|---|---|
| DIMMER | Encendido / apagado lento |
| FLASH | Parpadeo con encendido / apagado lento |
| CANDLE | Vela |
| FIRE | Fuego |
| FLUORESCENT | Luz fluorescente |
| WELDING | Soldadura |
| PWM | Intensidad 0..15 (62.5Hz) |
| Efecto | Tipo Motor | Descripción |
|---|---|---|
| HALF_STEP | STEPPER4 | Medio paso |
| FULL_STEP | STEPPER4 / STEPPER2 | Paso completo |
| DRIVER | STEPPER2 | Controlador de motores paso a paso |
El manual de la librería lo podéis ver aquí.
Los ejemplos del manual los podéis ver aquí.
Hay una plantilla en blanco aquí.
Paco Cañada


