Librería de abstracción de pines e interacciones lógicas para Arduino y ESP32.
Permite tratar los pines de entrada y salida como si fueran variables booleanas puras en C++, facilitando la enseñanza y aplicación de álgebra booleana y compuertas lógicas sin lidiar con llamadas repetitivas a digitalRead() y digitalWrite().
- Abstracción Booleana: Asigna ecuaciones lógicas directamente a pines de salida.
- Sintaxis Intuitiva: Usa operadores estándar de C++ (
&&,||,!,^). - Soporte Pull-up e Inversión Lógica: Maneja fácilmente botones conectados a GND sin alterar la intuición lógica (
Presionado == true). - Previene Sobrescritura de Pines: Asignaciones entre objetos
Salida = EntradaoSalida1 = Salida2transfieren estados lógicos sin alterar la configuración del pin físico. - Compatible: Funciona en Arduino UNO, Mega, Nano, ESP8266, ESP32 y cualquier plataforma compatible con el ecosistema Arduino.
- Descarga este repositorio como archivo
.zipo clónalo en tu carpeta de librerías. - En el IDE de Arduino, ve a Programa -> Incluir Librería -> Añadir librería .ZIP... y selecciona la carpeta.
- Incluye la librería en tu boceto con:
#include <LogicPins.h>
#include <LogicPins.h>
Salida Motor(2);
Entrada SensorA(3);
Entrada SensorB(4);
Entrada SensorC(5);
void setup() {
Motor.iniciar();
SensorA.iniciar();
SensorB.iniciar();
// Usando INPUT_PULLUP con lógica invertida (Presionado = true):
SensorC.iniciar(true, true);
}
void loop() {
// Ecuación combinacional: Motor = (A AND B) OR (NOT A AND C)
Motor = (SensorA && SensorB) || (!SensorA && SensorC);
}Cuando conectas un botón entre un pin digital y la línea de GND usando la resistencia interna Pull-up de Arduino:
| Estado Físico del Botón | Voltaje Físico en el Pin | digitalRead(pin) |
Lectura con iniciar(true, true) |
|---|---|---|---|
| No presionado (circuito abierto) | 5V / 3.3V (ALTO) | HIGH |
false |
| Presionado (conectado a GND) | 0V (BAJO) | LOW |
true |
Al llamar a Sensor.iniciar(true, true), el segundo argumento habilita invertirLogica = true, haciendo que presionar el botón devuelva true y no presionar devuelva false.
| Compuerta Lógica | Expresión Booleana | Código con LogicPins |
|---|---|---|
| AND | Salida = SensorA && SensorB; |
|
| OR | Salida = SensorA || SensorB; |
|
| NOT | Salida = !SensorA; |
|
| NAND | Salida = !(SensorA && SensorB); |
|
| NOR | Salida = !(SensorA || SensorB); |
|
| XOR | Salida = SensorA ^ SensorB; |
|
| XNOR | Salida = !(SensorA ^ SensorB); |
Representa botones, pulsadores, finales de carrera o cualquier sensor digital.
Entrada miEntrada(uint8_t pin, bool invertido = false);iniciar(bool usarPullup = false, bool invertirLogica = false): Configura el pin conINPUToINPUT_PULLUP, e indica opcionalmente si se invierte la lógica.setInvertido(bool inv = true): Cambia manualmente si la lectura se invierte.leer(): Retorna el valor booleano actual (trueofalse).operator bool(): Conversión implícita aboolpara usar en expresionesif (miEntrada)o ecuaciones lógicas.obtenerPin(): Retorna el número de pin físico asignado.
Representa LEDs, relés, motores o cualquier actuador digital.
Salida miSalida(uint8_t pin, bool invertido = false);iniciar(bool estadoInicial = false): Configura el pin comoOUTPUTy establece su estado inicial.setInvertido(bool inv = true): Cambia manualmente si la salida es activa en BAJO (Active-LOW).escribir(bool estado): Escribe directamente en el pin según el estado.encender(): Enciende la salida (true).apagar(): Apaga la salida (false).conmutar(): Invierte el estado actual de la salida (Toggle).leer(): Lee el estado actual del pin físico.operator bool(): Conversión implícita abool.operator=(bool estado): Permite asignar resultados booleanos directamente (miSalida = true;).operator=(const Salida& otra): Asigna el estado de otra salida sin modificar los pines asignados.operator=(const Entrada& entrada): Asigna el estado de una entrada directamente.
Cristian Camilo Cañaveral Avilés
- Email: camilo.canavi@gmail.com
- GitHub: @canavix
Este proyecto está bajo la Licencia MIT.