Controlador Pantalla Oled SSD1306

lo que hace el SSD1306 es comunicar con el microcontrolador  mediante I2C o SPI para obtener los datos y enviarlos a la pantalla OLED para que dibuje esos datos.

PULGADASPÍXELES
0,69″128 x 32
0,96″128 x 64

Las librerías pantalla OLED con Arduino y ESP8266 son dos: Adafruit_SSD1306 y Adfruit-GFX-Library.

1Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);

Donde:

  • ANCHO_PANTALLA: es la constante donde se almacena el ancho de la pantalla.
  • ALTO_PANTALLA: es la constante donde se almacena el alto de la pantalla.
  • &Wire: el un puntero a la clase estática Wire.
  • -1: es el pin de Arduino o ESP8266 que se utiliza para resetear la pantalla.

En estos sketchs podemos ver como se expresan las funciones de las librerias,funcionando ambas


#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


Adafruit_SSD1306 oled_1(128,64, &Wire,-1);
void setup(){
oled_1.begin(SSD1306_SWITCHCAPVCC,0x3C);//inicialización de pantalla en direccion 0x3c
   oled_1.clearDisplay();
  oled_1.display();
  oled_1.setTextSize(1);
  oled_1.setTextColor(WHITE); 
  oled_1.setCursor(25,32);//posición texto x,y
  oled_1.print("TEST SSD1306");//escribir texto
   oled_1.display();//envío a pantalla
}


void loop() {}

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 
// Definir constantes
#define ANCHO_PANTALLA 128 // ancho pantalla OLED
#define ALTO_PANTALLA 64 // alto pantalla OLED
 
// Objeto de la clase Adafruit_SSD1306
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
 
void setup() {
#ifdef __DEBUG__
  Serial.begin(9600);
  delay(100);
  Serial.println("Iniciando pantalla OLED");
#endif
 
  // Iniciar pantalla OLED en la dirección 0x3C
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef __DEBUG__
    Serial.println("No se encuentra la pantalla OLED");
#endif
    while (true);
  }
 
  // Limpiar buffer
  display.clearDisplay();
 
  // Tamaño del texto
  display.setTextSize(1);
  // Color del texto
  display.setTextColor(SSD1306_WHITE);
  // Posición del texto
  display.setCursor(10, 32);
  // Escribir texto
  display.println("¡¡Hola mundo!!");
 
  // Enviar a pantalla
  display.display();
 
}
 
void loop() {}

Dibujar un punto en la pantalla

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 
// Definir constantes
#define ANCHO_PANTALLA 128 // ancho pantalla OLED
#define ALTO_PANTALLA 64 // alto pantalla OLED
 
// Objeto de la clase Adafruit_SSD1306
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
 
void setup() {
#ifdef __DEBUG__
  Serial.begin(9600);
  delay(100);
  Serial.println("Iniciando pantalla OLED");
#endif
 
  // Iniciar pantalla OLED en la dirección 0x3C
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef __DEBUG__
    Serial.println("No se encuentra la pantalla OLED");
#endif
    while (true);
  }
 
}
 
void loop() {
  // Recorrer pantalla
  for (int x = 0; x < ANCHO_PANTALLA; x++) {
    for (int y = 0; y < ALTO_PANTALLA; y++) {
      // Limpiar buffer
      display.clearDisplay();
      // Dibujar un píxel
      display.drawPixel(x, y, SSD1306_WHITE);
      // Enviar a pantalla
      display.display();
    }
  }
}

TEXTO EN MOVIMIENTO

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 
// Definir constantes
#define ANCHO_PANTALLA 128 // ancho pantalla OLED
#define ALTO_PANTALLA 64 // alto pantalla OLED
 
// Objeto de la clase Adafruit_SSD1306
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
 
void setup() {
#ifdef __DEBUG__
  Serial.begin(9600);
  delay(100);
  Serial.println("Iniciando pantalla OLED");
#endif
 
  // Iniciar pantalla OLED en la dirección 0x3C
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef __DEBUG__
    Serial.println("No se encuentra la pantalla OLED");
#endif
    while (true);
  }
 
  // Limpir buffer
  display.clearDisplay();
 
  // Tamaño del texto
  display.setTextSize(1);
  // Color del texto
  display.setTextColor(SSD1306_WHITE);
  // Posición del texto
  display.setCursor(10, 32);
  //Activar página de código 437
  display.cp437(true);
  // Escribir el carácter ¡ dos veces
  display.write(173);
  display.write(173);
  // Escribir texto
  display.println("Hola mundo!!");
  
  // Enviar a pantalla
  display.display();
  delay(2000);
 
  // Mover texto de izquierda a derecha
  display.startscrollright(0x00, 0x0F);
  delay(5000);
  display.stopscroll();
  
  // Mover texto de derecha a izquierda
  display.startscrollleft(0x00, 0x0F);
  delay(5000);
  display.stopscroll();
 
  // Mover texto en diagonal hacia la derecha
  display.startscrolldiagright(0x00, 0x07);
  delay(5000);
  display.stopscroll();
 
  // Mover texto en diagonal hacia la izquierda
  display.startscrolldiagleft(0x00, 0x07);
  delay(5000);
  display.stopscroll();
}
 
void loop() {}

Dibujar figuras en pantalla

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 
// Definir constantes
#define ANCHO_PANTALLA 128 // ancho pantalla OLED
#define ALTO_PANTALLA 64 // alto pantalla OLED
 
