Sketch to test I2C 128 x 64 OLED module from PMD Way
// Display > https://pmdway.com/products/0-96-128-64-graphic-oled-displays-i2c-or-spi-various-colors | |
// Guide > https://pmdway.com/blogs/product-guides-for-arduino/using-the-0-96-128-x-64-graphic-i2c-oled-displays-with-arduino | |
#include <Arduino.h> | |
#include <U8x8lib.h> | |
#ifdef U8X8_HAVE_HW_SPI | |
#include <SPI.h> | |
#endif | |
#ifdef U8X8_HAVE_HW_I2C | |
#include <Wire.h> | |
#endif | |
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE); | |
/* | |
This example will probably not work with the SSD1606, because of the | |
internal buffer swapping | |
*/ | |
void setup(void) | |
{ | |
/* U8g2 Project: KS0108 Test Board */ | |
//pinMode(16, OUTPUT); | |
//digitalWrite(16, 0); | |
/* U8g2 Project: Pax Instruments Shield: Enable Backlight */ | |
//pinMode(6, OUTPUT); | |
//digitalWrite(6, 0); | |
u8x8.begin(); | |
//u8x8.setFlipMode(1); | |
} | |
void pre(void) | |
{ | |
u8x8.setFont(u8x8_font_amstrad_cpc_extended_f); | |
u8x8.clear(); | |
u8x8.inverse(); | |
u8x8.print(" U8x8 Library "); | |
u8x8.setFont(u8x8_font_chroma48medium8_r); | |
u8x8.noInverse(); | |
u8x8.setCursor(0,1); | |
} | |
void draw_bar(uint8_t c, uint8_t is_inverse) | |
{ | |
uint8_t r; | |
u8x8.setInverseFont(is_inverse); | |
for( r = 0; r < u8x8.getRows(); r++ ) | |
{ | |
u8x8.setCursor(c, r); | |
u8x8.print(" "); | |
} | |
} | |
void draw_ascii_row(uint8_t r, int start) | |
{ | |
int a; | |
uint8_t c; | |
for( c = 0; c < u8x8.getCols(); c++ ) | |
{ | |
u8x8.setCursor(c,r); | |
a = start + c; | |
if ( a <= 255 ) | |
u8x8.write(a); | |
} | |
} | |
void loop(void) | |
{ | |
int i; | |
uint8_t c, r, d; | |
pre(); | |
u8x8.print("github.com/"); | |
u8x8.setCursor(0,2); | |
u8x8.print("olikraus/u8g2"); | |
delay(2000); | |
u8x8.setCursor(0,3); | |
u8x8.print("Tile size:"); | |
u8x8.print((int)u8x8.getCols()); | |
u8x8.print("x"); | |
u8x8.print((int)u8x8.getRows()); | |
delay(2000); | |
pre(); | |
for( i = 19; i > 0; i-- ) | |
{ | |
u8x8.setCursor(3,2); | |
u8x8.print(i); | |
u8x8.print(" "); | |
delay(150); | |
} | |
draw_bar(0, 1); | |
for( c = 1; c < u8x8.getCols(); c++ ) | |
{ | |
draw_bar(c, 1); | |
draw_bar(c-1, 0); | |
delay(50); | |
} | |
draw_bar(u8x8.getCols()-1, 0); | |
pre(); | |
u8x8.setFont(u8x8_font_amstrad_cpc_extended_f); | |
for( d = 0; d < 8; d ++ ) | |
{ | |
for( r = 1; r < u8x8.getRows(); r++ ) | |
{ | |
draw_ascii_row(r, (r-1+d)*u8x8.getCols() + 32); | |
} | |
delay(400); | |
} | |
draw_bar(u8x8.getCols()-1, 1); | |
for( c = u8x8.getCols()-1; c > 0; c--) | |
{ | |
draw_bar(c-1, 1); | |
draw_bar(c, 0); | |
delay(50); | |
} | |
draw_bar(0, 0); | |
pre(); | |
u8x8.drawString(0, 2, "Small"); | |
u8x8.draw2x2String(0, 5, "Scale Up"); | |
delay(3000); | |
pre(); | |
u8x8.drawString(0, 2, "Small"); | |
u8x8.setFont(u8x8_font_px437wyse700b_2x2_r); | |
u8x8.drawString(0, 5, "2x2 Font"); | |
delay(3000); | |
pre(); | |
u8x8.drawString(0, 1, "3x6 Font"); | |
u8x8.setFont(u8x8_font_inb33_3x6_n); | |
for(i = 0; i < 100; i++ ) | |
{ | |
u8x8.setCursor(0, 2); | |
u8x8.print(i); // Arduino Print function | |
delay(10); | |
} | |
for(i = 0; i < 100; i++ ) | |
{ | |
u8x8.drawString(0, 2, u8x8_u16toa(i, 5)); // U8g2 Build-In functions | |
delay(10); | |
} | |
pre(); | |
u8x8.drawString(0, 2, "Weather"); | |
u8x8.setFont(u8x8_font_open_iconic_weather_4x4); | |
for(c = 0; c < 6; c++ ) | |
{ | |
u8x8.drawGlyph(0, 4, '@'+c); | |
delay(300); | |
} | |
pre(); | |
u8x8.print("print \\n\n"); | |
delay(500); | |
u8x8.println("println"); | |
delay(500); | |
u8x8.println("done"); | |
delay(1500); | |
pre(); | |
u8x8.fillDisplay(); | |
for( r = 0; r < u8x8.getRows(); r++ ) | |
{ | |
u8x8.clearLine(r); | |
delay(100); | |
} | |
delay(1000); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment