Escribiendo texto
Este programa para el IDE de Arduino permite escribir un texto en la pantalla.
#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128 // Anchura en pixels de la pantalla OLED#define SCREEN_HEIGHT 64 // Altura en pixels de la pantalla OLED// Creación de un objeto SSD1306 display conectado por I2C (pines SDA, SCL)Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);void setup() {Serial.begin(115200);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // dirección 0x3C en I2CSerial.println(F("SSD1306 conexión fallida"));for(;;);}delay(2000);display.clearDisplay();//Tamaño de letradisplay.setTextSize(1);display.setTextColor(WHITE);display.setCursor(0, 10);// Texto para mostrar en la pantalladisplay.println("Hola Mundo!");display.display();}void loop() {}
Conocer la dirección de la pantalla en el bus I2C
Con el siguiente programa, a través de la Consola del puerto serie podemos conocer cual es la dirección de los elementos que tengamos conectados en el bus I2C, como la pantalla OLED.
#include <Wire.h>void setup() {Wire.begin();Serial.begin(115200);Serial.println("\nI2C Scanner");}void loop() {byte error, address;int nDevices;Serial.println("Scanning...");nDevices = 0;for(address = 1; address < 127; address++ ) {Wire.beginTransmission(address);error = Wire.endTransmission();if (error == 0) {Serial.print("I2C device found at address 0x");if (address<16) {Serial.print("0");}Serial.print(address,HEX);Serial.println(" !");nDevices++;}else if (error==4) {Serial.print("Unknow error at address 0x");if (address<16) {Serial.print("0");}Serial.println(address,HEX);}}if (nDevices == 0) {Serial.println("No I2C devices found\n");}else {Serial.println("done\n");}delay(5000);}
Uso de otras fuentes: pantalla OLED
La biblioteca Adafruit GFX permite usar fuentes alternativas además de las integradas. Permite elegir entre Serif, Sans y Mono. Cada fuente está disponible en negrita, cursiva y en diferentes tamaños.
Los tamaños se establecen según la fuente real. Por lo tanto, setTextSize() no funciona con estas fuentes. Están disponibles en tamaños de 9, 12, 18 y 24 puntos y también contienen caracteres de 7 bits (códigos ASCII) (descritos como 7b en el nombre de la fuente).
Se puede elegir entre la siguiente selección de fuentes:
FreeMono12pt7b.h FreeSansBoldOblique12pt7b.h
FreeMono18pt7b.h FreeSansBoldOblique18pt7b.h
FreeMono24pt7b.h FreeSansBoldOblique24pt7b.h
FreeMono9pt7b.h FreeSansBoldOblique9pt7b.h
FreeMonoBold12pt7b.h FreeSansOblique12pt7b.h
FreeMonoBold18pt7b.h FreeSansOblique18pt7b.h
FreeMonoBold24pt7b.h FreeSansOblique24pt7b.h
FreeMonoBold9pt7b.h FreeSansOblique9pt7b.h
FreeMonoBoldOblique12pt7b.h FreeSerif12pt7b.h
FreeMonoBoldOblique18pt7b.h FreeSerif18pt7b.h
FreeMonoBoldOblique24pt7b.h FreeSerif24pt7b.h
FreeMonoBoldOblique9pt7b.h FreeSerif9pt7b.h
FreeMonoOblique12pt7b.h FreeSerifBold12pt7b.h
FreeMonoOblique18pt7b.h FreeSerifBold18pt7b.h
FreeMonoOblique24pt7b.h FreeSerifBold24pt7b.h
FreeMonoOblique9pt7b.h FreeSerifBold9pt7b.h
FreeSans12pt7b.h FreeSerifBoldItalic12pt7b.h
FreeSans18pt7b.h FreeSerifBoldItalic18pt7b.h
FreeSans24pt7b.h FreeSerifBoldItalic24pt7b.h
FreeSans9pt7b.h FreeSerifBoldItalic9pt7b.h
FreeSansBold12pt7b.h FreeSerifItalic12pt7b.h
FreeSansBold18pt7b.h FreeSerifItalic18pt7b.h
FreeSansBold24pt7b.h FreeSerifItalic24pt7b.h
FreeSansBold9pt7b.h FreeSerifItalic9pt7b.h
Un ejemplo de programa que utiliza otras fuentes de texto es el siguiente.
#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#include <Fonts/FreeMonoOblique18pt7b.h>#define SCREEN_WIDTH 128 // Anchura en pixeles de la pantalla OLED#define SCREEN_HEIGHT 64 // Altura en pixeles de la pantalla OLED// Creación de un objeto SSD1306 display conectado por I2C (pines SDA, SCL)Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);void setup() {Serial.begin(115200);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {Serial.println("Ha fallado la conexión con SSD1306");for(;;);}delay(2000);display.setFont(&FreeMonoOblique18pt7b);display.clearDisplay();display.setTextSize(1);display.setTextColor(WHITE);display.setCursor(0,20);display.println("Hola mundo!");display.display();delay(2000);}void loop() {}
Texto deslizante
Podemos conseguir que un texto largo se vaya desplazando por la pantalla con un programa similar al que se muestra a continuación.
#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>Adafruit_SSD1306 display(4);char mensaje[]="Bienvenidos a bordo de este barco tan bonito";int x, minX;void setup(){Serial.begin(9600);display.begin(SSD1306_SWITCHCAPVCC, 0x3C);display.setTextSize(2);display.setTextColor(WHITE);display.setTextWrap(false);x = display.width();minX = -12 * strlen(mensaje); // 12 = 6 pixels/caracter * tamaño de texto 2}void loop(){display.clearDisplay();display.setTextSize(2);display.setCursor(x,0);display.print(mensaje);display.display();x=x-8; // Velocidad de desplazamientoif(x < minX) x= display.width();}
Texto deslizante hacia arriba
El siguiente programa desplaza el texto hacia arriba sucesivamente. Solamente puede desplazar la cantidad de texto que le cabe en la pantalla.
#include <SPI.h>#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128#define SCREEN_HEIGHT 64#define OLED_RESET -1Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);const char* texto = "Este es un ejemplo de texto largo.";int yPos = SCREEN_HEIGHT; // Inicia fuera de la pantallaint velocidad = 2; // Ajusta la velocidad de desplazamientovoid setup() {Serial.begin(115200);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Dirección I2C por defectoSerial.println(F("SSD1306 allocation failed"));for(;;); // No continuar}delay(2000);display.clearDisplay();display.setTextColor(WHITE);display.setTextSize(2);}void loop() {display.clearDisplay();display.setCursor(0, yPos);display.print(texto);display.display();yPos -= velocidad; // Mueve el texto hacia arribaif (yPos + 12 < 0) { // 8 es el alto del texto de tamaño 1, ajustar si es diferenteyPos = SCREEN_HEIGHT; // Reinicia la posición al llegar al borde inferior}delay(50); // Ajusta la velocidad de desplazamiento}
Otro programa para textos deslizantes
Con el siguiente programa podemos conseguir que el texto se desplace hacia la derecha o hacia la izquierda.
#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128 // OLED display width, in pixels#define SCREEN_HEIGHT 64 // OLED display height, in pixels// Creación de un objeto SSD1306 display conectado por I2C (pines SDA, SCL)Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);void setup() {Serial.begin(115200);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { //Dirección para el puerto I2C
Serial.println(F("Ha fallado la comunicación con SSD1306"));for(;;);}delay(2000);display.clearDisplay();display.setTextSize(1);display.setTextColor(WHITE);display.setCursor(0, 0);// Display static textdisplay.println("Buenos dias");display.display();delay(100);}void loop() {// Deslizándose a derecha e izquierdadisplay.startscrollright(0x00, 0x0F);delay(2000);display.stopscroll();delay(1000);display.startscrollleft(0x00, 0x0F);delay(2000);display.stopscroll();delay(1000);display.startscrolldiagright(0x00, 0x07);delay(2000);display.startscrolldiagleft(0x00, 0x07);delay(2000);display.stopscroll();delay(1000);}
Dibujando figuras geométricas
Este programa dibuja líneas, rectángulos, círculos y triángulos, rellenos o no,
#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128#define SCREEN_HEIGHT 64// Creamos un objeto SSD1306 display conectado por I2C (Pines SDA, SCL)Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);void setup() {Serial.begin(115200);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {Serial.println(F("Ha fallado la conexión con SSD1306"));for(;;);}delay(2000); // Pausa de dos segundos// Limpieza del bufferdisplay.clearDisplay();// Dibujando un solo pixel en blancodisplay.drawPixel(64, 32, WHITE);display.display();delay(3000);// Dibujando una líneadisplay.clearDisplay();display.drawLine(0, 0, 127, 20, WHITE);display.display();delay(3000);// Dibujando un rectángulodisplay.clearDisplay();display.drawRect(30, 10, 50, 30, WHITE);display.display();delay(3000);// Rellenando el rectángulodisplay.fillRect(30, 10, 50, 30, WHITE);display.display();delay(3000);// Dibujando un rectángulo con las esquinas redondeadasdisplay.clearDisplay();display.drawRoundRect(10, 10, 30, 50, 2, WHITE);display.display();delay(3000);// Rellenando el rectángulo anteriordisplay.clearDisplay();display.fillRoundRect(10, 10, 30, 50, 2, WHITE);display.display();delay(3000);// Dibujando un círculodisplay.clearDisplay();display.drawCircle(64, 32, 10, WHITE);display.display();delay(3000);// Rellenando el círculodisplay.fillCircle(64, 32, 10, WHITE);display.display();delay(3000);// Dibujando un triángulodisplay.clearDisplay();display.drawTriangle(10, 10, 55, 20, 5, 40, WHITE);display.display();delay(3000);// Rellenando el triángulodisplay.fillTriangle(10, 10, 55, 20, 5, 40, WHITE);display.display();delay(3000);// Invirtiendo (negro/blanco) los pixeles de la pantalla y volviendo atrás el efectoidisplay.invertDisplay(true);delay(3000);display.invertDisplay(false);delay(3000);}void loop() {}
Bitmap
Estas librerías permiten definir un mapa de bits para representar de una sola vez toda una imagen de 128 x 64 puntos. Esta información se guarda previamente en una matriz (static const unsigned char PROGMEM image_data_Saraarray[]).
Para realizar fácilmente la conversión de una imagen cualquiera a mapa de bits podemos utilizar el espacio web LCD Bitmap Converter Online.
Primeramente hemos de cargar una imagen y he escogido esta:
Debajo aparece el código correspondiente de este bitmap.
Este código se ha de copiar y colocar como contenido de la matriz (static const unsigned char PROGMEM image_data_Saraarray[]).
Una vez realizado todo el proceso, el siguiente programa muestra en la pantalla el anagrama de la empresa de vehículos Barreiros.
#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128#define SCREEN_HEIGHT 64Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);static const unsigned char PROGMEM image_data_Saraarray[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xF8, 0xE7, 0xF0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xE0,0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x07, 0x80, 0xE0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x3C,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x1E, 0x00, 0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0xE0, 0x1E, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x3C, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x0F, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xE0,0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x0F,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x3C, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0xE0, 0x0E, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x1E, 0x00, 0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x3C, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,0x80, 0xE0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xE0, 0xF8, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8,0xE7, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xE0,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x03, 0xF0, 0xE3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xE0, 0xF8, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x0F, 0x80, 0xE0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x3C, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E,0x00, 0xE0, 0x1E, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0xE0, 0x0E, 0x03, 0xFE, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00,0xE0, 0x0F, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x0F, 0x3F, 0x0F, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xE0,0x07, 0x3C, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x3C, 0xE7, 0x80, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0xE0, 0x07,0x19, 0xC3, 0xC0, 0x00, 0x07, 0x0E, 0x00, 0x00, 0x7D, 0xE0, 0x00,0x00, 0x78, 0x00, 0xE0, 0x07, 0x03, 0xC3, 0xC0, 0x00, 0x0F, 0x1F,0x00, 0x00, 0x7B, 0xE0, 0x00, 0x00, 0x38, 0x01, 0xE0, 0x07, 0x07,0x9F, 0x80, 0x00, 0x1E, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x1C,0x38, 0x01, 0xE0, 0x0F, 0x07, 0x3E, 0x00, 0x79, 0x0E, 0x1E, 0x07,0xE1, 0x83, 0xE0, 0xF8, 0x70, 0x3C, 0x01, 0xE0, 0x0F, 0x0F, 0xF8,0x01, 0xF7, 0x8F, 0xAF, 0x1F, 0x27, 0xC5, 0xE3, 0xE6, 0x70, 0x3C,0x01, 0xE0, 0x0F, 0x0E, 0x78, 0x07, 0x8F, 0x1F, 0x5E, 0x3C, 0x4F,0x93, 0xEF, 0x88, 0x70, 0x1E, 0x01, 0xE0, 0x1E, 0x1C, 0x3C, 0x0F,0x1E, 0x3E, 0xBE, 0x79, 0x1F, 0x27, 0xDF, 0x10, 0xF0, 0x1E, 0x01,0xE0, 0x3E, 0x3C, 0x3E, 0x1E, 0x3D, 0x7D, 0x78, 0xF8, 0x3E, 0x9F,0x3E, 0x20, 0xF0, 0x0F, 0x01, 0xE0, 0x3C, 0x38, 0x1F, 0x3C, 0x78,0x7A, 0xF9, 0xF0, 0x7C, 0x3E, 0x3C, 0x40, 0xF0, 0x07, 0x81, 0xE0,0x7C, 0x79, 0xCF, 0x3D, 0xFD, 0xF5, 0xE3, 0xC1, 0xFC, 0x7C, 0xF9,0x3C, 0xE0, 0x07, 0xE1, 0xE1, 0xF0, 0x73, 0xFE, 0x3D, 0xF9, 0xF9,0xF9, 0xE1, 0xF8, 0x7C, 0x3C, 0x3F, 0xC0, 0x03, 0xF9, 0xE7, 0xE0,0xF1, 0xFC, 0x38, 0xE0, 0x60, 0x60, 0x60, 0x20, 0x10, 0x00, 0x0F,0x00, 0x00, 0xFF, 0xFF, 0xC1, 0xF0, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0x81, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,0x00, 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};void setup() {Serial.begin(115200);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {Serial.println(F("SSD1306 conexión fallida"));for(;;);}delay(2000); // Pausa de dos segundos// Limpiando el buffer.display.clearDisplay();// Dibujando el bitmap en la pantalladisplay.drawBitmap(0, 0, image_data_Saraarray, 128, 64, 1);display.invertDisplay(true);display.display();}void loop() {}
Animaciones
En el siguiente video se puede ver como programar el conocido como Juego de la vida para ser representado en una pantalla OLED.
Trabajando con la librería SSD1306Ascii.h
Dado que la librería Adafruit_SSD1306.h a veces resulta incompatible con la librería SD.h que controla las tarjetas de memoria MicroSD, vamos a utilizar ahora otra librería para controlar la pantalla OLED, se trata de la librería SSD1306Ascii.h.
El siguiente programa escribe en diferentes líneas con dos tamaños de letra.
#include "SSD1306Ascii.h"#include "SSD1306AsciiAvrI2c.h"#define I2C_ADDRESS 0x3C#define RST_PIN -1//Creación de un objeto de tipo SSD1306AsciiAvrI2c llamado oledSSD1306AsciiAvrI2c oled;void setup() {#if RST_PIN >= 0oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);#else // RST_PIN >= 0oled.begin(&Adafruit128x64, I2C_ADDRESS);#endif // RST_PIN >= 0oled.setFont(Adafruit5x7);uint32_t m = micros();oled.clear();oled.println("Hola Mundo!");oled.println("Una larga linea");oled.println();oled.set2X();//El tamaño de la letra se hará el dobleoled.println("2X demo");oled.set1X();//Se vuelve al tamaño de letra originaloled.print("\nmicros: ");oled.print(micros() - m);}void loop() {}
#include <Adafruit_SSD1306.h> // incluye la libreria de adafruit para el driver del display OLEDAdafruit_SSD1306 display(128, 64); // declara la resolucion del displayint cont=0;int tam=0;void setup(){delay(100); // se da una espera de 100ms para que el display inicie correctamentedisplay.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicia la comunicacion I2C con el display que tiene la direccion 0x3Cdisplay.setRotation(0); // se escoje la orientacion del display puede ser 0, 1, 2 o 3display.setTextColor(WHITE); // se le dice a la pantalla que el texto que se va a desplegar es en color blanco//esto solo es visible al iniciar el programa:display.clearDisplay(); // limpia el buffer del displaydisplay.setTextSize(2); // cambia tamaño de letra a 2display.setCursor(0, 0); //(x,y) pone el cursor en el origen del displaydisplay.println("Iniciando"); //escribe en buffer del displaydisplay.display(); // muestra la informacion del buffer en la pantalladelay(2000); //pausa de 2 segundos o 2000 milisegundos}void loop(){// primera pantalla de presentaciondisplay.clearDisplay();display.setTextSize(1); // selecciona el tamaño de la letra puede ser u entre 1 y 10display.setCursor(0, 0); // (x,y) pone el cursor en el origen del displaydisplay.println("VARIAS LINEAS");display.setCursor(0, 20); // (x,y) pone el cursor mas o menos en la mitad horizontal del displaydisplay.println("En mayuscula y minuscula");display.setCursor(30, 50); //(x,y)display.println("Con sangria");display.display();delay(5000); //pausa de 5 segundos o 5000 milisegundos// segundo pantallazo, bajamos el brillo del displaydisplay.clearDisplay();display.setTextSize(2); // cambia tamaño de letra a 2display.setCursor(0, 0);display.println("Escala de letra 2. Probando texto largo y desborde"); //Por defecto el texto largo se desborda y continua en la siguiente lineadisplay.display();delay(5000);// tercer pantallazodisplay.clearDisplay();display.setTextWrap(false); // desactiva el desborde de textodisplay.setTextSize(2);display.setCursor(0, 0);display.println("Desborde desactivado con la instruccion display.setTextWrap(false) ...");display.display();delay(5000);// cuarto pantallazodisplay.clearDisplay();display.setTextWrap(true); // activa el desborde de textodisplay.setTextSize(1);display.setCursor(0, 30);display.println("Vamos a desplegar una variable entera en diferentes escalas del 1 al 9 ");display.display();delay(7000);// pantalla final varia con el incremento de las variables de los ciclos "for"for(int tam = 1; tam < 10; tam++){ // creamos un ciclo con la variable tam (tamaño) que va desde 1 hasta 9display.setTextSize(tam); // usa la variable tam para cambiar el tamaño del texto en cada ciclofor(int cont=0; cont<10; cont++){ //creamos un ciclo con la variable cont (contador) que va de 0 a 9 y se muestra en la pantalladisplay.clearDisplay();display.setCursor(0, 0);display.println(cont); // escribe el valor de la variable en el buferdisplay.display();delay(100);}}} // Final de la funcion principal, salta al inicio del "void loop"
Escribiendo en columnas
Este programa escribe en columnas generando unos valores aleatorios que introduce en la tabla.
// Form with proportional font.#include <Wire.h>#include "SSD1306Ascii.h"#include "SSD1306AsciiWire.h"// 0X3C+SA0 - 0x3C or 0x3D#define I2C_ADDRESS 0x3C// Define proper RST_PIN if required.#define RST_PIN -1SSD1306AsciiWire oled;uint8_t col0 = 0; // First value columnuint8_t col1 = 0; // Last value column.uint8_t rows; // Rows per line.//------------------------------------------------------------------------------void setup() {const char* label[] = {"Voltage:", "Load:", "Runtime:"};const char* units[] = {"volts", "watts", "mins"};Wire.begin();Wire.setClock(400000L);#if RST_PIN >= 0oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);#else // RST_PIN >= 0oled.begin(&Adafruit128x64, I2C_ADDRESS);#endif // RST_PIN >= 0oled.setFont(Callibri15);// oled.setFont(Arial14);// oled.setFont(Callibri11_bold);// oled.setFont(TimesNewRoman13);// Increase space between letters.oled.setLetterSpacing(2);oled.clear();// Setup form and find longest label.for (uint8_t i = 0; i < 3; i++) {oled.println(label[i]);uint8_t w = oled.strWidth(label[i]);col0 = col0 < w ? w : col0;}// Three pixels after label.col0 += 3;// Allow two or more pixels after value.col1 = col0 + oled.strWidth("99.9") + 2;// Line height in rows.rows = oled.fontRows();// Print units.for ( uint8_t i = 0; i < 3; i++) {oled.setCursor(col1 + 1, i*rows);oled.print(units[i]);}delay(3000);}//------------------------------------------------------------------------------void clearValue(uint8_t row) {oled.clear(col0, col1, row, row + rows - 1);}//------------------------------------------------------------------------------void loop() {// Fake system model.double volts = 0.1*random(110, 130);double watts = 0.1*random(200, 500);// 100 Wh battery.int run = 100*60/(int)watts;clearValue(0);oled.print(volts, 1);clearValue(rows);oled.print(watts, 1);clearValue(2*rows);oled.print(run);delay(1000);}
Otro ejemplo de escritura
// benötigte Bibliotheken einbinden
#include "SSD1306Ascii.h"#include "SSD1306AsciiWire.h"// Adresse I2C#define I2C_ADDRESS 0x3C// Name des OLED festlegenSSD1306AsciiWire oled;void setup(){// OLED startenWire.begin();Wire.setClock(400000L);oled.begin(&Adafruit128x64, I2C_ADDRESS);oled.setFont(TimesNewRoman16);// Scrollen einschaltenoled.println("Einmaleins der 10");delay(1000);oled.clear();// Scrollen einschaltenoled.setScrollMode(SCROLL_MODE_AUTO);for (int i = 1; i <= 10; i++){oled.println(String(i) + " * 10 = " + String(i * 10));/*nach jeweils 3 Zeilen, wenn i geteilt durch 3ohne Rest aufgeht (i % 3 == 0) -> Bildschirm löschen*/if (i % 3 == 0){delay(1000);oled.clear();}delay(500);}delay(2000);oled.clear();// Scrollen ausschaltenoled.setScrollMode(SCROLL_MODE_OFF);// Beispiele für Schriftartenoled.setFont(X11fixed7x14);oled.println("X11fixed7x14");oled.setFont(utf8font10x16);oled.println("utf8font10x16");oled.setFont(Callibri11);oled.println("Callibri11");oled.setFont(Arial14);oled.println("Arial14");delay(2000);oled.clear();// Bildschirm um 180° drehenoled.setFont(Callibri11);oled.displayRemap(true);oled.print("Bildschirm gedreht");delay(2000);oled.clear();// Cursor setzenoled.displayRemap(false);oled.setCursor(20, 5);oled.print("Spalte 20, Zeile 5");delay(2000);oled.clear();// Bildschirmfarben tauschenoled.invertDisplay(true);oled.setFont(Arial14);oled.print("Farben getauscht");delay(2000);oled.clear();// Abstand der Buchstabenoled.invertDisplay(false);oled.setFont(TimesNewRoman13);oled.setLetterSpacing(2);oled.print("Abstand Buchstaben");}void loop(){// nichts zu tun, Programm läuft nur einmal}
Bitmap con el logo de BMW
Este programa muestra el logo de BMW que se desplaza continuamente desde la derecha hacia el centro de la pantalla.
#include <Wire.h>#include "SSD1306Ascii.h"#include "SSD1306AsciiWire.h"// 0X3C+SA0 - 0x3C o 0x3D#define I2C_ADDRESS 0x3C// Es necesario definir el RST_PIN#define RST_PIN -1const byte Logo[] PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,0x40, 0x60, 0x20, 0x30, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0xf4, 0x74, 0xc4, 0x04,0x04, 0xe4, 0x74, 0xf4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x30, 0x20, 0x60, 0x40,0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x10, 0x48, 0xe4, 0x92, 0x89, 0xc9, 0x78,0x20, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x27, 0x20, 0x21, 0x27,0xa7, 0xe1, 0xe0, 0xa7, 0xa0, 0xe0, 0xc0, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0,0x98, 0x4d, 0x41, 0xe2, 0x64, 0x08, 0x10, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0xc0, 0x38, 0x0e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0xc4,0x32, 0x19, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfb, 0xfe, 0xec, 0xd9, 0xb1,0xc0, 0x0c, 0x0f, 0x05, 0x06, 0x02, 0x03, 0x01, 0x00, 0x03, 0x0e, 0x38, 0xc0, 0x00, 0x00, 0x00,0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xfc, 0x67, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00,0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe6, 0x7f,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00,a 0x00, 0x00, 0x00, 0x03, 0x1c, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,0x0d, 0x1b, 0x37, 0x6f, 0xdf, 0xbf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, 0x0c,0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x70, 0x1c, 0x03, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x07, 0x05, 0x05, 0x07, 0x07, 0x05,0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,0x02, 0x06, 0x04, 0x0c, 0x08, 0x08, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x08, 0x08, 0x0c, 0x04, 0x06, 0x02,0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };//Crea un objeto de tipo SSD1306AsciiWire y nombre oledSSD1306AsciiWire oled;void setup() {Wire.begin();Wire.setClock(400000L);#if RST_PIN >= 0oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);#else // RST_PIN >= 0oled.begin(&Adafruit128x64, I2C_ADDRESS);#endif // RST_PIN >= 0}void loop() {for( byte c = 127; c > 32; c-- ){byte r = 0; // Start row - Modify as neededint a = 0; // Position in array - Don't changefor (byte b = 0; b < 8; b++) {oled.setCursor (c,(r+b));for (byte i = 0; i < 64; i++) {oled.ssd1306WriteRam(pgm_read_byte(&Logo[a]));a++;}}}}
Prueba
#include <Wire.h>#include "SSD1306Ascii.h"#include "SSD1306AsciiWire.h"// 0X3C+SA0 - 0x3C o 0x3D#define I2C_ADDRESS 0x3Cint a = 0; // Position in array - Don't change// Es necesario definir el RST_PIN#define RST_PIN -1const byte Logo[] PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xF8, 0xE7, 0xF0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xE0,0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x07, 0x80, 0xE0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x3C,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x1E, 0x00, 0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0xE0, 0x1E, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x3C, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x0F, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xE0,0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x0F,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x3C, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0xE0, 0x0E, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x1E, 0x00, 0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x3C, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,0x80, 0xE0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xE0, 0xF8, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8,0xE7, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xE0,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x03, 0xF0, 0xE3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xE0, 0xF8, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x0F, 0x80, 0xE0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x3C, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E,0x00, 0xE0, 0x1E, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0xE0, 0x0E, 0x03, 0xFE, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00,0xE0, 0x0F, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x0F, 0x3F, 0x0F, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xE0,0x07, 0x3C, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x3C, 0xE7, 0x80, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0xE0, 0x07,0x19, 0xC3, 0xC0, 0x00, 0x07, 0x0E, 0x00, 0x00, 0x7D, 0xE0, 0x00,0x00, 0x78, 0x00, 0xE0, 0x07, 0x03, 0xC3, 0xC0, 0x00, 0x0F, 0x1F,0x00, 0x00, 0x7B, 0xE0, 0x00, 0x00, 0x38, 0x01, 0xE0, 0x07, 0x07,0x9F, 0x80, 0x00, 0x1E, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x1C,0x38, 0x01, 0xE0, 0x0F, 0x07, 0x3E, 0x00, 0x79, 0x0E, 0x1E, 0x07,0xE1, 0x83, 0xE0, 0xF8, 0x70, 0x3C, 0x01, 0xE0, 0x0F, 0x0F, 0xF8,0x01, 0xF7, 0x8F, 0xAF, 0x1F, 0x27, 0xC5, 0xE3, 0xE6, 0x70, 0x3C,0x01, 0xE0, 0x0F, 0x0E, 0x78, 0x07, 0x8F, 0x1F, 0x5E, 0x3C, 0x4F,0x93, 0xEF, 0x88, 0x70, 0x1E, 0x01, 0xE0, 0x1E, 0x1C, 0x3C, 0x0F,0x1E, 0x3E, 0xBE, 0x79, 0x1F, 0x27, 0xDF, 0x10, 0xF0, 0x1E, 0x01,0xE0, 0x3E, 0x3C, 0x3E, 0x1E, 0x3D, 0x7D, 0x78, 0xF8, 0x3E, 0x9F,0x3E, 0x20, 0xF0, 0x0F, 0x01, 0xE0, 0x3C, 0x38, 0x1F, 0x3C, 0x78,0x7A, 0xF9, 0xF0, 0x7C, 0x3E, 0x3C, 0x40, 0xF0, 0x07, 0x81, 0xE0,0x7C, 0x79, 0xCF, 0x3D, 0xFD, 0xF5, 0xE3, 0xC1, 0xFC, 0x7C, 0xF9,0x3C, 0xE0, 0x07, 0xE1, 0xE1, 0xF0, 0x73, 0xFE, 0x3D, 0xF9, 0xF9,0xF9, 0xE1, 0xF8, 0x7C, 0x3C, 0x3F, 0xC0, 0x03, 0xF9, 0xE7, 0xE0,0xF1, 0xFC, 0x38, 0xE0, 0x60, 0x60, 0x60, 0x20, 0x10, 0x00, 0x0F,0x00, 0x00, 0xFF, 0xFF, 0xC1, 0xF0, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0x81, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,0x00, 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};//Crea un objeto de tipo SSD1306AsciiWire y nombre oledSSD1306AsciiWire oled;void setup() {Wire.begin();Wire.setClock(400000L);#if RST_PIN >= 0oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);#else // RST_PIN >= 0oled.begin(&Adafruit128x64, I2C_ADDRESS);#endif // RST_PIN >= 0}void loop() {for( byte c = 128; c > 0; c-- ){//byte r = 0; // Start row - Modify as needed//int a = 0; // Position in array - Don't change//for (byte b = 0; b < 8; b++) {for (byte i = 0; i < 64; i++) {oled.setCursor (c,i);oled.ssd1306WriteRam(pgm_read_byte(&Logo[a]));a++;}}}//}



No hay comentarios:
Publicar un comentario