Hola Buenas Tardes
En uno de mis posteos anteriores planteaba. Si las librerías OLED que están a la mano de todos; no eran nuestros enemigos a la hora de usarlas con un Arduino NANO, 32U4, etc. Dada la escaza capacidad de su memoria.
En ese momento
Sispic intento darme una mano; pero opté por no ponerlo en esa molestia; ya que yo necesitaba comprender que alternativas tenía a mi alcance.
Fui buscando otras librerías (que las hay) en la web; pero ninguna terminaba de convencerme.
Las que ocupaban poco espacio limitaban al tamaño del carácter impidiendo tener “grandes caracteres sobre el display”.
Preparaba mi café y pensé. Y si la librería que yo necesito la hago yo mismo. Fue así que comencé a recordar mis clases de Análisis de Sistemas II y comencé a recordar Binario y Hexadecimal.
Y aquí están mis primeros resultados; y como de costumbre, quería compartirlo con Uds. En el caso que les sirva para incursionar en el tema.
Necesitas un:Arduino NANO, UNO, 32U4
Display OLED 128x32
Aclaraciones:- NO lo probé en un 128x64 (pero no veo porque no debería funcionar).
- Muestra solo las
8 primeras letras de la A, … y H en una pequeña matriz de 8x8 pixel.
- Vas a ver como muestra las letras intercaladas.
- Con respecto al espesor de la letra dependerá de cómo dibujes tu carácter sobre la matriz de papel.
- Con respecto a la orientación del carácter sobre el Display, dependerá del modo que se organice y sea leída la matriz (array).
Si le tenés recelo a trabajar con Binario y Hexadecimal esta es una oportunidad para aprender o recordar y hacerlo. Bueno este es el Sketch para comenzar a practicar. Ahora es comenzar los ajustes de él e intentar hacer mi primera Librería.
#include <Wire.h>
// Tabla o Array (A, B, C, D, E, F, G, H)
uint8_t array1[8][8]={{0X18, 0X24, 0X42, 0X42, 0X42, 0X7E, 0X42, 0X42},
{0X38, 0X44, 0X44, 0X78, 0X44, 0X42, 0X42, 0X7C},
{0X3C, 0X42, 0X42, 0X40, 0X40, 0X42, 0X42, 0X3C},
{0X7C, 0X42, 0X42, 0X42, 0X42, 0X42, 0X42, 0X7C},
{0X3E, 0X40, 0X40, 0X78, 0X40, 0X40, 0X40, 0X3E},
{0X7E, 0X40, 0X40, 0X7C, 0X40, 0X40, 0X40, 0X40},
{0X3C, 0X42, 0X40, 0X7C, 0X42, 0X42, 0X42, 0X3C},
{0X42, 0X42, 0X42, 0X7E, 0X42, 0X42, 0X42, 0X42}};
void setup() {
Wire.begin(); // Iniciar la comunicacion I2C de Arduino
TWBR = 12; // Frecuencia SCL 400MHz (velocidad refresca Pantalla)
Wire.beginTransmission(0x3C); // Abro Canal de Comunicacion
Wire.write(0x00); // (como decir HOME - CLEAR creo)
Wire.write(0xAE); // Apago pantalla
Wire.write(0xA6); // Poner la pantalla en modo Normal
Wire.write(0xA2); // Configurar 198 columnas
Wire.write(0x04); // x32 o Wire.write(0x3F)=63 lineas;
Wire.write(0xD3); // Poner el offset a 0
Wire.write(0x40); // Modo WRITE
Wire.write(0xDA); // Mapear los pines COM
Wire.write(0x02); // o Wire.write(0x12);
Wire.write(0x81); // Configurar el contraste
Wire.write(0x7F); // Este valor tiene que estar entre 0x00 (min) y 0xFF (max)
Wire.write(0xA4); // Muestra el contenido almacenado en la GDDRAM del Display
Wire.write(0xD5); Wire.write(0x80); // Establecer la velocidad del Oscilador
Wire.write(0x8D); Wire.write(0x14); // Activar los Condensadores 'charge pump'
Wire.write(0xAF); // Encender la pantalla
// Como extra, establecemos el rango de columnas y paginas
Wire.write(0x04); // (21) Paginas de 0 a 7
Wire.write(0x00); // Home
Wire.write(0x7F); // 7F
Wire.write(0x22); // (22) Columnas de 0 a 127
Wire.write(0x00); // Home
Wire.write(0x07); // 07
Wire.write(0x20); // Modo de escritura horizontal
Wire.write(0x00);
Wire.endTransmission(); // Cierro Canal de Comunicacion
}
void loop() {
// Mostrando el Caracter
for ( int i=0; i<8; ++i ) {
screenClear(); // Limpiando Display
for ( int j=0; j<8; j++ ) {
Wire.beginTransmission(0x3C);
Wire.write(0x40); Wire.write(array1[i][j]);
Wire.endTransmission();
}
delay(500);
}
}
void screenClear(){
for (int i=0; i<512; i++){
Wire.beginTransmission(0x3C);
Wire.write(0x40); Wire.write(0x00);
Wire.endTransmission();}
delay(250);
return;}
Aquí un breve video que te muestra el resultado
Un Cordial saludo para todos.