displaylib_1bit_PICO 2.0.0
1-bit colour graphic display library, Rpi PICO RP2040 library
Loading...
Searching...
No Matches
ssd1306.hpp
Go to the documentation of this file.
1
7#pragma once
8
9// Library includes
10#include <cstdbool>
11#include <span> // C++ 20
12#include "display_graphics.hpp"
13#include "hardware/i2c.h"
14
19 public:
20 SSD1306(int16_t , int16_t );
21 ~SSD1306(){};
22
23 static constexpr uint8_t SSD1306_ADDR = 0x3C;
25 DisplayRet::Ret_Codes_e OLEDSetBufferPtr(uint8_t width, uint8_t height , std::span<uint8_t> buffer);
26 virtual void drawPixel(int16_t x, int16_t y, uint8_t color) override;
29 void OLEDBuffer(int16_t x, int16_t y, uint8_t w, uint8_t h, std::span<uint8_t> data);
30 void OLEDFillScreen(uint8_t pixel, uint8_t mircodelay);
31 void OLEDFillPage(uint8_t page_num, uint8_t pixels,uint8_t delay);
32 DisplayRet::Ret_Codes_e OLEDBitmap(int16_t x, int16_t y, int16_t w, int16_t h, std::span<const uint8_t> bitmap, bool invert);
33 DisplayRet::Ret_Codes_e OLEDbegin(uint8_t I2c_address= SSD1306_ADDR , i2c_inst_t* i2c_type = i2c1 , uint16_t CLKspeed = 100, uint8_t SDApin = 18, uint8_t SCLKpin = 19);
34 void OLEDinit();
35 void OLEDdeI2CInit(void);
36 void OLEDPowerDown(void);
37
38 void OLEDEnable(uint8_t on);
39 void OLEDContrast(uint8_t OLEDcontrast);
40 void OLEDInvert(bool on);
41
42 void OLEDStartScrollRight(uint8_t start, uint8_t stop);
43 void OLEDStartScrollLeft(uint8_t start, uint8_t stop) ;
44 void OLEDStartScrollDiagRight(uint8_t start, uint8_t stop) ;
45 void OLEDStartScrollDiagLeft(uint8_t start, uint8_t stop) ;
46 void OLEDStopScroll(void) ;
47
48 int16_t CheckConnection(void);
49 bool GetIsConnected(void);
50 void SetIsConnected(bool);
51 bool GetDebugMode(void);
52 void SetDebugMode(bool);
53 uint8_t GetI2CRetryAttemptsNo(void);
54 void SetI2CRetryAttemptsNo(uint8_t);
55 uint16_t GetI2CRetryDelay(void);
56 void SetI2CRetryDelay(uint16_t);
57 uint32_t GetI2CTimeout(void);
58 void SetI2CTimeout(uint32_t);
59
60 private:
61
62 void I2CWriteByte(uint8_t value = 0x00, uint8_t DataOrCmd = SSD1306_COMMAND);
63 // === SSD1306 Command Set ===
64 // Fundamental Commands
65 static constexpr uint8_t SSD1306_SET_CONTRAST_CONTROL = 0x81;
66 static constexpr uint8_t SSD1306_DISPLAY_ALL_ON_RESUME = 0xA4;
67 static constexpr uint8_t SSD1306_DISPLAY_ALL_ON = 0xA5;
68 static constexpr uint8_t SSD1306_NORMAL_DISPLAY = 0xA6;
69 static constexpr uint8_t SSD1306_INVERT_DISPLAY = 0xA7;
70 static constexpr uint8_t SSD1306_DISPLAY_OFF = 0xAE;
71 static constexpr uint8_t SSD1306_DISPLAY_ON = 0xAF;
72 static constexpr uint8_t SSD1306_NOP = 0xE3;
73
74 // Scrolling Commands
75 static constexpr uint8_t SSD1306_RIGHT_HORIZONTAL_SCROLL = 0x26;
76 static constexpr uint8_t SSD1306_LEFT_HORIZONTAL_SCROLL = 0x27;
77 static constexpr uint8_t SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL = 0x29;
78 static constexpr uint8_t SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL = 0x2A;
79 static constexpr uint8_t SSD1306_DEACTIVATE_SCROLL = 0x2E;
80 static constexpr uint8_t SSD1306_ACTIVATE_SCROLL = 0x2F;
81 static constexpr uint8_t SSD1306_SET_VERTICAL_SCROLL_AREA = 0xA3;
82
83 // Addressing Setting Commands
84 static constexpr uint8_t SSD1306_SET_LOWER_COLUMN = 0x00;
85 static constexpr uint8_t SSD1306_SET_HIGHER_COLUMN = 0x10;
86 static constexpr uint8_t SSD1306_MEMORY_ADDR_MODE = 0x20;
87 static constexpr uint8_t SSD1306_SET_COLUMN_ADDR = 0x21;
88 static constexpr uint8_t SSD1306_SET_PAGE_ADDR = 0x22;
89
90 // Hardware Configuration Commands
91 static constexpr uint8_t SSD1306_SET_START_LINE = 0x40;
92 static constexpr uint8_t SSD1306_SET_SEGMENT_REMAP = 0xA0;
93 static constexpr uint8_t SSD1306_SET_MULTIPLEX_RATIO = 0xA8;
94 static constexpr uint8_t SSD1306_COM_SCAN_DIR_INC = 0xC0;
95 static constexpr uint8_t SSD1306_COM_SCAN_DIR_DEC = 0xC8;
96 static constexpr uint8_t SSD1306_SET_DISPLAY_OFFSET = 0xD3;
97 static constexpr uint8_t SSD1306_SET_COM_PINS = 0xDA;
98 static constexpr uint8_t SSD1306_CHARGE_PUMP = 0x8D;
99
100 // Timing & Driving Scheme Setting Commands
101 static constexpr uint8_t SSD1306_SET_DISPLAY_CLOCK_DIV_RATIO = 0xD5;
102 static constexpr uint8_t SSD1306_SET_PRECHARGE_PERIOD = 0xD9;
103 static constexpr uint8_t SSD1306_SET_VCOM_DESELECT = 0xDB;
104
105 // I2C related
106 static constexpr uint8_t SSD1306_COMMAND = 0x00;
107 static constexpr uint8_t SSD1306_DATA = 0xC0;
108 static constexpr uint8_t SSD1306_DATA_CONTINUE = 0x40;
109 // === SSD1306 Command Set END ===
110
111 // I2C
112 uint8_t _I2CRetryAttempts = 3;
113 uint16_t _I2CRetryDelay = 100;
114 uint32_t _TimeoutDelayI2C = 50000;
116 uint8_t _SDataPin = 18;
117 uint8_t _SClkPin = 19;
118 uint16_t _CLKSpeed = 100;
119 i2c_inst_t * _i2c;
121 // flags for debugging & status
122 bool _bIsConnected = false;
123 bool _bSerialDebugFlag = false;
125 // Screen related
126 uint8_t _OLED_WIDTH=128;
127 uint8_t _OLED_HEIGHT=64;
129 std::span<uint8_t> _OLEDbuffer;
131};
class to control OLED and define buffer
Definition ssd1306.hpp:18
void OLEDInvert(bool on)
invert the display
Definition ssd1306.cpp:193
uint8_t GetI2CRetryAttemptsNo(void)
Gets the Number of I2C retry Attempts in event of I2C bus error Set to zero for NO retry attempts....
Definition ssd1306.cpp:612
void OLEDStopScroll(void)
Stop scroll mode.
Definition ssd1306.cpp:544
void OLEDFillPage(uint8_t page_num, uint8_t pixels, uint8_t delay)
Fill the chosen page(1-8) with a datapattern.
Definition ssd1306.cpp:224
void I2CWriteByte(uint8_t value=0x00, uint8_t DataOrCmd=SSD1306_COMMAND)
Writes a byte to I2C address,command or data, used internally.
Definition ssd1306.cpp:327
uint32_t GetI2CTimeout(void)
Gets I2C timeout value used in I2C functions calls.
Definition ssd1306.cpp:639
DisplayRet::Ret_Codes_e OLEDclearBuffer(void)
clears the buffer memory i.e. does NOT write to the screen
Definition ssd1306.cpp:376
void OLEDFillScreen(uint8_t pixel, uint8_t mircodelay)
Fill the screen NOT the buffer with a datapattern.
Definition ssd1306.cpp:203
DisplayRet::Ret_Codes_e OLEDSetBufferPtr(uint8_t width, uint8_t height, std::span< uint8_t > buffer)
sets the buffer pointer to the users screen data buffer
Definition ssd1306.cpp:78
virtual void drawPixel(int16_t x, int16_t y, uint8_t color) override
Draws a Pixel to the screen overides the gfx lib if defined.
Definition ssd1306.cpp:436
void OLEDContrast(uint8_t OLEDcontrast)
Adjusts contrast.
Definition ssd1306.cpp:183
void SetI2CTimeout(uint32_t)
Sets delay the I2C timeout in uS.
Definition ssd1306.cpp:645
uint8_t _OLED_WIDTH
Definition ssd1306.hpp:126
void OLEDdeI2CInit(void)
End I2C operations. I2C pins P1-03 (SDA) and P1-05 (SCL) are returned to their default INPUT behavi...
Definition ssd1306.cpp:98
i2c_inst_t * _i2c
Definition ssd1306.hpp:119
int16_t CheckConnection(void)
Check Connection Function Check if device is on the bus asks for one byte.
Definition ssd1306.cpp:554
bool _bIsConnected
Definition ssd1306.hpp:122
static constexpr uint8_t SSD1306_ADDR
Definition ssd1306.hpp:23
DisplayRet::Ret_Codes_e OLEDupdate(void)
updates the buffer i.e. writes it to the screen
Definition ssd1306.cpp:357
uint32_t _TimeoutDelayI2C
Definition ssd1306.hpp:114
bool _bSerialDebugFlag
Definition ssd1306.hpp:123
uint8_t _I2CRetryAttempts
Definition ssd1306.hpp:112
uint8_t _SClkPin
Definition ssd1306.hpp:117
void OLEDStartScrollRight(uint8_t start, uint8_t stop)
Scroll OLED data to the right.
Definition ssd1306.cpp:474
void OLEDStartScrollLeft(uint8_t start, uint8_t stop)
Scroll OLED data to the left.
Definition ssd1306.cpp:491
void OLEDBuffer(int16_t x, int16_t y, uint8_t w, uint8_t h, std::span< uint8_t > data)
Draw a bitmap directly to the screen.
Definition ssd1306.cpp:397
uint8_t _OLEDAddressI2C
Definition ssd1306.hpp:115
uint8_t _OLED_PAGE_NUM
Definition ssd1306.hpp:128
void SetDebugMode(bool)
setter for debug status
Definition ssd1306.cpp:603
bool GetIsConnected(void)
getter for is connected status
Definition ssd1306.cpp:582
uint8_t _OLED_HEIGHT
Definition ssd1306.hpp:127
void SetI2CRetryAttemptsNo(uint8_t)
Sets the Number of I2C retry Attempts in event of I2C bus error Set to zero for NO retry attempts.
Definition ssd1306.cpp:619
void SetI2CRetryDelay(uint16_t)
Sets delay in mS between retry attempts in event of I2C error.
Definition ssd1306.cpp:632
uint16_t _I2CRetryDelay
Definition ssd1306.hpp:113
void OLEDinit()
Called from OLEDbegin carries out Power on sequence and register init.
Definition ssd1306.cpp:117
uint16_t GetI2CRetryDelay(void)
Gets delay in mS between retry attempts in event of I2C error.
Definition ssd1306.cpp:626
bool GetDebugMode(void)
getter for debug status
Definition ssd1306.cpp:596
uint8_t _SDataPin
Definition ssd1306.hpp:116
std::span< uint8_t > _OLEDbuffer
Definition ssd1306.hpp:129
uint16_t _CLKSpeed
Definition ssd1306.hpp:118
void SetIsConnected(bool)
setter for is connected status
Definition ssd1306.cpp:589
DisplayRet::Ret_Codes_e OLEDBitmap(int16_t x, int16_t y, int16_t w, int16_t h, std::span< const uint8_t > bitmap, bool invert)
Draw a bitmap to the buffer.
Definition ssd1306.cpp:254
void OLEDEnable(uint8_t on)
Turns On Display.
Definition ssd1306.cpp:174
void OLEDStartScrollDiagRight(uint8_t start, uint8_t stop)
Scroll OLED data diagonally to the right.
Definition ssd1306.cpp:508
void OLEDStartScrollDiagLeft(uint8_t start, uint8_t stop)
Scroll OLED data diagonally to the left.
Definition ssd1306.cpp:527
void OLEDPowerDown(void)
Disables OLED Call when powering down.
Definition ssd1306.cpp:108
DisplayRet::Ret_Codes_e OLEDbegin(uint8_t I2c_address=SSD1306_ADDR, i2c_inst_t *i2c_type=i2c1, uint16_t CLKspeed=100, uint8_t SDApin=18, uint8_t SCLKpin=19)
begin Method initialise OLED I2C communication
Definition ssd1306.cpp:34
Graphics class to hold graphic related functions.
Definition display_graphics.hpp:22
int16_t height(void) const
Gets the height of the display (per current _rotation)
Definition display_graphics.cpp:677
int16_t width(void) const
Gets the width of the display (per current _rotation)
Definition display_graphics.cpp:668
header file for the graphics based functions, 1-bit color displays.
Ret_Codes_e
Definition display_data.hpp:32