displaylib_1bit_PICO 2.2.0
1-bit colour graphic display library, Rpi PICO RP2040 library
Loading...
Searching...
No Matches
ssd1315.hpp
Go to the documentation of this file.
1
8#pragma once
9
10// Library includes
11#include <cstdbool>
12#include <span> // C++ 20
13#include "display_graphics.hpp"
14#include "hardware/i2c.h"
15
20 public:
21 SSD1315(int16_t , int16_t );
22 ~SSD1315(){};
23
24 static constexpr uint8_t SSD1315_ADDR = 0x3C;
26 DisplayRet::Ret_Codes_e OLEDSetBufferPtr(uint8_t width, uint8_t height , std::span<uint8_t> buffer);
27 virtual void drawPixel(int16_t x, int16_t y, uint8_t color) override;
30 void OLEDBuffer(int16_t x, int16_t y, uint8_t w, uint8_t h, std::span<uint8_t> data);
31 void OLEDFillScreen(uint8_t pixel, uint8_t mircodelay);
32 void OLEDFillPage(uint8_t page_num, uint8_t pixels,uint8_t delay);
33 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);
34 DisplayRet::Ret_Codes_e OLEDbegin(uint8_t I2c_address= SSD1315_ADDR , i2c_inst_t* i2c_type = i2c1 , uint16_t CLKspeed = 100, uint8_t SDApin = 18, uint8_t SCLKpin = 19);
35 void OLEDinit();
36 void OLEDdeI2CInit(void);
37 void OLEDPowerDown(void);
38
39 void OLEDEnable(uint8_t on);
40 void OLEDContrast(uint8_t OLEDcontrast);
41 void OLEDInvert(bool on);
42
43 void OLEDStartScrollRight(uint8_t start, uint8_t stop);
44 void OLEDStartScrollLeft(uint8_t start, uint8_t stop) ;
45 void OLEDStartScrollDiagRight(uint8_t start, uint8_t stop) ;
46 void OLEDStartScrollDiagLeft(uint8_t start, uint8_t stop) ;
47 void OLEDStopScroll(void) ;
48
49 int16_t CheckConnection(void);
50 bool GetIsConnected(void);
51 void SetIsConnected(bool);
52 bool GetDebugMode(void);
53 void SetDebugMode(bool);
54 uint8_t GetI2CRetryAttemptsNo(void);
55 void SetI2CRetryAttemptsNo(uint8_t);
56 uint16_t GetI2CRetryDelay(void);
57 void SetI2CRetryDelay(uint16_t);
58 uint32_t GetI2CTimeout(void);
59 void SetI2CTimeout(uint32_t);
60
61 private:
62
63 void I2CWriteByte(uint8_t value = 0x00, uint8_t DataOrCmd = SSD1315_COMMAND);
64 // === SSD1315 Command Set ===
65 // Fundamental Commands
66 static constexpr uint8_t SSD1315_SET_CONTRAST_CONTROL = 0x81;
67 static constexpr uint8_t SSD1315_DISPLAY_ALL_ON_RESUME = 0xA4;
68 static constexpr uint8_t SSD1315_DISPLAY_ALL_ON = 0xA5;
69 static constexpr uint8_t SSD1315_NORMAL_DISPLAY = 0xA6;
70 static constexpr uint8_t SSD1315_INVERT_DISPLAY = 0xA7;
71 static constexpr uint8_t SSD1315_DISPLAY_OFF = 0xAE;
72 static constexpr uint8_t SSD1315_DISPLAY_ON = 0xAF;
73 static constexpr uint8_t SSD1315_NOP = 0xE3;
74
75 // Scrolling Commands
76 static constexpr uint8_t SSD1315_RIGHT_HORIZONTAL_SCROLL = 0x26;
77 static constexpr uint8_t SSD1315_LEFT_HORIZONTAL_SCROLL = 0x27;
78 static constexpr uint8_t SSD1315_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL = 0x29;
79 static constexpr uint8_t SSD1315_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL = 0x2A;
80 static constexpr uint8_t SSD1315_DEACTIVATE_SCROLL = 0x2E;
81 static constexpr uint8_t SSD1315_ACTIVATE_SCROLL = 0x2F;
82 static constexpr uint8_t SSD1315_SET_VERTICAL_SCROLL_AREA = 0xA3;
83
84 // Addressing Setting Commands
85 static constexpr uint8_t SSD1315_SET_LOWER_COLUMN = 0x00;
86 static constexpr uint8_t SSD1315_SET_HIGHER_COLUMN = 0x10;
87 static constexpr uint8_t SSD1315_MEMORY_ADDR_MODE = 0x20;
88 static constexpr uint8_t SSD1315_SET_COLUMN_ADDR = 0x21;
89 static constexpr uint8_t SSD1315_SET_PAGE_ADDR = 0x22;
90
91 // Hardware Configuration Commands
92 static constexpr uint8_t SSD1315_SET_START_LINE = 0x40;
93 static constexpr uint8_t SSD1315_SET_SEGMENT_REMAP = 0xA0;
94 static constexpr uint8_t SSD1315_SET_MULTIPLEX_RATIO = 0xA8;
95 static constexpr uint8_t SSD1315_COM_SCAN_DIR_INC = 0xC0;
96 static constexpr uint8_t SSD1315_COM_SCAN_DIR_DEC = 0xC8;
97 static constexpr uint8_t SSD1315_SET_DISPLAY_OFFSET = 0xD3;
98 static constexpr uint8_t SSD1315_SET_COM_PINS = 0xDA;
99 static constexpr uint8_t SSD1315_CHARGE_PUMP = 0x8D;
100
101 // Timing & Driving Scheme Setting Commands
102 static constexpr uint8_t SSD1315_SET_DISPLAY_CLOCK_DIV_RATIO = 0xD5;
103 static constexpr uint8_t SSD1315_SET_PRECHARGE_PERIOD = 0xD9;
104 static constexpr uint8_t SSD1315_SET_VCOM_DESELECT = 0xDB;
105
106 // Data & command related
107 static constexpr uint8_t SSD1315_COMMAND = 0x00;
108 static constexpr uint8_t SSD1315_DATA = 0xC0;
109 static constexpr uint8_t SSD1315_DATA_CONTINUE = 0x40;
110
111 // Page address Set
112 static constexpr uint8_t SSD1315_PAGE_ADDR_0 = 0xB0;
113 // === SSD1315 Command Set END ===
114
115 // I2C
116 uint8_t _I2CRetryAttempts = 3;
117 uint16_t _I2CRetryDelay = 100;
118 uint32_t _TimeoutDelayI2C = 50000;
120 uint8_t _SDataPin = 18;
121 uint8_t _SClkPin = 19;
122 uint16_t _CLKSpeed = 100;
123 i2c_inst_t * _i2c;
125 // flags for debugging & status
126 bool _bIsConnected = false;
127 bool _bSerialDebugFlag = false;
129 // Screen related
130 uint8_t _OLED_WIDTH=128;
131 uint8_t _OLED_HEIGHT=64;
133 std::span<uint8_t> _OLEDbuffer;
135};
class to control OLED and define buffer
Definition ssd1315.hpp:19
uint16_t _I2CRetryDelay
Definition ssd1315.hpp:117
void SetDebugMode(bool)
setter for debug status
Definition ssd1315.cpp:599
DisplayRet::Ret_Codes_e OLEDupdate(void)
updates the buffer i.e. writes it to the screen
Definition ssd1315.cpp:353
static constexpr uint8_t SSD1315_ADDR
Definition ssd1315.hpp:24
uint8_t _OLED_WIDTH
Definition ssd1315.hpp:130
bool _bIsConnected
Definition ssd1315.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 ssd1315.cpp:98
void OLEDFillScreen(uint8_t pixel, uint8_t mircodelay)
Fill the screen NOT the buffer with a datapattern.
Definition ssd1315.cpp:199
void OLEDEnable(uint8_t on)
Turns On Display.
Definition ssd1315.cpp:170
uint8_t _OLED_HEIGHT
Definition ssd1315.hpp:131
uint8_t _SDataPin
Definition ssd1315.hpp:120
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 ssd1315.cpp:615
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 ssd1315.cpp:78
void I2CWriteByte(uint8_t value=0x00, uint8_t DataOrCmd=SSD1315_COMMAND)
Writes a byte to I2C address,command or data, used internally.
Definition ssd1315.cpp:323
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 ssd1315.cpp:393
void OLEDStartScrollRight(uint8_t start, uint8_t stop)
Scroll OLED data to the right.
Definition ssd1315.cpp:470
uint32_t _TimeoutDelayI2C
Definition ssd1315.hpp:118
void OLEDInvert(bool on)
invert the display
Definition ssd1315.cpp:189
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 ssd1315.cpp:250
void OLEDPowerDown(void)
Disables OLED Call when powering down.
Definition ssd1315.cpp:108
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 ssd1315.cpp:432
uint8_t _OLEDAddressI2C
Definition ssd1315.hpp:119
bool _bSerialDebugFlag
Definition ssd1315.hpp:127
i2c_inst_t * _i2c
Definition ssd1315.hpp:123
uint16_t _CLKSpeed
Definition ssd1315.hpp:122
int16_t CheckConnection(void)
Check Connection Function Check if device is on the bus asks for one byte.
Definition ssd1315.cpp:550
uint8_t _SClkPin
Definition ssd1315.hpp:121
void OLEDStartScrollDiagRight(uint8_t start, uint8_t stop)
Scroll OLED data diagonally to the right.
Definition ssd1315.cpp:504
uint8_t _OLED_PAGE_NUM
Definition ssd1315.hpp:132
void SetIsConnected(bool)
setter for is connected status
Definition ssd1315.cpp:585
void OLEDStopScroll(void)
Stop scroll mode.
Definition ssd1315.cpp:540
DisplayRet::Ret_Codes_e OLEDclearBuffer(void)
clears the buffer memory i.e. does NOT write to the screen
Definition ssd1315.cpp:372
void OLEDinit()
Called from OLEDbegin carries out Power on sequence and register init.
Definition ssd1315.cpp:117
bool GetIsConnected(void)
getter for is connected status
Definition ssd1315.cpp:578
bool GetDebugMode(void)
getter for debug status
Definition ssd1315.cpp:592
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 ssd1315.cpp:608
uint16_t GetI2CRetryDelay(void)
Gets delay in mS between retry attempts in event of I2C error.
Definition ssd1315.cpp:622
void OLEDContrast(uint8_t OLEDcontrast)
Adjusts contrast.
Definition ssd1315.cpp:179
uint32_t GetI2CTimeout(void)
Gets I2C timeout value used in I2C functions calls.
Definition ssd1315.cpp:635
void OLEDFillPage(uint8_t page_num, uint8_t pixels, uint8_t delay)
Fill the chosen page(1-8) with a datapattern.
Definition ssd1315.cpp:220
void OLEDStartScrollDiagLeft(uint8_t start, uint8_t stop)
Scroll OLED data diagonally to the left.
Definition ssd1315.cpp:523
std::span< uint8_t > _OLEDbuffer
Definition ssd1315.hpp:133
void SetI2CRetryDelay(uint16_t)
Sets delay in mS between retry attempts in event of I2C error.
Definition ssd1315.cpp:628
void OLEDStartScrollLeft(uint8_t start, uint8_t stop)
Scroll OLED data to the left.
Definition ssd1315.cpp:487
void SetI2CTimeout(uint32_t)
Sets delay the I2C timeout in uS.
Definition ssd1315.cpp:641
uint8_t _I2CRetryAttempts
Definition ssd1315.hpp:116
DisplayRet::Ret_Codes_e OLEDbegin(uint8_t I2c_address=SSD1315_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 ssd1315.cpp:34
Graphics class to hold graphic related functions.
Definition display_graphics.hpp:24
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