diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79b5594 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/.DS_Store diff --git a/CAD/Datasheets/OLED-31-SPI-33-V-WHI-004.jpg b/CAD/Datasheets/OLED-31-SPI-33-V-WHI-004.jpg new file mode 100644 index 0000000..e25bc2d Binary files /dev/null and b/CAD/Datasheets/OLED-31-SPI-33-V-WHI-004.jpg differ diff --git a/CAD/Datasheets/OLED-31-SPI-33-V-WHI-006.jpg b/CAD/Datasheets/OLED-31-SPI-33-V-WHI-006.jpg new file mode 100644 index 0000000..ff659c2 Binary files /dev/null and b/CAD/Datasheets/OLED-31-SPI-33-V-WHI-006.jpg differ diff --git a/CAD/Datasheets/OLED_256x64_1.jpg b/CAD/Datasheets/OLED_256x64_1.jpg new file mode 100644 index 0000000..b998126 Binary files /dev/null and b/CAD/Datasheets/OLED_256x64_1.jpg differ diff --git a/CAD/Datasheets/OLED_256x64_2.jpg b/CAD/Datasheets/OLED_256x64_2.jpg new file mode 100644 index 0000000..2f4fae4 Binary files /dev/null and b/CAD/Datasheets/OLED_256x64_2.jpg differ diff --git a/CAD/Datasheets/OLED_256x64_bus.jpg b/CAD/Datasheets/OLED_256x64_bus.jpg new file mode 100644 index 0000000..2e8f355 Binary files /dev/null and b/CAD/Datasheets/OLED_256x64_bus.jpg differ diff --git a/CAD/Datasheets/OLED_256x64_pins.jpg b/CAD/Datasheets/OLED_256x64_pins.jpg new file mode 100644 index 0000000..c521270 Binary files /dev/null and b/CAD/Datasheets/OLED_256x64_pins.jpg differ diff --git a/CAD/Datasheets/SSD1322.pdf b/CAD/Datasheets/SSD1322.pdf new file mode 100644 index 0000000..bd65fe7 Binary files /dev/null and b/CAD/Datasheets/SSD1322.pdf differ diff --git a/CAD/Datasheets/W256064-XALG.jpg b/CAD/Datasheets/W256064-XALG.jpg new file mode 100644 index 0000000..be09bb7 Binary files /dev/null and b/CAD/Datasheets/W256064-XALG.jpg differ diff --git a/MilliOhmMeter_FW/lib/oled/OLEDDisplay.h b/MilliOhmMeter_FW/lib/oled/OLEDDisplay.h index 6f51e6e..bb27e64 100644 --- a/MilliOhmMeter_FW/lib/oled/OLEDDisplay.h +++ b/MilliOhmMeter_FW/lib/oled/OLEDDisplay.h @@ -93,11 +93,11 @@ #endif -enum OLEDDISPLAY_COLOR { - BLACK = 0, - WHITE = 1, - INVERSE = 2 -}; +// enum OLEDDISPLAY_COLOR { +// BLACK = 0, +// WHITE = 1, +// INVERSE = 2 +// }; enum OLEDDISPLAY_TEXT_ALIGNMENT { TEXT_ALIGN_LEFT = 0, diff --git a/MilliOhmMeter_FW/platformio.ini b/MilliOhmMeter_FW/platformio.ini index 2625fe8..7a1ab2e 100644 --- a/MilliOhmMeter_FW/platformio.ini +++ b/MilliOhmMeter_FW/platformio.ini @@ -13,5 +13,7 @@ platform = espressif32 board = heltec_wifi_lora_32_V2 framework = arduino monitor_speed = 115200 +lib_ldf_mode = deep+ lib_deps = - #heltecautomation/Heltec ESP32 Dev-Boards@^1.1.0 + winneymj/ESP8266 SSD1322@^1.0.6 + adafruit/Adafruit GFX Library@^1.10.10 diff --git a/MilliOhmMeter_FW/src/board.h b/MilliOhmMeter_FW/src/board.h index 527c1a0..6690f64 100644 --- a/MilliOhmMeter_FW/src/board.h +++ b/MilliOhmMeter_FW/src/board.h @@ -1,3 +1,13 @@ #pragma once -void initBoard(void); \ No newline at end of file +void initBoard(void); + +#define HAS_DISPLAY +#define HAS_SSD1322 +//#define HAS_SSD1306 + + + +#define OLED_CS 5 // , CS - Chip select +#define OLED_DC 17 // DC digital signal +#define OLED_RESET 0 // using hardware !RESET from Arduino insteadx \ No newline at end of file diff --git a/MilliOhmMeter_FW/src/display.cpp b/MilliOhmMeter_FW/src/display.cpp index c066558..f1c2f69 100644 --- a/MilliOhmMeter_FW/src/display.cpp +++ b/MilliOhmMeter_FW/src/display.cpp @@ -1,7 +1,9 @@ #include "display.h" -SSD1306Wire display(0x3c, SDA_OLED, SCL_OLED, RST_OLED, GEOMETRY_128_64); -; + +#ifdef HAS_SSD1306 + SSD1306Wire display(0x3c, SDA_OLED, SCL_OLED, RST_OLED, GEOMETRY_128_64); + OLEDDisplayUi ui(&display); displayState displaystate = mainscreen; bool stateMutex = true; @@ -207,4 +209,358 @@ void handleDisplay(void) int remainingTimeBudget = ui.update(); Serial.printf("DT=%u;", remainingTimeBudget); -} \ No newline at end of file +} + +#endif +#ifdef HAS_SSD1322 + + + +// ATMega32u4 pins +//#define OLED_DC 8 // D8 - B4 +//#define OLED_CS 17 // D17 - B0 +//#define OLED_RESET 9 // D9 - B5 + +//hardware SPI - only way to go. Can get 110 FPS +ESP8266_SSD1322 display(1,MOSI,OLED_DC,0, OLED_CS); +//int8_t SID, int8_t SDA, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS + +#define NUMFLAKES 10 +#define XPOS 0 +#define YPOS 1 +#define DELTAY 2 + +#define LOGO16_GLCD_HEIGHT 16 +#define LOGO16_GLCD_WIDTH 16 +static const unsigned char PROGMEM logo16_glcd_bmp[] = +{ B00000000, B11000000, + B00000001, B11000000, + B00000001, B11000000, + B00000011, B11100000, + B11110011, B11100000, + B11111110, B11111000, + B01111110, B11111111, + B00110011, B10011111, + B00011111, B11111100, + B00001101, B01110000, + B00011011, B10100000, + B00111111, B11100000, + B00111111, B11110000, + B01111100, B11110000, + B01110000, B01110000, + B00000000, B00110000 }; + +#if (SSD1322_LCDHEIGHT != 64) +#error("Height incorrect, please fix ESP8266_SSD1322.h!"); +#endif + +// void c_displayMeasureMode::drawMeasureMode(OLEDDisplay *display, measureMode mode, int16_t x, int16_t y) +// { + +// } + + +void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) { + uint8_t icons[NUMFLAKES][3]; + + // initialize + for (uint8_t f=0; f< NUMFLAKES; f++) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + + Serial.print("x: "); + Serial.print(icons[f][XPOS], DEC); + Serial.print(" y: "); + Serial.print(icons[f][YPOS], DEC); + Serial.print(" dy: "); + Serial.println(icons[f][DELTAY], DEC); + } + + while (1) { + // draw each icon + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE); + } + display.display(); + delay(200); + + // then erase it + move it + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK); + // move it + icons[f][YPOS] += icons[f][DELTAY]; + // if its gone, reinit + if (icons[f][YPOS] > display.height()) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + } + } + } +} + + +void testdrawchar(void) { + display.setTextSize(1); + display.setTextColor(WHITE); + display.setCursor(0,0); + + for (uint8_t i=0; i < 168; i++) { + if (i == '\n') continue; + display.write(i); + if ((i > 0) && (i % 21 == 0)) + display.println(); + } + display.display(); +} + +void testdrawcircle(void) { + for (int16_t i=0; i0; i-=5) { + display.fillTriangle(display.width()/2, display.height()/2-i, + display.width()/2-i, display.height()/2+i, + display.width()/2+i, display.height()/2+i, WHITE); + if (color == WHITE) color = BLACK; + else color = WHITE; + display.display(); + } +} + +void testdrawroundrect(void) { + for (int16_t i=0; i=0; i-=4) { + display.drawLine(0, display.height()-1, display.width()-1, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=display.width()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE); + display.display(); + } + for (int16_t i=display.height()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=0; i +#include "board.h" + +#ifdef HAS_SSD1306 + #include "SSD1306Wire.h" + #include "OLEDDisplayUi.h" +#endif +#ifdef HAS_SSD1322 + #include + #include +#endif + #include "measure.h" + + + + #include "image.h" #define CONTROLSTRIP_YPOS 63 - 10 - 4 @@ -19,6 +34,7 @@ enum displayState setupscreen }; +#ifdef HAS_SSD1306 class c_displayMeasureMode { public: @@ -29,6 +45,7 @@ public: c_displayMeasureMode(measureMode mode, uint16_t xpos, uint16_t width, String name) : _mode(mode), _xpos(xpos), _width(width), _name(name) {} void drawMeasureMode(OLEDDisplay *display, measureMode mode, int16_t x, int16_t y); }; +#endif void initDisplay(void); void handleDisplay(void); \ No newline at end of file