PCBX
Published

How to Display Dynamic Emoji Bitmaps on the SSD1306

Unlock vibrant visuals on your SSD1306! Learn to display dynamic emoji bitmaps effortlessly and enhance your projects with style.

BeginnerProtip217

Things used in this project

Story

Read more

Schematics

emoji_face_aswnQIPJVo.gif

Code

Untitled file

Arduino
#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
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Bitmap data for each image, each array represents one image
// Please fill your bitmap data into these arrays
const unsigned char bitmap_nono[] PROGMEM = { /* Bitmap data */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,0x0E,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x0F,0x80,0x00,0x00,
0x00,0x00,0x7F,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0xFE,0x00,0x07,0xF0,0x00,0x00,
0x00,0x01,0xF8,0x00,0x01,0xF8,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0xFC,0x00,0x00,
0x00,0x0F,0xC0,0x00,0x00,0x7F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,
0x00,0x1E,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x0C,0x00,0x00,0x00,0x03,0x00,0x00,
0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,
0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,
0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,0x06,0x00,0x1C,0x00,0x07,0x80,0x0C,0x00,
0x07,0xC0,0x1C,0x00,0x07,0x80,0x3E,0x00,0x07,0xF0,0x00,0x00,0x00,0x01,0xFE,0x00,
0x07,0xFE,0x00,0x00,0x00,0x07,0xFE,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,
0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFE,0x00,0x00,
0x00,0x03,0xC0,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,
0x00,0x03,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,
0x0F,0xFC,0x00,0x00,0x00,0x07,0xFE,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0xFE,0x00,
0x07,0x80,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,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,
 };
const unsigned char bitmap_unhappy[] PROGMEM = { /* Bitmap data */
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,0x0F,0xFF,0x80,0x1F,0xFF,0x00,0x00,
0x00,0x1F,0xFF,0x80,0x1F,0xFF,0x00,0x00,0x00,0x1F,0xFF,0x80,0x1F,0xFF,0x00,0x00,
0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,
0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,
0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,
0x00,0x00,0x0E,0x00,0x00,0x1E,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,0x1F,0xFF,0xFF,0x80,0x00,0x00,
0x00,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x1F,0xFF,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 };
const unsigned char bitmap_angry_demon[] PROGMEM = { /* Bitmap data */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,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,
0x00,0x00,0x07,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,
0x00,0x00,0x3F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xE0,0x00,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xF8,0x00,0x00,
0x00,0x03,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x07,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x07,0xE0,0x1F,0x80,0x7E,0x00,0x00,
0x00,0x0F,0x80,0x06,0x00,0x1F,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,
0x00,0x0E,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x03,0x00,0x00,
0x00,0x1C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x00,0x00,0x03,0x80,0x00,
0x00,0x7C,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,0xFC,0x00,0x00,0x00,0x03,0xF0,0x00,
0x01,0xE0,0x0C,0x00,0x03,0x00,0x78,0x00,0x03,0xC0,0x1C,0x00,0x03,0x00,0x3C,0x00,
0x03,0x80,0x0C,0x00,0x03,0x00,0x1C,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,
0x03,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,0x03,0x80,0x00,0x79,0xE0,0x00,0x1C,0x00,
0x03,0x80,0x00,0xFF,0xF0,0x00,0x1C,0x00,0x01,0xE0,0x01,0xFF,0xF8,0x00,0x78,0x00,
0x01,0xF8,0x03,0xC7,0xBC,0x01,0xF8,0x00,0x00,0xF8,0x07,0x83,0x9E,0x01,0xF0,0x00,
0x00,0x38,0x0F,0x01,0xCF,0x01,0xC0,0x00,0x00,0x00,0x1E,0x01,0xC7,0x80,0x00,0x00,
0x00,0x00,0x3C,0x01,0xC3,0xC0,0x00,0x00,0x00,0x00,0x78,0x03,0xC1,0xE0,0x00,0x00,
0x00,0x00,0xF0,0x07,0x80,0xF0,0x00,0x00,0x00,0x01,0xE0,0x0F,0x00,0x78,0x00,0x00,
0x00,0x03,0xC0,0x1F,0x80,0x3C,0x00,0x00,0x00,0x07,0x80,0x3F,0xC0,0x1E,0x00,0x00,
0x00,0x1F,0x00,0x79,0xE0,0x0F,0x80,0x00,0x00,0x0E,0x00,0xF0,0xF0,0x07,0x00,0x00,
0x00,0x04,0x01,0xE0,0x78,0x02,0x00,0x00,0x00,0x00,0x03,0xC0,0x3C,0x00,0x00,0x00,
0x00,0x00,0x07,0x80,0x1E,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x0F,0x00,0x00,0x00,
0x00,0x00,0x1E,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x3C,0x00,0x03,0xC0,0x00,0x00,
0x00,0x00,0x18,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x08,0x00,0x01,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,
 };
//const unsigned char bitmap_ogre[] PROGMEM = { /* Bitmap data */ };
//const unsigned char bitmap_cold[] PROGMEM = { /* Bitmap data */ };

void setup() {
  Serial.begin(9600);
  // Initialize OLED display
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    while(true); // If initialization fails, enter an infinite loop
  }
  display.clearDisplay();
  display.display();
}

void loop() {
  displayBitmap(bitmap_nono, SCREEN_WIDTH, SCREEN_HEIGHT);
  delay(200);
  displayBitmap(bitmap_unhappy, SCREEN_WIDTH, SCREEN_HEIGHT);
  delay(200);
   //Uncomment the following lines to display additional images
   displayBitmap(bitmap_angry_demon, SCREEN_WIDTH, SCREEN_HEIGHT);
  delay(200);
  // displayBitmap(bitmap_ogre, SCREEN_WIDTH, SCREEN_HEIGHT);
  // delay(2000);
  // displayBitmap(bitmap_cold, SCREEN_WIDTH, SCREEN_HEIGHT);
  // delay(2000);
}

void displayBitmap(const unsigned char *bitmap, uint16_t w, uint16_t h) {
  uint8_t bytes = (w + 7) / 8 * h; // Calculate the number of bytes for the bitmap data
  display.clearDisplay();
  display.drawBitmap(0, 0, bitmap, w, h, SSD1306_WHITE);
  display.display();
}

Credits

PCBX
33 projects • 11 followers
Customer Success: Your one-stop solution for PCB and PCBA services, plus component sourcing. Enjoy FREE online simulation and EDA.
Contact

Comments

Please log in or sign up to comment.