![]() |
Display_Lib_RPI 2.3.0
A C++ Library to connect electronic displays to Linux single board computers.
|
class to drive the ERMCh1115 OLED More...
#include <ERM1_CH1115_OLED_RDL.hpp>
Classes | |
struct | ERMCH1115_Delays_t |
Struct to hold delay values used in driver. More... | |
Public Member Functions | |
ERMCH1115 (int16_t oledwidth, int16_t oledheight, int8_t rst, int8_t dc, int8_t cs, int8_t sclk, int8_t din) | |
init the OLED class object | |
ERMCH1115 (int16_t oledwidth, int16_t oledheight, int8_t rst, int8_t dc) | |
init the OLED class object | |
virtual void | drawPixel (int16_t x, int16_t y, uint8_t colour) override |
Draws a Pixel to the screen , overides the graphics library. | |
rdlib::Return_Codes_e | OLEDSetBufferPtr (uint8_t width, uint8_t height, std::span< uint8_t > buffer) |
sets the buffer pointer to the users screen data buffer | |
rdlib::Return_Codes_e | OLEDupdate (void) |
updates the OLED i.e. writes buffer to the screen | |
rdlib::Return_Codes_e | OLEDclearBuffer (void) |
clears the buffer memory i.e. does NOT write to the screen | |
void | OLEDBufferScreen (int16_t x, int16_t y, uint8_t w, uint8_t h, std::span< uint8_t > data) |
Draw a bitmap to the screen. | |
void | OLEDFillScreen (uint8_t pixel) |
Fill the screen NOT the buffer with a datapattern. | |
void | OLEDFillPage (uint8_t page_num, uint8_t pixels) |
Fill the chosen page(0-7) with a datapattern. | |
void | OLEDBitmap (int16_t x, int16_t y, uint8_t w, uint8_t h, const std::span< const uint8_t > data) |
Draw a bitmap to the screen. | |
rdlib::Return_Codes_e | OLEDbegin (uint8_t contrast, int gpioDev) |
begin Method initialise OLED for software SPI | |
rdlib::Return_Codes_e | OLEDbegin (uint8_t contrast, int device, int channel, int speed, int flags, int gpioDev) |
begin Method initialise OLED for Hardware SPI | |
void | OLEDinit (void) |
Called from OLEDbegin carries out Power on sequence and register init. | |
void | OLEDReset (void) |
Resets OLED in a four wire setup called at start. | |
void | OLEDEnable (uint8_t on) |
Turns On Display. | |
void | OLEDInvert (uint8_t on) |
invert the display | |
void | OLEDFlip (uint8_t on) |
Rotates the display vertically, A 180 degree 'flip'. | |
void | OLEDContrast (uint8_t contrast=ERMCH1115_CONTRAST_DATA_DEFAULT) |
Adjusts contrast. | |
void | OLEDscroll (uint8_t bits) |
Turns on Horizontal scroll. | |
void | OLEDscrollSetup (uint8_t Timeinterval=ERMCH1115_TIME_SET, uint8_t Direction=ERMCH1115_SCROLL_SETUP, uint8_t mode=ERMCH1115_SET_SCROLL_MODE) |
Sets up Horizontal Scroll. | |
void | OLEDfadeEffect (uint8_t bits=ERMCH1115_BREATHEFFECT_DATA) |
Turns on fade effect. | |
bool | OLEDIsSleeping (void) |
getting for _sleep member . is OLED in sleep mode | |
rdlib::Return_Codes_e | OLEDSPIoff (void) |
stops HW spi operations | |
void | OLEDPowerDown (void) |
Power down function. | |
uint16_t | OLEDHighFreqDelayGet (void) |
Freq delay used in SW SPI getter, uS delay used in SW SPI method. | |
void | OLEDHighFreqDelaySet (uint16_t) |
Freq delay used in SW SPI setter, uS delay used in SW SPI method. | |
![]() | |
bicolor_graphics (int16_t w, int16_t h) | |
init the Display Graphics class object | |
rdlib::Return_Codes_e | drawDotGrid (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t DotGridGap, uint8_t color) |
Draws a grid of dots on the screen starting from the given coordinates. This function draws a grid of pixels with a specified gap between them. It checks that the provided coordinates and dimensions are within the screen bounds and adjusts them if necessary. It also validates The grid of dots gap value and defaults it to 2 if invalid. | |
void | drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint8_t color) |
draws a line from (x0,y0) to (x1,y1). | |
rdlib::Return_Codes_e | drawFastVLine (int16_t x, int16_t y, int16_t h, uint8_t color) |
Draws a vertical line starting at (x,y) with height h. | |
rdlib::Return_Codes_e | drawFastHLine (int16_t x, int16_t y, int16_t w, uint8_t color) |
Draws a horizontal line starting at (x,y) with width w. | |
void | drawLineAngle (int16_t x, int16_t y, int angle, uint8_t start, uint8_t length, int offset, uint8_t color) |
Draws a line using an angle and length as parameters. This function draws a line starting from (x, y) , extending in the direction specified by angle , with a given length . The function also allows applying an offset to the angle before computing the line’s end coordinates. | |
void | drawRect (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color) |
draws rectangle at (x,y) where h is height and w is width of the rectangle. | |
void | fillRect (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color) |
fills a rectangle starting from coordinates (x,y) with width of w and height of h. | |
void | fillScreen (uint8_t color) |
Fills the whole screen with a given color. | |
void | drawCircle (int16_t x0, int16_t y0, int16_t r, uint8_t color) |
draws a circle where (x0,y0) are center coordinates an r is circle radius. | |
void | fillCircle (int16_t x0, int16_t y0, int16_t r, uint8_t color) |
fills a circle where (x0,y0) are center coordinates an r is circle radius. | |
void | drawEllipse (int16_t cx, int16_t cy, int16_t semiMajorAxis, int16_t semiMinorAxis, bool fill, uint8_t color) |
Draw an ellipse on the display. This function uses the midpoint ellipse algorithm to efficiently draw an ellipse centered at (cx, cy) with the given semi-major (horizontal) and semi-minor (vertical) axes. | |
void | drawTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint8_t color) |
draws a triangle of coordinates (x0,y0), (x1,y1) and (x2,y2). | |
void | fillTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint8_t color) |
Fills a triangle of coordinates (x0,y0), (x1,y1) and (x2,y2). | |
void | drawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint8_t color) |
draws a rectangle with rounded edges | |
void | fillRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint8_t color) |
Fills a rectangle with rounded edges. | |
void | drawQuadrilateral (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, uint8_t color) |
Draws a quadrilateral (four-sided polygon) by connecting four points with lines. This function draws a quadrilateral by drawing four lines between the given vertices. The lines are drawn in the order: (x0, y0) to (x1, y1), (x1, y1) to (x2, y2), (x2, y2) to (x3, y3), and finally (x3, y3) back to (x0, y0). | |
void | fillQuadrilateral (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, uint8_t color, bool useTriangleSplit=true) |
Fills a quadrilateral with the specified color using triangles. This function fills a quadrilateral by dividing it into triangles and filling them individually. The quadrilateral is filled by calling the fillTriangle function three times with appropriate vertex coordinates. The useTriangleSplit parameter determines whether the quadrilateral is divided into two triangles or if only one triangle is used. | |
rdlib::Return_Codes_e | drawPolygon (int16_t x, int16_t y, uint8_t sides, int16_t diameter, float rotation, bool fill, uint8_t color) |
Draws a polygon with a specified number of sides, diameter, rotation, and color. This function draws a regular polygon by connecting points equally spaced around a circle, with each point having a distance defined by the diameter. The polygon is rotated by the given angle (in degrees) before being drawn. The number of sides is enforced to be at least 3. | |
void | drawArc (uint16_t cx, uint16_t cy, uint16_t radius, uint16_t thickness, float startAngle, float endAngle, uint8_t color) |
Draw an arc on the TFT display. This function draws an arc between two angles (start and end) on a circle with a given radius. | |
void | drawSimpleArc (int16_t cx, int16_t cy, int16_t radius, float startAngle, float endAngle, uint8_t color) |
Draw a simple arc of one pixel on the display( no offsets , thickness or maximum arc calculations) This function draws an arc between two angles (start and end) on a circle with a given radius. | |
float | getArcAngleMax () const |
Get the current maximum angle of the arc. | |
void | setArcAngleMax (float arcAngleMax) |
Set a new maximum angle for the arc. | |
int | getArcAngleOffset () const |
Get the current angle offset. | |
void | setArcAngleOffset (int arcAngleOffset) |
Set a new angle offset. | |
void | setCursor (int16_t x, int16_t y) |
set the cursor position | |
void | setRotation (displayBC_rotate_e m) |
Sets the _rotation of the display. | |
displayBC_rotate_e | getRotation () |
Gets the _rotation of the display. | |
int16_t | height (void) const |
Gets the height of the display (per current _rotation) | |
int16_t | width (void) const |
Gets the width of the display (per current _rotation) | |
virtual size_t | write (uint8_t) override |
write method used in the print class when user calls print | |
rdlib::Return_Codes_e | writeChar (int16_t x, int16_t y, char value) |
Write 1 character on display. | |
rdlib::Return_Codes_e | writeCharString (int16_t x, int16_t y, char *text) |
Write Text character array on Display. | |
void | setTextWrap (bool w) |
turn on or off screen wrap of the text | |
void | setDrawBitmapAddr (bool mode) |
sets the data addressing mode in drawBitmap function. | |
rdlib::Return_Codes_e | drawBitmap (int16_t x, int16_t y, const std::span< const uint8_t > bitmap, int16_t w, int16_t h, uint8_t color, uint8_t bg) |
Draw a 1-bit color bitmap. | |
![]() | |
display_Fonts () | |
init the OLED font class object constructor | |
rdlib::Return_Codes_e | setFont (display_Font_name_e) |
SetFont. | |
void | setInvertFont (bool invertStatus) |
setInvertFont | |
bool | getInvertFont (void) |
getInvertFont | |
![]() | |
int | getWriteError () |
gets the error flag status, zero no error | |
void | clearWriteError () |
clears the error flag by setting it to zero | |
virtual size_t | write (const uint8_t *buffer, size_t size) |
define in the sub class | |
size_t | write (const char *str) |
Writes a string to the output. | |
size_t | write (const char *buffer, size_t size) |
Writes a buffer of a specified size to the output. | |
virtual int | availableForWrite () |
define in the sub class | |
size_t | print (const char[]) |
print an array | |
size_t | print (char) |
print an character | |
size_t | print (int, int=RDL_DEC) |
print an integer of base number system | |
size_t | print (unsigned int, int=RDL_DEC) |
print an unsigned integer of base number system | |
size_t | print (long, int=RDL_DEC) |
print an long integer of base number system | |
size_t | print (unsigned long, int=RDL_DEC) |
print an unsigned long integer of base number system | |
size_t | print (double, int=2) |
print an double | |
size_t | print (const std::string &) |
print an C++ string object | |
size_t | println (const char[]) |
Prints a character array followed by a newline. | |
size_t | println (char) |
print an character followed by new line | |
size_t | println (int, int=RDL_DEC) |
print an integer of base number system followed by new line | |
size_t | println (unsigned int, int=RDL_DEC) |
print an unsigned integer of base number system followed by new line | |
size_t | println (long, int=RDL_DEC) |
print an long integer of base number system followed by new line | |
size_t | println (unsigned long, int=RDL_DEC) |
print an unsigned long integer of base number system followed by new line | |
size_t | println (double, int=2) |
print an double | |
size_t | println (void) |
Goto to new line. | |
size_t | println (const std::string &s) |
print an C++ string object followed by new line | |
template<typename T > | |
size_t | print (const std::vector< T > &v, int format=defaultFormat< T >()) |
Print a vector of any type. | |
template<typename T > | |
size_t | println (const std::vector< T > &vec, int format=defaultFormat< T >()) |
Print a vector of elements followed by a newline. | |
template<typename T , size_t N> | |
size_t | print (const std::array< T, N > &arr, int format=defaultFormat< T >()) |
Print a std::array of any type. | |
template<typename T , size_t N> | |
size_t | println (const std::array< T, N > &arr, int format=defaultFormat< T >()) |
Print a std::array of elements followed by a newline. | |
Private Member Functions | |
void | send_data (uint8_t data) |
Send data byte with SPI to ERMCH1115. | |
void | send_command (uint8_t command, uint8_t value) |
Sends a command to the display. | |
int8_t | GetCommMode (void) |
Checks if software SPI is on. | |
void | SoftwareSPIShiftOut (uint8_t val) |
used in software SPI mode to shift out data | |
Private Attributes | |
int8_t | _Display_CS |
int8_t | _Display_DC |
int8_t | _Display_RST |
int8_t | _Display_SCLK |
int8_t | _Display_SDATA |
int | _DeviceNumGpioChip = 0 |
int | _GpioHandle = 0 |
int | _spiHandle = 0 |
int | _spiDev = 0 |
int | _spiChan = 0 |
int | _spiBaud = 50000 |
int | _spiFlags = 0 |
uint16_t | _OLEDHighFreqDelay = 0 |
int8_t | _OLED_mode = 2 |
uint8_t | _OLED_WIDTH = 128 |
uint8_t | _OLED_HEIGHT = 64 |
uint8_t | _OLED_PAGE_NUM = (_OLED_HEIGHT/8) |
std::span< uint8_t > | _OLEDbuffer |
bool | _sleep = true |
uint8_t | _OLEDcontrast = ERMCH1115_CONTRAST_DATA_DEFAULT |
Additional Inherited Members | |
![]() | |
enum | displayBC_rotate_e : uint8_t { BC_Degrees_0 = 0 , BC_Degrees_90 = 1 , BC_Degrees_180 = 2 , BC_Degrees_270 = 3 } |
enum | pixel_color_e : uint8_t { WHITE = 0 , BLACK = 1 , INVERSE = 2 } |
![]() | |
enum | BaseNum : uint8_t { RDL_DEC = 10 , RDL_HEX = 16 , RDL_OCT = 8 , RDL_BIN = 2 } |
![]() | |
void | setWriteError (int err=0) |
![]() | |
displayBC_rotate_e | _display_rotate = BC_Degrees_0 |
const int16_t | WIDTH |
const int16_t | HEIGHT |
int16_t | _width |
int16_t | _height |
int16_t | _cursor_x |
int16_t | _cursor_y |
float | _arcAngleMax = 360.0f |
int | _arcAngleOffset = 0 |
bool | _textwrap = true |
![]() | |
std::span< const uint8_t > | _FontSelect = pFontDefault |
uint8_t | _Font_X_Size = 0x08 |
uint8_t | _Font_Y_Size = 0x08 |
uint8_t | _FontOffset = 0x20 |
uint8_t | _FontNumChars = 0x5F |
class to drive the ERMCh1115 OLED
ERMCH1115::ERMCH1115 | ( | int16_t | oledwidth, |
int16_t | oledheight, | ||
int8_t | rst, | ||
int8_t | dc, | ||
int8_t | cs, | ||
int8_t | sclk, | ||
int8_t | din | ||
) |
init the OLED class object
oledwidth | width of oled in pixels |
oledheight | height of oled in pixels |
rst | GPIO reset |
dc | GPIO data or command |
cs | GPIO Chip select |
sclk | GPIO SPI Clock |
din | GPIO MOSI |
init the OLED class object
oledwidth | width of oled in pixels |
oledheight | height of oled in pixels |
rst | GPIO reset |
dc | GPIO data or command |
Draws a Pixel to the screen , overides the graphics library.
x | x co-ord of pixel |
y | y co-ord of pixel |
colour | colour of pixel |
Implements bicolor_graphics.
Checks if software SPI is on.
rdlib::Return_Codes_e ERMCH1115::OLEDbegin | ( | uint8_t | OLEDcontrast, |
int | device, | ||
int | channel, | ||
int | speed, | ||
int | flags, | ||
int | gpioDev | ||
) |
begin Method initialise OLED for Hardware SPI
OLEDcontrast | Contrast of the OLED display default = 0x80 , range 0x00 to 0xFE |
device | A SPI device, >= 0. |
channel | A SPI channel, >= 0. |
speed | The speed of serial communication in bits per second. |
flags | The flags may be used to modify the default behaviour. Set to 0(mode 0) for this device. |
gpioDev | The device number of a gpiochip. |
rdlib::Return_Codes_e ERMCH1115::OLEDbegin | ( | uint8_t | OLEDcontrast, |
int | gpioDev | ||
) |
begin Method initialise OLED for software SPI
OLEDcontrast | Contrast of the OLED display default = 0x80 , range 0x00 to 0xFE |
gpioDev | The device number of a gpiochip. |
void ERMCH1115::OLEDBitmap | ( | int16_t | x, |
int16_t | y, | ||
uint8_t | w, | ||
uint8_t | h, | ||
const std::span< const uint8_t > | data | ||
) |
Draw a bitmap to the screen.
x | offset 0-128 |
y | offset 0-64 |
w | width 0-128 |
h | height 0-64 |
data | span to the bitmap data |
void ERMCH1115::OLEDBufferScreen | ( | int16_t | x, |
int16_t | y, | ||
uint8_t | w, | ||
uint8_t | h, | ||
std::span< uint8_t > | data | ||
) |
Draw a bitmap to the screen.
x | offset |
y | offset |
w | width |
h | height |
data | span the bitmap data array |
rdlib::Return_Codes_e ERMCH1115::OLEDclearBuffer | ( | void | ) |
clears the buffer memory i.e. does NOT write to the screen
void ERMCH1115::OLEDContrast | ( | uint8_t | contrast = ERMCH1115_CONTRAST_DATA_DEFAULT | ) |
Adjusts contrast.
contrast | 0x00 to 0xFF , default 0x80 |
Turns On Display.
bits | 1 display on , 0 display off |
void ERMCH1115::OLEDfadeEffect | ( | uint8_t | bits = ERMCH1115_BREATHEFFECT_DATA | ) |
Turns on fade effect.
bits | 0x00 to stop |
Fill the chosen page(0-7) with a datapattern.
pageNum | page 0-7 divides 64 pixel screen into 8 pages or blocks 64/8 |
dataPattern | can be set to 0 to FF (not buffer) |
Fill the screen NOT the buffer with a datapattern.
dataPattern | can be set to zero to clear screen (not buffer) range 0x00 to 0ff |
Rotates the display vertically, A 180 degree 'flip'.
bits | 1 on , 0 off |
Freq delay used in SW SPI getter, uS delay used in SW SPI method.
Freq delay used in SW SPI setter, uS delay used in SW SPI method.
CommDelay | The GPIO communications delay in uS |
getting for _sleep member . is OLED in sleep mode
Power down function.
Disables screen and sets all independent GPIO low. call when powering down before end of operations
Turns on Horizontal scroll.
bits | 1 Horizontal scroll on , 0 Horizontal scroll off |
void ERMCH1115::OLEDscrollSetup | ( | uint8_t | Timeinterval = ERMCH1115_TIME_SET , |
uint8_t | Direction = ERMCH1115_SCROLL_SETUP , |
||
uint8_t | mode = ERMCH1115_SET_SCROLL_MODE |
||
) |
Sets up Horizontal Scroll.
Timeinterval | 0x00 -> 0x07 , 0x00 = 6 frames |
Direction | 0x26 right 0x27 left (A2 – A0) |
mode | Set Scroll Mode: (28H – 2BH) 0x28 = continuous |
rdlib::Return_Codes_e ERMCH1115::OLEDSetBufferPtr | ( | uint8_t | width, |
uint8_t | height, | ||
std::span< uint8_t > | buffer | ||
) |
sets the buffer pointer to the users screen data buffer
width | width of buffer in pixels |
height | height of buffer in pixels |
buffer | the buffer span |
rdlib::Return_Codes_e ERMCH1115::OLEDSPIoff | ( | void | ) |
stops HW spi operations
End SPI operations.
rdlib::Return_Codes_e ERMCH1115::OLEDupdate | ( | void | ) |
updates the OLED i.e. writes buffer to the screen
Sends a command to the display.
command | Command to send |
value | the values to change |
Send data byte with SPI to ERMCH1115.
dataByte | byte the data byte to send |
used in software SPI mode to shift out data
value | Byte to send in MSBFIRST |
a GPIO uS delay is used here(_OLEDHighFreqDelay) user adjust for different CPU speeds possible
|
private |
SWSPI The device number of a gpiochip ls /dev/gpio
|
private |
GPIO Chip select line, Software SPI only
|
private |
GPIO Data or command line
|
private |
GPIO Reset line
|
private |
GPIO Clock Line, Software SPI only
|
private |
GPIO MOSI Line, Software SPI only
|
private |
This holds a handle to a gpiochip device opened by lgGpiochipOpen
|
private |
Height in pixels of the OLED
|
private |
Mode, hardware or software SPI , 2=HWSPI 3=SWSPI
|
private |
Number of pages in OLED based on height, PageNum = (h/8)
|
private |
Width in pxiels of the OLED
|
private |
span to buffer which holds screen data
|
private |
Contrast , default 0x80 ,datasheet 00-FF
|
private |
uS GPIO Communications delay, SW SPI ONLY
|
private |
The speed of serial communication in bits per second.
|
private |
A SPI channel, >= 0.
|
private |
A SPI device, >= 0.
|
private |
The flags 2 LSB defines SPI mode
|
private |
Hold a handle for the SPI device on the channel.
active Scroll mode
Display Effect ON/OFF and Time Interval:
Set Breathing Display Effect:
VCOM Deselect Level Data Set: (00H - FFH)
COM Deselect Level Mode Set: (DBH)
Set Common Op Scan Dir:C0H - C8H Flip vertical
Contrast Control Mode Set
Contrast Data Reg Set = 0x00 to = 0xFF
DC-DC Control Mode Set
DC-DC ON/OFF Mode Set (8AH - 8BH) (a=off; b=on)
De-active Scroll mode
Display Inversion on
Display Inversion off
Forcibly turns the entire display on regardless of the contents of the display data RAM
Forcibly turns the entire display on regardless of the contents of the display data RAM
End Page Address Set: (C2 – C0)
End Column Position Set: (B7 – B0)
Start Column Position Set: (A7 – A0)
Additional Horizontal Scroll Setup Mode Set: (24H)
Multiplex Ration Data Set: (00H - 3FH)
Multiplex Ration Mode Set
Display Offset Data Set: (00H~3FH)
Display Offset Mode Set:
Divide Ratio/Oscillator Frequency Data Set:
Divide Ratio/Oscillator Frequency Mode Set: (D5H)
Discharge/Pre-charge Period Data Set: (00H - FFH)
Pre-charge Period Mode Set:
Horizontal Scroll Setup: 26 right 27 left (A2 – A0)
Set SEG pads hw config: (A2H – A3H)
Set Segment Re-map: (A0H - A1H)
Set Lower Column Address: (00H - 0FH)
Set Higher Column Address: (10H – 1FH)
Determine the initial display line
Set Page Address: (B0H - B7H)
Output voltage (V PP ) internal charger pump.
Set Scroll Mode: (28H – 2BH) = 0x28 = continuous
Start Page Address Set = 0x00 = page 0
Time Interval Set: (B2 – B0) = 0x00 = 6 frames