mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-07-15 17:52:08 +02:00
capitalize folder names and file names Same like class file names
This commit is contained in:
282
src/Display/Display.cpp
Normal file
282
src/Display/Display.cpp
Normal file
@ -0,0 +1,282 @@
|
||||
#include "Display.h"
|
||||
#include "../Libraries/Adafruit_SH110x/Adafruit_SH110X.h"
|
||||
#include "../Libraries/Adafruit_SSD1306_Wemos_OLED/Adafruit_SSD1306.h"
|
||||
|
||||
#define disp(func) \
|
||||
if (this->_boardType == DIY_BASIC) { \
|
||||
((Adafruit_SSD1306 *)(this->oled))->func; \
|
||||
} else { \
|
||||
((Adafruit_SH110X *)(this->oled))->func; \
|
||||
}
|
||||
|
||||
#if defined(ESP8266)
|
||||
void Display::begin(TwoWire &wire, Stream &debugStream) {
|
||||
this->_debugStream = &debugStream;
|
||||
this->begin(wire);
|
||||
}
|
||||
#else
|
||||
#endif
|
||||
|
||||
Display::Display(BoardType type) : _boardType(type) {}
|
||||
|
||||
/**
|
||||
* @brief Initialize display, should be call this function before call of ther,
|
||||
* if not it's always return failure.
|
||||
*
|
||||
* @param wire TwoWire instance, Must be initialized
|
||||
*/
|
||||
void Display::begin(TwoWire &wire) {
|
||||
if (_isBegin) {
|
||||
AgLog("Initialized, call end() then try again");
|
||||
return;
|
||||
}
|
||||
|
||||
this->_bsp = getBoardDef(this->_boardType);
|
||||
if ((this->_bsp == nullptr) || (this->_bsp->I2C.supported == false) ||
|
||||
(this->_bsp->OLED.supported == false)) {
|
||||
AgLog("Init failed: board not supported");
|
||||
return;
|
||||
}
|
||||
|
||||
/** Init OLED */
|
||||
if (this->_boardType == DIY_BASIC) {
|
||||
AgLog("Init Adafruit_SSD1306");
|
||||
Adafruit_SSD1306 *_oled = new Adafruit_SSD1306();
|
||||
_oled->begin(wire, SSD1306_SWITCHCAPVCC, this->_bsp->OLED.addr);
|
||||
this->oled = _oled;
|
||||
} else {
|
||||
AgLog("Init Adafruit_SH1106G");
|
||||
Adafruit_SH1106G *_oled = new Adafruit_SH1106G(
|
||||
this->_bsp->OLED.width, this->_bsp->OLED.height, &wire);
|
||||
_oled->begin(this->_bsp->OLED.addr, false);
|
||||
this->oled = _oled;
|
||||
}
|
||||
|
||||
this->_isBegin = true;
|
||||
disp(clearDisplay());
|
||||
AgLog("Initialize");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clear display buffer
|
||||
*
|
||||
*/
|
||||
void Display::clear(void) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(clearDisplay());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Invert display color
|
||||
*
|
||||
* @param i 0: black, other is white
|
||||
*/
|
||||
void Display::invertDisplay(uint8_t i) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(invertDisplay(i));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send display frame buffer to OLED
|
||||
*
|
||||
*/
|
||||
void Display::show() {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(display());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set display contract
|
||||
*
|
||||
* @param value Contract (0;255);
|
||||
*/
|
||||
void Display::setContrast(uint8_t value) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(setContrast(value));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw pixel into display frame buffer, call show to draw to
|
||||
* display(OLED)
|
||||
*
|
||||
* @param x X Position
|
||||
* @param y Y Position
|
||||
* @param color Color (0: black, other white)
|
||||
*/
|
||||
void Display::drawPixel(int16_t x, int16_t y, uint16_t color) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(drawPixel(x, y, color));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set text size, it's scale default font instead of point to multiple
|
||||
* font has define for special size
|
||||
*
|
||||
* @param size Size of text (default = 1)
|
||||
*/
|
||||
void Display::setTextSize(int size) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(setTextSize(size));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Move draw cursor into new position
|
||||
*
|
||||
* @param x X Position
|
||||
* @param y Y Position
|
||||
*/
|
||||
void Display::setCursor(int16_t x, int16_t y) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(setCursor(x, y));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set Text Color
|
||||
*
|
||||
* @param color 0:black, 1: While
|
||||
*/
|
||||
void Display::setTextColor(uint16_t color) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(setTextColor(color));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set text foreground color and background color
|
||||
*
|
||||
* @param foreGroundColor Text Color (foreground color)
|
||||
* @param backGroundColor Text background color
|
||||
*/
|
||||
void Display::setTextColor(uint16_t foreGroundColor, uint16_t backGroundColor) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(setTextColor(foreGroundColor, backGroundColor));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw text to display framebuffer, call show() to draw to display
|
||||
* (OLED)
|
||||
*
|
||||
* @param text String
|
||||
*/
|
||||
void Display::setText(String text) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(print(text));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw bitmap into display framebuffer, call show() to draw to display
|
||||
* (OLED)
|
||||
*
|
||||
* @param x X Position
|
||||
* @param y Y Position
|
||||
* @param bitmap Bitmap buffer
|
||||
* @param w Bitmap width
|
||||
* @param h Bitmap hight
|
||||
* @param color Bitmap color
|
||||
*/
|
||||
void Display::drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[],
|
||||
int16_t w, int16_t h, uint16_t color) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(drawBitmap(x, y, bitmap, w, h, color));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set text to display framebuffer, call show() to draw into to display
|
||||
* (OLED)
|
||||
*
|
||||
* @param text Character buffer
|
||||
*/
|
||||
void Display::setText(const char text[]) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(print(text));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw line to display framebuffer, call show() to draw to
|
||||
* display(OLED)
|
||||
*
|
||||
* @param x0 Start X position
|
||||
* @param y0 Start Y position
|
||||
* @param x1 End X Position
|
||||
* @param y1 End Y Position
|
||||
* @param color Color (0: black, otherwise white)
|
||||
*/
|
||||
void Display::drawLine(int x0, int y0, int x1, int y1, uint16_t color) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(drawLine(x0, y0, x1, y1, color));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw circle to display framebuffer,
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
* @param r
|
||||
* @param color
|
||||
*/
|
||||
void Display::drawCircle(int x, int y, int r, uint16_t color) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(drawCircle(x, y, r, color));
|
||||
}
|
||||
|
||||
void Display::drawRect(int x0, int y0, int x1, int y1, uint16_t color) {
|
||||
if (this->isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(drawRect(x0, y0, x1, y1, color));
|
||||
}
|
||||
|
||||
bool Display::isBegin(void) {
|
||||
if (this->_isBegin) {
|
||||
return true;
|
||||
}
|
||||
AgLog("Display not-initialized");
|
||||
return false;
|
||||
}
|
||||
|
||||
void Display::setRotation(uint8_t r) {
|
||||
if (isBegin() == false) {
|
||||
return;
|
||||
}
|
||||
disp(setRotation(r));
|
||||
}
|
||||
|
||||
void Display::end(void) {
|
||||
if (this->_isBegin == false) {
|
||||
return;
|
||||
}
|
||||
_isBegin = false;
|
||||
if (this->_boardType == DIY_BASIC) {
|
||||
delete ((Adafruit_SSD1306 *)(this->oled));
|
||||
} else {
|
||||
delete ((Adafruit_SH110X *)(this->oled));
|
||||
}
|
||||
AgLog("De-initialize");
|
||||
}
|
57
src/Display/Display.h
Normal file
57
src/Display/Display.h
Normal file
@ -0,0 +1,57 @@
|
||||
#ifndef _AIR_GRADIENT_OLED_H_
|
||||
#define _AIR_GRADIENT_OLED_H_
|
||||
|
||||
#include "../main/BoardDef.h"
|
||||
#include <Arduino.h>
|
||||
#include <Wire.h>
|
||||
|
||||
/**
|
||||
* @brief The class define how to handle the OLED display on Airgradient has
|
||||
* attached or support OLED display like: ONE-V9, Basic-V4
|
||||
*/
|
||||
class Display {
|
||||
public:
|
||||
const uint16_t COLOR_WHILTE = 1;
|
||||
const uint16_t COLOR_BLACK = 0;
|
||||
#if defined(ESP8266)
|
||||
void begin(TwoWire &wire, Stream &debugStream);
|
||||
#else
|
||||
#endif
|
||||
Display(BoardType type);
|
||||
void begin(TwoWire &wire);
|
||||
void end(void);
|
||||
|
||||
void clear(void);
|
||||
void invertDisplay(uint8_t i);
|
||||
void show();
|
||||
|
||||
void setContrast(uint8_t value);
|
||||
void drawPixel(int16_t x, int16_t y, uint16_t color);
|
||||
void setTextSize(int size);
|
||||
void setCursor(int16_t x, int16_t y);
|
||||
void setTextColor(uint16_t color);
|
||||
void setTextColor(uint16_t foreGroundColor, uint16_t backGroundColor);
|
||||
void setText(String text);
|
||||
void setText(const char text[]);
|
||||
void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w,
|
||||
int16_t h, uint16_t color);
|
||||
void drawLine(int x0, int y0, int x1, int y1, uint16_t color);
|
||||
void drawCircle(int x, int y, int r, uint16_t color);
|
||||
void drawRect(int x0, int y0, int x1, int y1, uint16_t color);
|
||||
void setRotation(uint8_t r);
|
||||
|
||||
private:
|
||||
BoardType _boardType;
|
||||
const BoardDef *_bsp = nullptr;
|
||||
void *oled;
|
||||
bool _isBegin = false;
|
||||
#if defined(ESP8266)
|
||||
const char *TAG = "oled";
|
||||
Stream *_debugStream = nullptr;
|
||||
#else
|
||||
|
||||
#endif
|
||||
bool isBegin(void);
|
||||
};
|
||||
|
||||
#endif /** _AIR_GRADIENT_OLED_H_ */
|
Reference in New Issue
Block a user