// Objeto de la clase Adafruit_SSD1306
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
 
void setup() {
#ifdef __DEBUG__
  Serial.begin(9600);
  delay(100);
  Serial.println("Iniciando pantalla OLED");
#endif
 
  // Iniciar pantalla OLED en la dirección 0x3C
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef __DEBUG__
    Serial.println("No se encuentra la pantalla OLED");
#endif
    while (true);
  }
 
  // Limpir buffer
  display.clearDisplay();
 
  // Dibujar línea horizontal
  display.drawLine(0, 18, display.width(), 18, SSD1306_WHITE);
  // Dibujar línea vertical
  display.drawLine(63, 0, 63, display.height(), SSD1306_WHITE);
 
  // Enviar a pantalla
  display.display();
  delay(2000);
 
  // Limpir buffer
  display.clearDisplay();
 
  // Dibujar un rectángulo
  display.drawRect(10, 18, 20, 28, SSD1306_WHITE);
  // Enviar a pantalla
  display.display();
  delay(2000);
  // Rellenar rectángulo
  display.fillRect(10, 18, 20, 28, SSD1306_WHITE);
 
  // Enviar a pantalla
  display.display();
  delay(2000);
 
  // Limpir buffer
  display.clearDisplay();
 
  // Dibujar un ciículor
  display.drawCircle(64, 32, 10, SSD1306_WHITE);
  // Enviar a pantalla
  display.display();
  delay(2000);
  // Rellenar cículo
  display.fillCircle(64, 32, 10, SSD1306_WHITE);
 
  // Enviar a pantalla
  display.display();
  delay(2000);
 
  // Limpir buffer
  display.clearDisplay();
 
  // Dibujar un rectángulo redondeado
  display.drawRoundRect(10, 18, 20, 28, 5, SSD1306_WHITE);
  // Enviar a pantalla
  display.display();
  delay(2000);
  // Rellenar rectángulo redondeado
  display.fillRoundRect(10, 18, 20, 28, 5, SSD1306_WHITE);
 
  // Enviar a pantalla
  display.display();
  delay(2000);
 
  // Limpir buffer
  display.clearDisplay();
 
  // Dibujar un rectángulo redondeado
  display.drawTriangle(10, 18, 50, 18, 30, 58, SSD1306_WHITE);
  // Enviar a pantalla
  display.display();
  delay(2000);
  // Rellenar rectángulo redondeado
  display.fillTriangle(10, 18, 50, 18, 30, 58, SSD1306_WHITE);
 
  // Enviar a pantalla
  display.display();
  delay(2000);
}
 
void loop() {}

MOSTRAR TIEMPO TRANSCURRIDO

#define __DEBUG__
 
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 
// Definir constantes
#define ANCHO_PANTALLA 128 // ancho pantalla OLED
#define ALTO_PANTALLA 64 // alto pantalla OLED
 
// Objeto de la clase Adafruit_SSD1306
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
 
// Temporizador
unsigned long marcaTiempoDate = 0;
unsigned long tiempoRefreshDate = 1000;
 
// Variables almacena tiempo millis
int dias;
int horas;
int minutos;
int segundos;
 
// Cadena para almacenar texto formateado
char cadenaTiempo[16];
 
/*
  Función que convierte millis() a segundos, minutos, horas y días
  Almacena la información en variables globales
*/
void millisToTiempo(unsigned long valMillis) {
  // Se obtienen los segundos
  valMillis = valMillis / 1000;
 
  segundos = valMillis % 60; // se divide entre segundos por minuto y te quedas con el resto
  minutos = valMillis / 60; // Se convierte a minutos
  minutos = minutos % 60; // se divide entre minutos por hora y te quedas con el resto
  horas = (valMillis / 60) / 60; // Se convierte en horas
  horas = horas % 24; // se divide entre horas al día y te quedas con el resto
  dias = ((valMillis / 60) / 60) / 24; // Se convierte en días
#ifdef __DEBUG__
  Serial.print("Segundos = ");
  Serial.println(valMillis);
  Serial.print(dias);
  Serial.print(":");
  Serial.print(horas);
  Serial.print(":");
  Serial.print(minutos);
  Serial.print(":");
  Serial.println(segundos);
#endif
}
 
void setup() {
#ifdef __DEBUG__
  Serial.begin(9600);
  delay(100);
  Serial.println("Iniciando pantalla OLED");
#endif
 
  // Iniciar pantalla OLED en la dirección 0x3C
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef __DEBUG__
    Serial.println("No se encuentra la pantalla OLED");
#endif
    while (true);
  }
}
 
void loop() {
 
  // Protección overflow
  if (millis() < marcaTiempoDate) {
    marcaTiempoDate = millis();
  }
 
  // Comprobar is hay que actualizar temperatura
  if (millis() - marcaTiempoDate >= tiempoRefreshDate)
  {
    // Actualizar variables de tiempo
    millisToTiempo(millis());
    // Componer cadena con la información del tiempo formateada
    sprintf(cadenaTiempo, "%02d:%02d:%02d:%02d", dias, horas, minutos, segundos);
    // Marca de tiempo
    marcaTiempoDate = millis();
  }
 
  // Limpiar buffer pantalla
  display.clearDisplay();
  // Dibujar línea horizontal
  display.drawLine(0, 18, display.width(), 18, SSD1306_WHITE);
 
  // Dibujar texto tiempo
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println(cadenaTiempo);
 
  // Enviar a pantalla
  display.display();
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Translate »