npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@enflujo/lcd

v0.0.6

Published

Librería para controlar LCDs con ic2

Readme

Libreria @enflujo/lcd

Ver ejemplos en https://github.com/enflujo/enflujo-lcd-ejemplos

Instalación

yarn add @enflujo/lcd

Uso

Estos son los métodos que expone la librería:

Ejemplo básico

Lo más sencillo posible.

import { LCD_Sensual } from '@enflujo/lcd';

const lcd = new LCD_Sensual();

async function inicio() {
  await lcd.iniciar();
  await lcd.imprimir('Hola!');
  await lcd.cerrar();
}

inicio();

| Parámetros | Tipo | Predeterminado | | ---------- | -------- | -------------- | | filas | number | 2 | | columnas | number | 16 | | numeroBus | number | 1 | | dirección | hex | 0x27 |

iniciar()

Iniciar la comunicación con la pantalla. Debe ser siempre lo primero que se ejecuta.

await lcd.iniciar();

imprimir(texto, fila?, columna?)

Imprime el texto en la pantalla.

await lcd.imprimir('.:: EnFlujo ::.');

También se puede pasar la posición donde imprimir, el segundo parámetro es la fila y el tercero la columna:

// Imprime :) en la segunda fila, columna 5
await lcd.imprimir(':)', 2, 5);

Si no se pasan parámetros del fila y columna, los textos se van imprimiendo en orden:

await lcd.imprimir('H'); // fila 1, columna 1
await lcd.imprimir('o'); // fila 1, columna 2
await lcd.imprimir('l'); // fila 1, columna 3
await lcd.imprimir('a'); // fila 1, columna 4

| Parámetros | Tipo | Predeterminado | | ---------- | -------- | ---------------------- | | texto | string | | | fila | number | donde esté el cursor | | columna | number | donde esté el cursor |

cursor()

Muestra un cursor _ en la posición donde va a imprimir el siguiente carácter.

await lcd.cursor();

apagarCursor()

Deja de mostrar el cursor.

await lcd.apagarCursor();

parpadearCursor

También se puede mostrar el cursor parpadeando si se cambia este parámetro.

// No es asincrónico entonces se puede ejecutar sin el await
lcd.parpadearCursor = true;

borrar()

Borra todo lo que esté en la pantalla.

await lcd.borrar();

irAlInicio()

En cualquier momento, podemos devolver el cursos a la posición inicial (fila 1, columna 1) y reescribir encima de lo que esté allí.

await lcd.irAlInicio();

apagarLuz()

Apaga la luz detrás de la pantalla LCD.

await lcd.apagarLuz();

prenderLuz()

Vuelve a prender la luz si la apagamos antes. Al iniciar la LCD se prende sola, esto es útil sólo si apagamos an algún momento la pantalla con apagarLuz()

await lcd.prenderLuz();

crearCaracter(posicion, datos)

Crear caracteres especiales.

// La librería recibe los datos de cada una de los 8 filas en código HEX.
const corazon = ['0xa', '0x1f', '0x1f', '0xe', '0x4', '0x0', '0x0', '0x4'];
await lcd.crearCaracter(0, corazon);

También se puede importar una función que ayuda a convertir código binario a HEX ya que es más fácil de ver lo que se está dibujando en bloques de código binario:

import { LCD_Sensual, binarioAHex } from '@enflujo/lcd';

const corazon = binarioAHex(`01010,
                             11111,
                             11111,
                             01110,
                             00100,
                             00000,
                             00000,
                             00100`);

await lcd.crearCaracter(0, corazon);

| Parámetros | Tipo | Predeterminado | | ---------- | ------------- | -------------- | | posicion | number | | | datos | Array [hex] | |

obtenerCaracter(posicion)

Luego de crear el carácter, se puede sacar el carácter de la memoria e imprimirlo:

const corazon = ['0xa', '0x1f', '0x1f', '0xe', '0x4', '0x0', '0x0', '0x4'];
await lcd.crearCaracter(0, corazon);

// Imprime el corazón que se guardó antes en la posición 0
await lcd.imprimir(lcd.obtenerCaracter(0));

| Parámetros | Tipo | Predeterminado | | ---------- | -------- | -------------- | | posicion | number | |

Las LCD con controlador i2c por lo general tienen una pequeña memoria RAM que permite guardar 8 caracteres especiales al tiempo. Pero se pueden ir generando nuevos en el proceso de imprimir:

// Acá ocupamos los 8 caracteres posibles en la memoria
await lcd.crearCaracter(0, corazon);
await lcd.crearCaracter(1, e);
await lcd.crearCaracter(2, n);
await lcd.crearCaracter(3, f);
await lcd.crearCaracter(4, l);
await lcd.crearCaracter(5, u);
await lcd.crearCaracter(6, j);
await lcd.crearCaracter(7, o);

// Imprimir estos 8
await lcd.imprimir(lcd.obtenerCaracter(0));
await lcd.imprimir(lcd.obtenerCaracter(1));
await lcd.imprimir(lcd.obtenerCaracter(2));
await lcd.imprimir(lcd.obtenerCaracter(3));
await lcd.imprimir(lcd.obtenerCaracter(4));
await lcd.imprimir(lcd.obtenerCaracter(5));
await lcd.imprimir(lcd.obtenerCaracter(6));
await lcd.imprimir(lcd.obtenerCaracter(7));

// Crear un noveno carácter y guardarlo en la RAM en la posición 0
// Perdemos de la memoria el "corazon" pero ya lo imprimimos antes

await lcd.crearCaracter(0, noveno);
await lcd.imprimir(lcd.obtenerCaracter(0));

cerrar()

Cierra la comunicación con la pantalla. No es indispensable pero es bueno liberar de la memoria de la Raspberry la comunicación con la LCD.

Si queremos imprimir algo estático (no en bucle infinito como una animación), podemos cerrar la comunicación al final del programa (ver ejemplo básico al inicio de esta documentación)

await lcd.cerrar();

esperar(tiempo)

La librería también expone una función que permite suspender antes de seguir con la siguiente linea del código, es útil para animar secuencias:

import { LCD_Sensual, esperar } from '@enflujo/lcd';

const lcd = new LCD_Sensual();

async function inicio() {
  await lcd.iniciar();
  await lcd.imprimir('laboratorio');
  await esperar(1000); // Esperar 1 segundo antes de seguir
  await lcd.imprimir('.:: EnFlujo ::.', 2, 7);
  await lcd.cerrar();
}

inicio();