Code Monkey home page Code Monkey logo

mbed-text-display's Introduction

Mbed LCD & OLED text display library

Framework Badge mbed

Based on work by sstaub which is based on Simon's work. So what is the difference, why another fork?

  • optional R/W pin which enables reading busy flag to avoid fixed waiting time (once the display finishes the task it will let you know)
  • rewritten initialization - not done in constructor in case you are using voltage level translator with OE pin & avoids delays
  • enums are within class context - in case you have a same variable defined elsewhere in the code, it will not collide
  • all display types share the same codebase, they only rewrite pin handling & initialization
  • you can specify char size 5x8 or 5x10 pixels
  • I2C packpack (PCF8574) supported, there are two pinouts on the market - both are supported

Supports HD44780 (tested), RS0010 (tested) and WS0010 (untested) interfaces commonly found in text LCD/OLED displays.

Example

LCD

#include "TextLCD.h"

#define DISPLAY_RS_pin PB_1
#define DISPLAY_E_pin  PB_2
#define DISPLAY_D4_pin PB_3
#define DISPLAY_D5_pin PB_4
#define DISPLAY_D6_pin PB_5
#define DISPLAY_D7_pin PB_6

const uint8_t upArrow[8] = {
    0b00100,
    0b01010,
    0b10001,
    0b00100,
    0b00100,
    0b00100,
    0b00000,
};

const uint8_t downArrow[8] = {
    0b00000,
    0b00100,
    0b00100,
    0b00100,
    0b10001,
    0b01010,
    0b00100,
};

const uint8_t rightArrow[8] = {
    0b00000,
    0b00100,
    0b00010,
    0b11001,
    0b00010,
    0b00100,
    0b00000,
};

const uint8_t leftArrow[8] = {
    0b00000,
    0b00100,
    0b01000,
    0b10011,
    0b01000,
    0b00100,
    0b00000,
};

TextLCD lcd(DISPLAY_RS_pin, DISPLAY_E_pin, DISPLAY_D4_pin, DISPLAY_D5_pin,
             DISPLAY_D6_pin, DISPLAY_D7_pin);

int main() {
    ThisThread::sleep_for(50ms); // give a time to wakeup the controller

    lcd.init();
    lcd.display(TextLCD::DISPLAY_ON);

    lcd.printf("Hello world\n");

    // try display functions
    ThisThread::sleep_for(2s);
    lcd.display(TextLCD::CURSOR_ON);
    lcd.display(TextLCD::BLINK_ON);
    ThisThread::sleep_for(4s);
    lcd.display(TextLCD::BLINK_OFF);
    ThisThread::sleep_for(2s);
    lcd.display(TextLCD::CURSOR_OFF);
    ThisThread::sleep_for(2s);

    // clear
    lcd.cls();

    // create custom characters
    lcd.create(0, downArrow);
    lcd.create(1, upArrow);
    lcd.create(2, rightArrow);
    lcd.create(3, leftArrow);

    // show custom characters
    lcd.locate(0, 0);
    lcd.character(0, 0, 0);
    lcd.character(2, 0, 1);
    lcd.character(4, 0, 2);
    lcd.character(6, 0, 3);

    // try long text
    lcd.locate(0, 0);
    lcd.printf("Really long hello world\nwith scrolling");
    ThisThread::sleep_for(2s);

    // scroll
    while (1) {
        for (auto pos = 0; pos < (23 - lcd.columns()); pos++) {
            lcd.display(TextLCD::SCROLL_LEFT);
            ThisThread::sleep_for(150ms);
        }

        ThisThread::sleep_for(1s);

        for (auto pos = 0; pos < (23 - lcd.columns()); pos++) {
            lcd.display(TextLCD::SCROLL_RIGHT);
            ThisThread::sleep_for(150ms);
        }

        ThisThread::sleep_for(2s);
    }
}

OLED

#include "TextOLED.h"

#define DISPLAY_RS_pin PB_1
#define DISPLAY_E_pin  PB_2
#define DISPLAY_D4_pin PB_3
#define DISPLAY_D5_pin PB_4
#define DISPLAY_D6_pin PB_5
#define DISPLAY_D7_pin PB_6
#define DISPLAY_RW_pin PB_7

TextOLED oled(DISPLAY_RS_pin, DISPLAY_E_pin, DISPLAY_D4_pin, DISPLAY_D5_pin,
             DISPLAY_D6_pin, DISPLAY_D7_pin, DISPLAY_RW_pin);

const char spinner[] = {0x7C, 0x2F, 0x2D, 0xDA};

int main() {
    ThisThread::sleep_for(500ms); // give a time to wakeup the controller

    oled.init(TextOLED::FONT_EUROPEAN_I);
    oled.display(TextOLED::DISPLAY_ON);

    // animate spinner
    while(1){
        for (size_t i = 0; i < sizeof(spinner); i++) {
            oled.character(0, 0, spinner[i]);
            ThisThread::sleep_for(150ms);
        }
    }
}

LCD I2C

#include "TextLCD_I2C.h"

#define SDA PB_9
#define SCL PB_8

TextLCD_I2C lcd(SDA, SCL, false); // set to true if LCD backpack has different pinout

int main() {
    ThisThread::sleep_for(50ms); // give a time to wakeup the controller

    if (lcd.init()) {
        printf("init OK\n");
        lcd.display(TextLCD_I2C::DISPLAY_ON);
        lcd.setBacklight(true);
        lcd.printf("Hello world\n");

    } else {
        printf("error\n");
    }
}

OLED I2C

You can use the constructor same as above or you can pass existing I2C object

#include "TextOLED_I2C.h"

#define SDA PB_9
#define SCL PB_8

I2C i2c(SDA, SCL)
TextOLED_I2C oled;

int main() {
    ThisThread::sleep_for(500ms); // give a time to wakeup the controller

    if (oled.init(&i2c)) {
        printf("init OK\n");
        oled.display(TextOLED_I2C::DISPLAY_ON);
        oled.printf("Hello world\n");

    } else {
        printf("error\n");
    }
}

mbed-text-display's People

Contributors

pilotak avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.