Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LogicPins

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().


🚀 Características

  • 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 = Entrada o Salida1 = Salida2 transfieren 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.

📦 Instalación

  1. Descarga este repositorio como archivo .zip o clónalo en tu carpeta de librerías.
  2. En el IDE de Arduino, ve a Programa -> Incluir Librería -> Añadir librería .ZIP... y selecciona la carpeta.
  3. Incluye la librería en tu boceto con:
    #include <LogicPins.h>

💻 Ejemplo Rápido

#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);
}

💡 ¿Cómo funciona la Inversión Lógica con INPUT_PULLUP?

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.


🔣 Equivalencia de Compuertas Lógicas en C++

Compuerta Lógica Expresión Booleana Código con LogicPins
AND $Y = A \cdot B$ Salida = SensorA && SensorB;
OR $Y = A + B$ Salida = SensorA || SensorB;
NOT $Y = \bar{A}$ Salida = !SensorA;
NAND $Y = \overline{A \cdot B}$ Salida = !(SensorA && SensorB);
NOR $Y = \overline{A + B}$ Salida = !(SensorA || SensorB);
XOR $Y = A \oplus B$ Salida = SensorA ^ SensorB;
XNOR $Y = \overline{A \oplus B}$ Salida = !(SensorA ^ SensorB);

📖 Referencia de la API

Clase Entrada

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 con INPUT o INPUT_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 (true o false).
  • operator bool(): Conversión implícita a bool para usar en expresiones if (miEntrada) o ecuaciones lógicas.
  • obtenerPin(): Retorna el número de pin físico asignado.

Clase Salida

Representa LEDs, relés, motores o cualquier actuador digital.

Salida miSalida(uint8_t pin, bool invertido = false);
  • iniciar(bool estadoInicial = false): Configura el pin como OUTPUT y 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 a bool.
  • 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.

👤 Autor

Cristian Camilo Cañaveral Avilés


📄 Licencia

Este proyecto está bajo la Licencia MIT.

About

Libreria para abstraccion de pines y logica combinacional.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages