uint8_t framebuffer[32] = // 32 columns x 8 lines black or white pixels
{
0x00, 0xFF, 0x08, 0x08, 0x08, 0xFF, 0x00, 0xFF,
0x89, 0x89, 0x81, 0x81, 0x00, 0xFF, 0x80, 0x80,
0x80, 0x80, 0x00, 0xFF, 0x80, 0x80, 0x80, 0x80,
0x00, 0xFF, 0x81, 0x81, 0x81, 0xFF, 0x00, 0xBF,
};
enum color_t : uint8_t {black, white};
void setPixel(uint8_t c, uint8_t l, color_t color) { // 0 <= c < 32 and 0 <= l < 8
switch (color) {
case black: // write a 0 in the corresponding bit
bitSet(framebuffer[c], l); // https://www.arduino.cc/reference/tr/language/functions/bits-and-bytes/bitset/
break;
case white: // write a 1 in the corresponding bit
bitClear(framebuffer[c], l); // https://www.arduino.cc/reference/tr/language/functions/bits-and-bytes/bitclear/
break;
}
}
color_t readPixel(uint8_t c, uint8_t l) { // 0 <= c < 32 and 0 <= l < 8
return (bitRead(framebuffer[c], l) == 1) ? white : black;
}
void printScreen() {
Serial.println("------------------------------------");
for (uint8_t l = 0; l < 8; l++) {
Serial.print("| ");
for (uint8_t c = 0; c < 32; c++) {
Serial.write(readPixel(c, l) == white ? '*' : ' ');
}
Serial.println(" |");
}
Serial.println("-----------------------------------\n");
}
void setup() {
Serial.begin(115200);
printScreen(); // will show our initial Hello pattern
// remove the '!' at the end
for (uint8_t l = 0; l < 8; l++) setPixel(31, l, white);
printScreen();
// clear up the screen (pixel by pixel)
for (uint8_t l = 0; l < 8; l++)
for (uint8_t c = 0; c < 32; c++)
setPixel(c, l, white);
printScreen();
// fill up the screen (pixel by pixel)
for (uint8_t l = 0; l < 8; l++)
for (uint8_t c = 0; c < 32; c++)
setPixel(c, l, black);
printScreen();
}
void loop() {}