Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: uOLED-128-G1-CLASS-DEMO
uOLED.cpp
- Committer:
- Nakor
- Date:
- 2010-12-26
- Revision:
- 21:87a2227c1ad2
- Parent:
- 19:cc4f5d01f080
- Child:
- 22:66401b612b1b
File content as of revision 21:87a2227c1ad2:
#include "uOLED.h"
#include "mbed.h"
#define OLED_INITDELAYMS 500
#define OLED_ACK 0x06 // Ok
#define OLED_NAK 0x15 // Error
uOLED::uOLED(PinName serialTX, PinName serialRX, PinName reset) :
_oled(serialTX, serialRX),
_reset(reset) {
_oled.baud(230400);
}
/******************/
/* Protected */
/******************/
void uOLED::resetDisplay() {
_reset = 0;
wait_ms(20);
_reset = 1;
wait_ms(20);
}
/******************/
/* Public */
/******************/
short uOLED::getRGB(char red, char green, char blue) {
int outR = ((red * 31) / 255);
int outG = ((green * 63) / 255);
int outB = ((blue * 31) / 255);
return (outR << 11) | (outG << 5) | outB;
}
bool uOLED::addBitmappedCharacter(char character, char data[8]) {
_oled.putc(0x41);
_oled.putc(character);
for (int i=0; i<8; i++) _oled.putc(data[i]);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::blockCopyPaste(char sourceX, char sourceY, char destinationX, char destinationY, char width, char height) {
_oled.putc(0x63);
_oled.putc(sourceX);
_oled.putc(sourceY);
_oled.putc(destinationX);
_oled.putc(destinationY);
_oled.putc(width);
_oled.putc(height);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::displayControl(char mode, char value) {
_oled.putc(0x59);
_oled.putc(mode);
_oled.putc(value);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::displayUserBitmappedCharacter(char character, char x, char y, short color) {
_oled.putc(0x44);
_oled.putc(character);
_oled.putc(x);
_oled.putc(y);
_oled.putc(color >> 8);
_oled.putc(color & 0xFF);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::drawCharacter(char character, char column, char row, short color) {
_oled.putc(0x54);
_oled.putc(character);
_oled.putc(column);
_oled.putc(row);
_oled.putc(color >> 8);
_oled.putc(color & 0xFF);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::drawCircle(char x, char y, char radius, short red, short green, short blue)
{
short color = getRGB(red, green, blue);
_oled.putc(0x43);
_oled.putc(x);
_oled.putc(y);
_oled.putc(radius);
_oled.putc(color >> 8);
_oled.putc(color & 0xFF);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::drawImage(char x, char y, char width, char height, char colorMode, char *pixels) {
int numberOfBytesPerPixel = 1;
_oled.putc(0x49);
_oled.putc(x);
_oled.putc(y);
_oled.putc(width);
_oled.putc(height);
_oled.putc(colorMode);
if (colorMode == 16) numberOfBytesPerPixel = 2;
for (int i=0; i<width * height * numberOfBytesPerPixel; i++) {
_oled.putc(pixels[i]);
}
return (_oled.getc() == OLED_ACK);
}
bool uOLED::drawLine(char x1, char y1, char x2, char y2, short red, short green, short blue)
{
short color = getRGB(red, green, blue);
_oled.putc(0x4C);
_oled.putc(x1);
_oled.putc(y1);
_oled.putc(x2);
_oled.putc(y2);
_oled.putc(color >> 8);
_oled.putc(color & 0xFF);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::drawPolygon(char vertices, char *x, char *y, short color) {
_oled.putc(0x67);
_oled.putc(vertices);
for (int i=0; i<vertices; i++) {
_oled.putc(x[i]);
_oled.putc(y[i]);
}
_oled.putc(color >> 8);
_oled.putc(color & 0xFF);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::drawRectangle(char x, char y, char width, char height, short red, short green, short blue)
{
short colour = getRGB(red, green, blue);
_oled.putc(0x72);
_oled.putc(x);
_oled.putc(y);
_oled.putc(x + width);
_oled.putc(y + height);
_oled.putc(colour >> 8);
_oled.putc(colour & 0xFF);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::drawText(char column, char row, char font, short red, short green, short blue, char *text)
{
short colour = getRGB(red, green, blue);
_oled.putc(0x73);
_oled.putc(column);
_oled.putc(row);
_oled.putc(font);
_oled.putc(colour >> 8);
_oled.putc(colour & 0xFF);
for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]);
_oled.putc(0x00);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::drawTextUF(char x, char y, char font, short red, short green, short blue, char width, char height, char *text) {
short colour = getRGB(red, green, blue);
_oled.putc(0x53);
_oled.putc(x);
_oled.putc(y);
_oled.putc(font);
_oled.putc(colour >> 8);
_oled.putc(colour & 0xFF);
_oled.putc(width);
_oled.putc(height);
for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]);
_oled.putc(0x00);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::drawTriangle(char x1, char y1, char x2, char y2, char x3, char y3, short red, short green, short blue)
{
short colour = getRGB(red, green, blue);
_oled.putc(0x47);
_oled.putc(x1);
_oled.putc(y1);
_oled.putc(x2);
_oled.putc(y2);
_oled.putc(x3);
_oled.putc(y3);
_oled.putc(colour >> 8);
_oled.putc(colour & 0xFF);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::eraseScreen() {
_oled.putc(0x45);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::init() {
resetDisplay();
wait_ms(OLED_INITDELAYMS);
_oled.putc(0x55);
_oled.getc();
_oled.putc(0x4F);
_oled.putc(0x01);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::penSize(char size) {
_oled.putc(0x70);
_oled.putc(size);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::putPixel(char x, char y, short color) {
_oled.putc(0x50);
_oled.putc(x);
_oled.putc(y);
_oled.putc(color >> 8);
_oled.putc(color & 0xFF);
return (_oled.getc() == OLED_ACK);
}
short uOLED::readPixel(char x, char y) {
short returnValue;
_oled.putc(0x52);
_oled.putc(x);
_oled.putc(y);
returnValue = (_oled.getc() << 8);
returnValue += _oled.getc();
return returnValue;
}
bool uOLED::setBackgroundColour(char red, char green, char blue)
{
short colour = getRGB(red, green, blue);
_oled.putc(0x42);
_oled.putc(colour >> 8);
_oled.putc(colour & 0xFF);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::setFontSize(char fontType) {
_oled.putc(0x46);
_oled.putc(fontType);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::textButton(char state, char x, char y, short buttonColor, char font, short textColor, char textWidth, char textHeight, char *text) {
_oled.putc(0x62);
_oled.putc(state);
_oled.putc(x);
_oled.putc(y);
_oled.putc(buttonColor >> 8);
_oled.putc(buttonColor & 0xFF);
_oled.putc(font);
_oled.putc(textColor >> 8);
_oled.putc(textColor & 0xFF);
_oled.putc(textWidth);
_oled.putc(textHeight);
for (int i=0 ; i<strlen(text) ; i++) _oled.putc(text[i]);
_oled.putc(0x00);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::textMode(char mode) {
_oled.putc(0x4F);
_oled.putc(mode);
return (_oled.getc() == OLED_ACK);
}
bool uOLED::versionInfo(bool onScreen, char *info) {
_oled.putc(0x56);
if (onScreen) {
_oled.putc(0x01);
} else {
_oled.putc(0x00);
}
info[0] = _oled.getc();
info[1] = _oled.getc();
info[2] = _oled.getc();
info[3] = _oled.getc();
info[4] = _oled.getc();
return true;
}