En éste artículo veremos cómo realizar la programación del display 128×32 en Arduino. Se muestra el montaje del prototipo, las librerías que se necesitarán, el escaneo de puertos I2C, cómo imprimir pixeles, líneas y rectángulos, cómo mover un pixel dentro del display y cómo imprimir texto y números en el display.
Conecte GND (en el display) con GND (en Arduino)
Conecte VCC (en el display) con 3.3V (en Arduino). Si no funciona con 3.3, conectar con 5V.
Conecte SCL (en el display) con A5 (en Arduino)
Conecte SDA (en el display) con A4 (en Arduino)
En el IDE Arduino:
Clic en menú Herramientas -> Administrar Bibliotecas
Busque la librería 1306
Seleccione (e instale) la librería Adafruit SSD1306
Si solicita instalar Adafruit GFX, instálela.
Utilice el siguiente código para scanear el puerto I2C en el que está conectado su display.
Abra el monitor serial para ver y anotar el puerto. Por lo general el puerto es 0x3c.
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); while (!Serial); // Leonardo: wait for serial monitor Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the 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("Unknown 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); // wait 5 seconds for next scan }
En el monitor serial observará algo así:
El siguiente código inicializará su display y mostrará una pantalla de bienvenida con el logo de Adafruit.
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // Esto indica que nuestro display no tiene pin de reset Adafruit_SSD1306 display(-1); void setup() { // Inicializamos el display display.begin(SSD1306_SWITCHCAPVCC,0x3C); // Borramos el display display.clearDisplay(); // Mostramos la pantalla de bienvenida display.display(); } void loop() { // put your main code here, to run repeatedly: }
El siguiente código dibujará un pixel, una línea y dos rectángulos, uno de ellos con color de relleno.
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // Esto indica que nuestro display no tiene pin de reset Adafruit_SSD1306 display(-1); void setup() { // Inicializamos el display display.begin(SSD1306_SWITCHCAPVCC,0x3C); // Borramos el display display.clearDisplay(); // Dibujamos un pixel en la coordenada 10,10 display.drawPixel(10,10,WHITE); // Dibujamos una linea que va de 5,15 a 60,15 display.drawLine(10,15,60,15,WHITE); // Dibujamos un rectángulo en 10,20 de 20 de ancho y 10 de alto display.drawRect(10,20,20,10,WHITE); // Dibujamos un rectángulo lleno, en 40,20 de 20 de ancho y 10 de alto display.fillRect(40,20,20,10,WHITE); display.display(); } void loop() { // put your main code here, to run repeatedly: }
El display muestra lo que le indicamos.
El siguiente código dibuja un pixel en una coordenada x,y. Luego modifica el valor de x, se borra toda la pantalla y vuelve a dibujar el pixel en la nueva coordenada x,y.
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // Esto indica que nuestro display no tiene pin de reset Adafruit_SSD1306 display(-1); int i=1; int direccion=0; // 0 va hacia la derecha void setup() { // Inicializamos el display display.begin(SSD1306_SWITCHCAPVCC,0x3C); // Borramos el display display.clearDisplay(); display.display(); } void loop() { for (i=0; i<=127; i++){ display.clearDisplay(); display.drawPixel(i,16,WHITE); display.display(); } for (i=127; i>=1; i--){ display.clearDisplay(); display.drawPixel(i,16,WHITE); display.display(); } }
El siguiente código imprimer un “Hola, mundo” en el display. Imprime un valor numérico y un valor de texto en un tamaño de letra mayor.
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // Esto indica que nuestro display no tiene pin de reset Adafruit_SSD1306 display(-1); void setup() { // Inicializamos el display display.begin(SSD1306_SWITCHCAPVCC,0x3C); // Borramos el display display.clearDisplay(); display.display(); } void loop() { display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Hola, mundo"); display.setTextColor(BLACK, WHITE); display.println(3.1416); display.setTextSize(2); display.setTextColor(WHITE); display.println("Iniciar"); display.display(); }
El display mostrará lo siguiente:
Espero que éstos ejemplo que permitan iniciarte en la programación del display 128×32 en Arduino.