Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici
  Enrere

Representació d'imatges fixes a la pantalla bicolor Midas

Es poden representar imatges, ja sigui ocupant tota la pantalla o només una part. Per fer-ho, tenim les funcions ssd1306_drawBitmap, ssd1306_drawXBitmap i gfx_drawMonoBitmap. Les imatges es defineixen amb vectors. En la funció ssd1306_drawXBitmap cada component del vector correspon a vuit píxels en horitzontal, on el bit més significatiu correspon al píxem de més a la dreta d'aquell tros d'imatge. A les altres dues funcions, en canvi, cada component correspon a un bloc vertical de vuit bits. En l'exemple següent representarem aquesta imatge de 16 ⨯ 16 píxels:

got

Fixem-nos en el primer vector. A la primera filera els vuit bits de més a l'esquerra estan apagats, per tant la primera component del vector tindrà tots els bits a zero. Dels següents vuit bits només n'hi ha dos d'activats, el 5 i el 6; per tant, la component del vector tindrà a 1 els bits de les posicions 4 i 5. Amb la directiva PROGMEM li diem que guardi la imatge a la memòria de programa per evitar omplir innecessàriament la memòria de dades.

A les dues primeres funcions volem posar la imatge a la posició 16 en vertical però indiquem un 2 perquè la funció treballa per paquets de vuit bits verticals i, per tant, li posem el valor desitjat dividit per 8. A la tercera funció, en canvi, cal indicar la posició en píxels.

#include "ssd1306.h"
const uint8_t got[] PROGMEM = {
  0b00000000, 0b00110000, // Fila 1
  0b00000000, 0b00011000, 
  0b00000000, 0b00001100, 
  0b00000000, 0b00000110, 
  0b11111100, 0b00001111, 
  0b10000100, 0b00001001, 
  0b11000100, 0b00001000, 
  0b01100100, 0b00001000,  // Fila 8
  0b00110100, 0b00001000, 
  0b11111100, 0b00001111, 
  0b11111100, 0b00001111, 
  0b11111100, 0b00001111, 
  0b11111100, 0b00001111, 
  0b11111000, 0b00000111, 
  0b11111000, 0b00000111, 
  0b11111000, 0b00000111  // Fila 16
};
const uint8_t got2[] PROGMEM = {
  0b00000000, 0b00000000, 0b11110000, 0b00010000,  // Part superior cols. 1 a 4 
  0b00010000, 0b10010000, 0b11010000, 0b01110000, 
  0b00110000, 0b00011000, 0b00011100, 0b11110110, 
  0b00000011, 0b00000001, 0b00000000, 0b00000000, 
  0b00000000, 0b00000000, 0b00011111, 0b11111110,  // Part inferior cols. 1 a 4 
  0b11111111, 0b11111111, 0b11111110, 0b11111110, 
  0b11111110, 0b11111110, 0b11111110, 0b00011111, 
  0b00000000, 0b00000000, 0b00000000, 0b00000000
};
void setup(){
  ssd1306_128x64_i2c_init();
  ssd1306_clearScreen();
  ssd1306_setFixedFont(ssd1306xled_font6x8);
  ssd1306_drawBitmap(40, 2, 16, 16, got2);
  ssd1306_drawXBitmap(80, 2, 16, 16, got);
  gfx_drawMonoBitmap(40, 40, 16, 16, got2);
  ssd1306_printFixed(0, 0, "Vols un refresc?", STYLE_NORMAL);
}
void loop(){
}

Una altra manera de mostrar imatges a la pantalla és amb la funció ssd1306_drawBuffer o bé amb la ssd1306_drawBufferFast. En aquest cas cada byte representa vuit píxels en vertical. Fixem-nos que els dos dibuixos de l'exemple es mostren a la mateixa alçada però en una de les funcions hem d'indicar la posició en píxels mentre que a l'altra s'indica en blocs.

vaixell

El vector que conté la imatge es pot modificar des del programa. Això no afectarà a les imatges que ja estiguin a la pantalla però sí a les que es presentin després.

#include "ssd1306.h"
uint8_t vaixell[] = {
  0b00100000,
  0b01100000,
  0b11100000,
  0b11111111,
  0b11100010,
  0b11100000,
  0b11100000,
  0b11100000,
  0b01100000,
  0b00100000
};
void setup(){
  ssd1306_128x64_i2c_init();
  ssd1306_fillScreen(0);
  ssd1306_setFixedFont(ssd1306xled_font6x8);
}
void loop(){
  ssd1306_drawBuffer(20, 3, 10, 8, vaixell);
  ssd1306_drawBufferFast(60, 24, 10, 8, vaixell);
  ssd1306_printFixed(0, 0, "Dibuixos", STYLE_NORMAL);
  delay(1000);
  ssd1306_clearScreen();  
}

Llista de les funcions

Funció Ús Paràmetres Comentaris
ssd1306_drawBitmap Mostra una imatge fixa a la pantalla Posició x
Posició y en múltiples de 8
Amplada
Alçada
Vector de la imatge
La imatge es guarda per blocs verticals de 8 píxels
El vector es guarda a la memòria de programa
ssd1306_drawXBitmap Mostra una imatge fixa a la pantalla Posició x
Posició y en múltiples de 8
Amplada
Alçada
Vector de la imatge
El vector guarda la imatge per fileres
El vector es guarda a la memòria de programa
gfx_drawMonoBitmap Mostra una imatge fixa a la pantalla Posició x
Posició y en múltiples de 8
Amplada
Alçada
Vector de la imatge
La imatge es guarda per blocs verticals de 8 píxels
El vector es guarda a la memòria de programa
ssd1306_drawBuffer Mostra una imatge fixa a la pantalla Posició x
Posició y en múltiples de 8
Amplada
Alçada
Vector de la imatge
El vector es guarda a la memòria de dades
ssd1306_drawBufferFast Mostra una imatge fixa a la pantalla Posició x
Posició y
Amplada
Alçada
Vector de la imatge
El vector es guarda a la memòria de dades

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.