在Arduino IDE的环境下要以I2C方式实现OLED屏的显示驱动还是较为方便的,它需要相应的库进行支持。 其相应的工作条件为: #include <Wire.h> #include "SSD1306Wire.h" #include "OLEDDisplayUi.h" #include "images.h" SSD1306Wire display(0x3c, 1, 2); OLEDDisplayUi ui ( &display );
相应的辅助函数为: - void msOverlay(OLEDDisplay *display, OLEDDisplayUiState* state) {
- display->setTextAlignment(TEXT_ALIGN_RIGHT);
- display->setFont(ArialMT_Plain_10);
- display->drawString(128, 0, String(millis()));
- }
- void drawFrame1(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
- display->drawXbm(x + 34, y + 14, WiFi_**_width, WiFi_**_height, WiFi_**_bits);
- }
- void drawFrame2(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
- display->setTextAlignment(TEXT_ALIGN_LEFT);
- display->setFont(ArialMT_Plain_10);
- display->drawString(0 + x, 10 + y, "Arial 10");
- display->setFont(ArialMT_Plain_16);
- display->drawString(0 + x, 20 + y, "Arial 16");
- display->setFont(ArialMT_Plain_24);
- display->drawString(0 + x, 34 + y, "Arial 24");
- }
- void drawFrame3(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
- // Text alignment demo
- display->setFont(ArialMT_Plain_10);
- // The coordinates define the left starting point of the text
- display->setTextAlignment(TEXT_ALIGN_LEFT);
- display->drawString(0 + x, 11 + y, "Left aligned (0,10)");
- // The coordinates define the center of the text
- display->setTextAlignment(TEXT_ALIGN_CENTER);
- display->drawString(64 + x, 22 + y, "Center aligned (64,22)");
- // The coordinates define the right end of the text
- display->setTextAlignment(TEXT_ALIGN_RIGHT);
- display->drawString(128 + x, 33 + y, "Right aligned (128,33)");
- }
- void drawFrame4(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
- display->setTextAlignment(TEXT_ALIGN_LEFT);
- display->setFont(ArialMT_Plain_10);
- display->drawStringMaxWidth(0 + x, 10 + y, 128, "Lorem ipsum\n dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore.");
- }
- void drawFrame5(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
- }
- FrameCallback frames[] = { drawFrame1, drawFrame2, drawFrame3, drawFrame4, drawFrame5 };
- int frameCount = 5;
- OverlayCallback overlays[] = { msOverlay };
- int overlaysCount = 1;
实现驱动效果测试的主程序为: - void setup() {
- Serial.begin(115200);
- Serial.println();
- Serial.println();
- ui.setTargetFPS(60);
- ui.setActiveSymbol(activeSymbol);
- ui.setInactiveSymbol(inactiveSymbol);
- ui.setIndicatorPosition(BOTTOM);
- ui.setIndicatorDirection(LEFT_RIGHT);
- ui.setFrameAnimation(SLIDE_LEFT);
- ui.setFrames(frames, frameCount);
- ui.setOverlays(overlays, overlaysCount);
- ui.init();
- display.flipScreenVertically();
- }
- void loop() {
- int remainingTimeBudget = ui.update();
- if (remainingTimeBudget > 0) {
- delay(remainingTimeBudget);
- }
- }
经程序的上传,其测试效果如图1至图3所示。 图1 显示图案
图2 变换字体大小
图3 对齐效果
|