diff --git a/LCD_OLED.h b/LCD_OLED.h
index 8e570e2..0655c98 100644
--- a/LCD_OLED.h
+++ b/LCD_OLED.h
@@ -22,7 +22,7 @@
// It is NOT a .cpp file to prevent it being compiled and demanding libraries even when not needed.
#include "Wire.h"
-#include "SSD1306/SSD1306AsciiWire.h"
+#include "SSD1306Ascii.h"
SSD1306AsciiWire LCDDriver;
// DEVICE SPECIFIC LCDDisplay Implementation for OLED
diff --git a/SSD1306/SSD1306AsciiWire.h b/SSD1306/SSD1306AsciiWire.h
deleted file mode 100644
index 291f9fd..0000000
--- a/SSD1306/SSD1306AsciiWire.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Based on Arduino SSD1306Ascii Library, Copyright (C) 2015 by William Greiman
- * Modifications (C) 2021 Neil McKechnie
- *
- * This Library is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This Library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with the Arduino SSD1306Ascii Library. If not, see
- * .
- */
-/**
- * @file SSD1306AsciiWire.h
- * @brief Class for I2C displays using Wire.
- */
-#ifndef SSD1306AsciiWire_h
-#define SSD1306AsciiWire_h
-#include
-#include "SSD1306Ascii.h"
-/**
- * @class SSD1306AsciiWire
- * @brief Class for I2C displays using Wire.
- */
-class SSD1306AsciiWire : public SSD1306Ascii {
- public:
-#define m_oledWire Wire
- /**
- * @brief Initialize the display controller.
- *
- * @param[in] dev A device initialization structure.
- * @param[in] i2cAddr The I2C address of the display controller.
- */
- void begin(const DevType* dev, uint8_t i2cAddr) {
-#if OPTIMIZE_I2C
- m_nData = 0;
-#endif // OPTIMIZE_I2C
- m_i2cAddr = i2cAddr;
- init(dev);
- }
- /**
- * @brief Initialize the display controller.
- *
- * @param[in] dev A device initialization structure.
- * @param[in] i2cAddr The I2C address of the display controller.
- * @param[in] rst The display controller reset pin.
- */
- void begin(const DevType* dev, uint8_t i2cAddr, uint8_t rst) {
- oledReset(rst);
- begin(dev, i2cAddr);
- }
- /**
- * @brief Set the I2C clock rate to 400 kHz.
- * Deprecated use Wire.setClock(400000L)
- */
- void set400kHz() __attribute__((deprecated("use Wire.setClock(400000L)"))) {
- m_oledWire.setClock(400000L);
- }
-
- protected:
- void writeDisplay(uint8_t b, uint8_t mode) {
-#if OPTIMIZE_I2C
- if (m_nData > 16 || (m_nData && mode == SSD1306_MODE_CMD)) {
- m_oledWire.endTransmission();
- m_nData = 0;
- }
- if (m_nData == 0) {
- m_oledWire.beginTransmission(m_i2cAddr);
- m_oledWire.write(mode == SSD1306_MODE_CMD ? 0X00 : 0X40);
- }
- m_oledWire.write(b);
- if (mode == SSD1306_MODE_RAM_BUF) {
- m_nData++;
- } else {
- m_oledWire.endTransmission();
- m_nData = 0;
- }
-#else // OPTIMIZE_I2C
- m_oledWire.beginTransmission(m_i2cAddr);
- m_oledWire.write(mode == SSD1306_MODE_CMD ? 0X00: 0X40);
- m_oledWire.write(b);
- m_oledWire.endTransmission();
-#endif // OPTIMIZE_I2C
- }
-
- void flushDisplay() {
-#if OPTIMIZE_I2C
- if (m_nData) {
- m_oledWire.endTransmission();
- m_nData = 0;
- }
-#endif // OPTIMIZE_I2C
- }
-
- protected:
- uint8_t m_i2cAddr;
-#if OPTIMIZE_I2C
- uint8_t m_nData;
-#endif // OPTIMIZE_I2C
-};
-#endif // SSD1306AsciiWire_h
diff --git a/SSD1306/fonts/allFonts.h b/SSD1306/fonts/allFonts.h
deleted file mode 100644
index f99eab6..0000000
--- a/SSD1306/fonts/allFonts.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * allFonts.h font header for GLCD library
- * The fonts listed below will be available in a sketch if this file is included
- *
- * If you create your own fonts you can add the header to this file
- *
- * Note that the build environment only holds a font in Flash if its selected
- * so there is no penalty to including a font file here if its not used
- */
-/**
- * @file allFonts.h
- * @brief Font definitions.
- */
-#ifndef _allFonts_h_
-#define _allFonts_h_
-
-#ifdef __AVR__
-#include
-/** declare a font for AVR. */
-#define GLCDFONTDECL(_n) static const uint8_t __attribute__ ((progmem))_n[]
-#define readFontByte(addr) pgm_read_byte(addr)
-#else // __AVR__
-/** declare a font. */
-#define GLCDFONTDECL(_n) static const uint8_t _n[]
-/** Fake read from flash. */
-#define readFontByte(addr) (*(const unsigned char *)(addr))
-#endif // __AVR__
-//------------------------------------------------------------------------------
-// Font Indices
-/** No longer used Big Endian length field. Now indicates font type.
- *
- * 00 00 (fixed width font with 1 padding pixel on right and below)
- *
- * 00 01 (fixed width font with no padding pixels)
- */
-#define FONT_LENGTH 0
-/** Maximum character width. */
-#define FONT_WIDTH 2
-/** Font hight in pixels */
-#define FONT_HEIGHT 3
-/** Ascii value of first character */
-#define FONT_FIRST_CHAR 4
-/** count of characters in font. */
-#define FONT_CHAR_COUNT 5
-/** Offset to width table. */
-#define FONT_WIDTH_TABLE 6
-//
-// FONT_LENGTH is a 16 bit Big Endian length field.
-// Unfortunately, FontCreator2 screwed up the value it put in the field
-// so it is pretty much meaningless. However it still is used to indicate
-// some special things.
-// 00 00 (fixed width font with 1 padding pixel on right and below)
-// 00 01 (fixed width font with no padding pixels)
-// FONT_WIDTH it the max character width.
-// any other value means variable width font in FontCreator2 (thiele)
-// format with pixel padding
-
-#include "System5x7.h" // system font (fixed width)
-
-#endif
diff --git a/SSD1306/SSD1306Ascii.cpp b/SSD1306Ascii.cpp
similarity index 99%
rename from SSD1306/SSD1306Ascii.cpp
rename to SSD1306Ascii.cpp
index 95bfaf0..e125eff 100644
--- a/SSD1306/SSD1306Ascii.cpp
+++ b/SSD1306Ascii.cpp
@@ -16,6 +16,7 @@
* .
*/
#include "SSD1306Ascii.h"
+
//------------------------------------------------------------------------------
void SSD1306Ascii::clear() {
clear(0, displayWidth() - 1, 0 , displayRows() - 1);
diff --git a/SSD1306/SSD1306Ascii.h b/SSD1306Ascii.h
similarity index 78%
rename from SSD1306/SSD1306Ascii.h
rename to SSD1306Ascii.h
index c178997..16a3556 100644
--- a/SSD1306/SSD1306Ascii.h
+++ b/SSD1306Ascii.h
@@ -16,14 +16,17 @@
* .
*/
/**
- * @file SSD1306Ascii.h
- * @brief Base class for ssd1306 displays.
+ * @file SSD1306AsciiWire.h
+ * @brief Class for I2C displays using Wire.
*/
-#ifndef SSD1306Ascii_h
-#define SSD1306Ascii_h
+#ifndef SSD1306AsciiWire_h
+#define SSD1306AsciiWire_h
+
+#include
#include "Arduino.h"
#include "SSD1306init.h"
-#include "fonts/allFonts.h"
+#include "SSD1306font.h"
+
//------------------------------------------------------------------------------
/** SSD1306Ascii version basis */
#define SDD1306_ASCII_VERSION 1.3.0
@@ -33,8 +36,6 @@
/** Use larger faster I2C code. */
#define OPTIMIZE_I2C 1
-/** AvrI2c uses 400 kHz fast mode if AVRI2C_FASTMODE is nonzero else 100 kHz. */
-#define AVRI2C_FASTMODE 1
//------------------------------------------------------------------------------
// Values for writeDisplay() mode parameter.
/** Write to Command register. */
@@ -44,19 +45,7 @@
/** Write to display RAM with possible buffering. */
#define SSD1306_MODE_RAM_BUF 2
//------------------------------------------------------------------------------
-/**
- * @brief Reset the display controller.
- *
- * @param[in] rst Reset pin number.
- */
-inline void oledReset(uint8_t rst) {
- pinMode(rst, OUTPUT);
- digitalWrite(rst, LOW);
- delay(10);
- digitalWrite(rst, HIGH);
- delay(10);
-}
-//------------------------------------------------------------------------------
+
/**
* @class SSD1306Ascii
* @brief SSD1306 base class
@@ -197,8 +186,6 @@ class SSD1306Ascii : public Print {
*/
size_t write(uint8_t c);
-
-
protected:
virtual void writeDisplay(uint8_t b, uint8_t mode) = 0;
virtual void flushDisplay() = 0;
@@ -209,4 +196,68 @@ class SSD1306Ascii : public Print {
uint8_t m_colOffset; // Column offset RAM to SEG.
const uint8_t* m_font = nullptr; // Current font.
};
-#endif // SSD1306Ascii_h
+
+
+/**
+ * @class SSD1306AsciiWire
+ * @brief Class for I2C displays using Wire.
+ */
+class SSD1306AsciiWire : public SSD1306Ascii {
+ public:
+#define m_oledWire Wire
+ /**
+ * @brief Initialize the display controller.
+ *
+ * @param[in] dev A device initialization structure.
+ * @param[in] i2cAddr The I2C address of the display controller.
+ */
+ void begin(const DevType* dev, uint8_t i2cAddr) {
+#if OPTIMIZE_I2C
+ m_nData = 0;
+#endif // OPTIMIZE_I2C
+ m_i2cAddr = i2cAddr;
+ init(dev);
+ }
+
+ protected:
+ void writeDisplay(uint8_t b, uint8_t mode) {
+#if OPTIMIZE_I2C
+ if (m_nData > 16 || (m_nData && mode == SSD1306_MODE_CMD)) {
+ m_oledWire.endTransmission();
+ m_nData = 0;
+ }
+ if (m_nData == 0) {
+ m_oledWire.beginTransmission(m_i2cAddr);
+ m_oledWire.write(mode == SSD1306_MODE_CMD ? 0X00 : 0X40);
+ }
+ m_oledWire.write(b);
+ if (mode == SSD1306_MODE_RAM_BUF) {
+ m_nData++;
+ } else {
+ m_oledWire.endTransmission();
+ m_nData = 0;
+ }
+#else // OPTIMIZE_I2C
+ m_oledWire.beginTransmission(m_i2cAddr);
+ m_oledWire.write(mode == SSD1306_MODE_CMD ? 0X00: 0X40);
+ m_oledWire.write(b);
+ m_oledWire.endTransmission();
+#endif // OPTIMIZE_I2C
+ }
+
+ void flushDisplay() {
+#if OPTIMIZE_I2C
+ if (m_nData) {
+ m_oledWire.endTransmission();
+ m_nData = 0;
+ }
+#endif // OPTIMIZE_I2C
+ }
+
+ protected:
+ uint8_t m_i2cAddr;
+#if OPTIMIZE_I2C
+ uint8_t m_nData;
+#endif // OPTIMIZE_I2C
+};
+#endif // SSD1306AsciiWire_h
diff --git a/SSD1306/fonts/System5x7.h b/SSD1306font.h
similarity index 80%
rename from SSD1306/fonts/System5x7.h
rename to SSD1306font.h
index bb14510..b0fa72b 100644
--- a/SSD1306/fonts/System5x7.h
+++ b/SSD1306font.h
@@ -29,12 +29,44 @@
* // bit field of all characters
*/
-#ifndef SYSTEM5x7_H
-#define SYSTEM5x7_H
+#ifndef SSD1306font_H
+#define SSD1306font_H
#define SYSTEM5x7_WIDTH 5
#define SYSTEM5x7_HEIGHT 7
+#ifdef __AVR__
+#include
+/** declare a font for AVR. */
+#define GLCDFONTDECL(_n) static const uint8_t __attribute__ ((progmem))_n[]
+#define readFontByte(addr) pgm_read_byte(addr)
+#else // __AVR__
+/** declare a font. */
+#define GLCDFONTDECL(_n) static const uint8_t _n[]
+/** Fake read from flash. */
+#define readFontByte(addr) (*(const unsigned char *)(addr))
+#endif // __AVR__
+//------------------------------------------------------------------------------
+// Font Indices
+/** No longer used Big Endian length field. Now indicates font type.
+ *
+ * 00 00 (fixed width font with 1 padding pixel on right and below)
+ *
+ * 00 01 (fixed width font with no padding pixels)
+ */
+#define FONT_LENGTH 0
+/** Maximum character width. */
+#define FONT_WIDTH 2
+/** Font hight in pixels */
+#define FONT_HEIGHT 3
+/** Ascii value of first character */
+#define FONT_FIRST_CHAR 4
+/** count of characters in font. */
+#define FONT_CHAR_COUNT 5
+/** Offset to width table. */
+#define FONT_WIDTH_TABLE 6
+//------------------------------------------------------------------------------
+
GLCDFONTDECL(System5x7) = {
0x0, 0x0, // size of zero indicates fixed width font,
0x05, // width
diff --git a/SSD1306/SSD1306init.h b/SSD1306init.h
similarity index 100%
rename from SSD1306/SSD1306init.h
rename to SSD1306init.h