From 976a012d5da52fe7d9950ea49bed138ae2e1e285 Mon Sep 17 00:00:00 2001 From: nopnop2002 Date: Thu, 5 May 2022 07:51:29 +0900 Subject: [PATCH] Added ScrollCounterDemo --- .../pngs/seven-segment-display-gray-0.png | Bin .../pngs/seven-segment-display-gray-1.png | Bin .../pngs/seven-segment-display-gray-2.png | Bin .../pngs/seven-segment-display-gray-3.png | Bin .../pngs/seven-segment-display-gray-4.png | Bin .../pngs/seven-segment-display-gray-5.png | Bin .../pngs/seven-segment-display-gray-6.png | Bin .../pngs/seven-segment-display-gray-7.png | Bin .../pngs/seven-segment-display-gray-8.png | Bin .../pngs/seven-segment-display-gray-9.png | Bin ScrollCounterDemo/CMakeLists.txt | 8 + ScrollCounterDemo/README.md | 19 + ScrollCounterDemo/main/CMakeLists.txt | 4 + ScrollCounterDemo/main/component.mk | 8 + ScrollCounterDemo/main/main.c | 324 ++++++++++++++++++ .../pngs/seven-segment-display-gray-0.png | Bin 0 -> 1326 bytes .../pngs/seven-segment-display-gray-1.png | Bin 0 -> 1237 bytes .../pngs/seven-segment-display-gray-2.png | Bin 0 -> 1324 bytes .../pngs/seven-segment-display-gray-3.png | Bin 0 -> 1310 bytes .../pngs/seven-segment-display-gray-4.png | Bin 0 -> 1293 bytes .../pngs/seven-segment-display-gray-5.png | Bin 0 -> 1327 bytes .../pngs/seven-segment-display-gray-6.png | Bin 0 -> 1306 bytes .../pngs/seven-segment-display-gray-7.png | Bin 0 -> 1284 bytes .../pngs/seven-segment-display-gray-8.png | Bin 0 -> 1318 bytes .../pngs/seven-segment-display-gray-9.png | Bin 0 -> 1344 bytes 25 files changed, 363 insertions(+) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-0.png (100%) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-1.png (100%) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-2.png (100%) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-3.png (100%) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-4.png (100%) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-5.png (100%) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-6.png (100%) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-7.png (100%) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-8.png (100%) rename {MeterDemo => CounterDemo}/pngs/seven-segment-display-gray-9.png (100%) create mode 100644 ScrollCounterDemo/CMakeLists.txt create mode 100644 ScrollCounterDemo/README.md create mode 100644 ScrollCounterDemo/main/CMakeLists.txt create mode 100644 ScrollCounterDemo/main/component.mk create mode 100644 ScrollCounterDemo/main/main.c create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-0.png create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-1.png create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-2.png create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-3.png create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-4.png create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-5.png create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-6.png create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-7.png create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-8.png create mode 100644 ScrollCounterDemo/pngs/seven-segment-display-gray-9.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-0.png b/CounterDemo/pngs/seven-segment-display-gray-0.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-0.png rename to CounterDemo/pngs/seven-segment-display-gray-0.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-1.png b/CounterDemo/pngs/seven-segment-display-gray-1.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-1.png rename to CounterDemo/pngs/seven-segment-display-gray-1.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-2.png b/CounterDemo/pngs/seven-segment-display-gray-2.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-2.png rename to CounterDemo/pngs/seven-segment-display-gray-2.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-3.png b/CounterDemo/pngs/seven-segment-display-gray-3.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-3.png rename to CounterDemo/pngs/seven-segment-display-gray-3.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-4.png b/CounterDemo/pngs/seven-segment-display-gray-4.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-4.png rename to CounterDemo/pngs/seven-segment-display-gray-4.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-5.png b/CounterDemo/pngs/seven-segment-display-gray-5.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-5.png rename to CounterDemo/pngs/seven-segment-display-gray-5.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-6.png b/CounterDemo/pngs/seven-segment-display-gray-6.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-6.png rename to CounterDemo/pngs/seven-segment-display-gray-6.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-7.png b/CounterDemo/pngs/seven-segment-display-gray-7.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-7.png rename to CounterDemo/pngs/seven-segment-display-gray-7.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-8.png b/CounterDemo/pngs/seven-segment-display-gray-8.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-8.png rename to CounterDemo/pngs/seven-segment-display-gray-8.png diff --git a/MeterDemo/pngs/seven-segment-display-gray-9.png b/CounterDemo/pngs/seven-segment-display-gray-9.png similarity index 100% rename from MeterDemo/pngs/seven-segment-display-gray-9.png rename to CounterDemo/pngs/seven-segment-display-gray-9.png diff --git a/ScrollCounterDemo/CMakeLists.txt b/ScrollCounterDemo/CMakeLists.txt new file mode 100644 index 0000000..2aa16fe --- /dev/null +++ b/ScrollCounterDemo/CMakeLists.txt @@ -0,0 +1,8 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +set(EXTRA_COMPONENT_DIRS ../components/ssd1306) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(ssd1306) diff --git a/ScrollCounterDemo/README.md b/ScrollCounterDemo/README.md new file mode 100644 index 0000000..37c2565 --- /dev/null +++ b/ScrollCounterDemo/README.md @@ -0,0 +1,19 @@ +# ScrollCounterDemo for SSD1306 + +![ScrollCounterDemo](https://user-images.githubusercontent.com/6020549/166837973-4a380663-fb77-4417-802a-7f63a2a829c3.JPG) + +I borrowed the PNG image from [here](https://www.iconspng.com/image/5656/seven-segment-display-gray-0). + +__Wire cables should be as short as possible.__ + +I used a 10 cm wire cable. +However, it is sometimes affected by noise. + + +# How to create BIT MAP data +- Download PNG image. +- Shrink PNG images below frame size. +- Convert from PNG to BMP data using [this](https://www.mischianti.org/2021/07/14/ssd1306-oled-display-draw-images-splash-and-animations-2/) page. +- Paste the BMP data into your code. + + diff --git a/ScrollCounterDemo/main/CMakeLists.txt b/ScrollCounterDemo/main/CMakeLists.txt new file mode 100644 index 0000000..647a294 --- /dev/null +++ b/ScrollCounterDemo/main/CMakeLists.txt @@ -0,0 +1,4 @@ +set(COMPONENT_SRCS "main.c") +set(COMPONENT_ADD_INCLUDEDIRS "") + +register_component() diff --git a/ScrollCounterDemo/main/component.mk b/ScrollCounterDemo/main/component.mk new file mode 100644 index 0000000..61f8990 --- /dev/null +++ b/ScrollCounterDemo/main/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/ScrollCounterDemo/main/main.c b/ScrollCounterDemo/main/main.c new file mode 100644 index 0000000..4db7818 --- /dev/null +++ b/ScrollCounterDemo/main/main.c @@ -0,0 +1,324 @@ +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_log.h" + +#include "ssd1306.h" +#include "font8x8_basic.h" + +/* + You have to set this config value with menuconfig + CONFIG_INTERFACE + + for i2c + CONFIG_MODEL + CONFIG_SDA_GPIO + CONFIG_SCL_GPIO + CONFIG_RESET_GPIO + + for SPI + CONFIG_CS_GPIO + CONFIG_DC_GPIO + CONFIG_RESET_GPIO +*/ + +#define TAG "SSD1306" + +#define IMAGES 10 + +uint8_t segmentDisplay[IMAGES][192] = { +{ +// https://www.iconspng.com/image/5656/seven-segment-display-gray-0 +// 'seven-segment-display-gray-0', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x06, 0xff, 0xff, 0x60, +0x07, 0x7f, 0xfe, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x40, +0x02, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0xff, 0xff, 0xe0, +0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}, +{ +// https://www.iconspng.com/image/5657/seven-segment-display-gray-1 +// 'seven-segment-display-gray-1', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x60, +0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x40, +0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xe0, +0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}, +{ +// https://www.iconspng.com/image/5658/seven-segment-display-gray-2 +// 'seven-segment-display-gray-2', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0x60, +0x00, 0xff, 0xfe, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x7f, 0xfe, 0xe0, 0x01, 0xff, 0xff, 0xc0, +0x03, 0xff, 0xff, 0x00, 0x07, 0x7f, 0xfe, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, +0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, +0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, +0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, +0x07, 0xff, 0xff, 0x80, 0x07, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}, +{ +// https://www.iconspng.com/image/5659/seven-segment-display-gray-3 +// 'seven-segment-display-gray-3', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0x60, +0x00, 0xff, 0xfe, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x7f, 0xfe, 0xe0, 0x01, 0xff, 0xff, 0x80, +0x01, 0xff, 0xff, 0x40, 0x00, 0x7f, 0xfe, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0xff, 0xff, 0xe0, +0x01, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}, +{ +// https://www.iconspng.com/image/5660/seven-segment-display-gray-4 +// 'seven-segment-display-gray-4', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x60, +0x07, 0x00, 0x00, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x7f, 0xfe, 0xe0, 0x03, 0xff, 0xff, 0x80, +0x00, 0xff, 0xff, 0x40, 0x00, 0x7f, 0xfe, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xe0, +0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}, +{ +// https://www.iconspng.com/image/5661/seven-segment-display-gray-5 +// 'seven-segment-display-gray-5', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xc0, 0x06, 0xff, 0xff, 0x80, +0x07, 0x7f, 0xff, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, +0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, +0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, +0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x7f, 0xfe, 0x00, 0x03, 0xff, 0xff, 0x80, +0x00, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xfe, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0xff, 0xff, 0xe0, +0x01, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}, +{ +// https://www.iconspng.com/image/5662/seven-segment-display-gray-6 +// 'seven-segment-display-gray-6', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xc0, 0x06, 0xff, 0xff, 0x80, +0x07, 0x7f, 0xff, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, +0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, +0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, +0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x7f, 0xfe, 0x00, 0x01, 0xff, 0xff, 0x80, +0x02, 0xff, 0xff, 0xc0, 0x07, 0x7f, 0xfe, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0xff, 0xff, 0xe0, +0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}, +{ +// https://www.iconspng.com/image/5663/seven-segment-display +// 'seven-segment-display-gray-7', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0x60, +0x00, 0xff, 0xfe, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x40, +0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xe0, +0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}, +{ +// https://www.iconspng.com/image/5664/seven-segment-display-gray-8 +// 'seven-segment-display-gray-8', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x06, 0xff, 0xff, 0x60, +0x07, 0x7f, 0xfe, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x7f, 0xfe, 0xe0, 0x01, 0xff, 0xff, 0x80, +0x02, 0xff, 0xff, 0x40, 0x07, 0x7f, 0xfe, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0xff, 0xff, 0xe0, +0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}, +{ +// https://www.iconspng.com/image/5665/seven-segment-display +// 'seven-segment-display-gray-9', 32x48px +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x06, 0xff, 0xff, 0x60, +0x07, 0x7f, 0xfe, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, +0x07, 0x80, 0x01, 0xe0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x7f, 0xfe, 0xe0, 0x03, 0xff, 0xff, 0x80, +0x00, 0xff, 0xff, 0x40, 0x00, 0x7f, 0xfe, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, +0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0xff, 0xff, 0xe0, +0x01, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +} +}; + + +void app_main(void) +{ + SSD1306_t dev; + +#if CONFIG_I2C_INTERFACE + ESP_LOGI(TAG, "INTERFACE is i2c"); + ESP_LOGI(TAG, "CONFIG_SDA_GPIO=%d",CONFIG_SDA_GPIO); + ESP_LOGI(TAG, "CONFIG_SCL_GPIO=%d",CONFIG_SCL_GPIO); + ESP_LOGI(TAG, "CONFIG_RESET_GPIO=%d",CONFIG_RESET_GPIO); + i2c_master_init(&dev, CONFIG_SDA_GPIO, CONFIG_SCL_GPIO, CONFIG_RESET_GPIO); +#endif // CONFIG_I2C_INTERFACE + +#if CONFIG_SPI_INTERFACE + ESP_LOGI(TAG, "INTERFACE is SPI"); + ESP_LOGI(TAG, "CONFIG_MOSI_GPIO=%d",CONFIG_MOSI_GPIO); + ESP_LOGI(TAG, "CONFIG_SCLK_GPIO=%d",CONFIG_SCLK_GPIO); + ESP_LOGI(TAG, "CONFIG_CS_GPIO=%d",CONFIG_CS_GPIO); + ESP_LOGI(TAG, "CONFIG_DC_GPIO=%d",CONFIG_DC_GPIO); + ESP_LOGI(TAG, "CONFIG_RESET_GPIO=%d",CONFIG_RESET_GPIO); + spi_master_init(&dev, CONFIG_MOSI_GPIO, CONFIG_SCLK_GPIO, CONFIG_CS_GPIO, CONFIG_DC_GPIO, CONFIG_RESET_GPIO); +#endif // CONFIG_SPI_INTERFACE + +#if CONFIG_FLIP + dev._flip = true; + ESP_LOGW(TAG, "Flip upside down"); +#endif + +#if CONFIG_SSD1306_128x64 + ESP_LOGI(TAG, "Panel is 128x64"); + ssd1306_init(&dev, 128, 64); +#endif // CONFIG_SSD1306_128x64 +#if CONFIG_SSD1306_128x32 + ESP_LOGE(TAG, "Panel is 128x32. This demo cannot be run."); + while(1) { vTaskDelay(1); } +#endif // CONFIG_SSD1306_128x32 + ssd1306_contrast(&dev, 0xff); + + // Allocate memory + uint8_t *buffer = (uint8_t *)malloc(8*128); // 8 page 128 pixel + if (buffer == NULL) { + ESP_LOGE(TAG, "malloc failed"); + while(1) { vTaskDelay(1); } + } + uint8_t *segmentImage = (uint8_t *)malloc(IMAGES*8*32); // 10 image 8 page 32pixel + if (segmentImage == NULL) { + ESP_LOGE(TAG, "malloc failed"); + while(1) { vTaskDelay(1); } + } + + // Convert from segmentDisplay to segmentImage + for (int imageIndex=0;imageIndex=0;digit--) { + int startSeg = digit * 32; // startSeg=96->64->32->0 + + for (int _height=0;_heightPyJDaK+a&k&AhT+uVZoFI26hIQv; zUIIBR>5jgR3=A9lx&I`x0{NT;9+AZi417mGm~pB$pEOWVvcxr_Bsf2(yEr+qAXP8FD1G)j8!4b7C6Jg_)Vjw%ZRqfKpl@DVNmZ|x_{L-T2RECU_l7eC@ef|7`)V$=J%!0(C5|FR-Q&LM3GjsF}%`7a84fVlR z>q5Px3-yvN$V<8gx=EF~Fh4vI(|HcGAOh@~{DR7&%=C;B24`mjg@DqeoXlhem;Bts z%sd5`)RfF*h+9Dp0NS4nc6(WBa(-@ZeqJ%y4FzC5DPS%7RjEb!`i6Q2`o|vc{mH<< ztl;V57!u+Bc80IFQJ~22|5^HBUzl1GCZ0CaRVtb4$dY^eE2GFCmZ$6;8If#{lolOv zU7aymDfiZuMf?}k0&aUat68pk(+~gqXD22uUis+mUDsoshMK-wESt+EN`=>g9_iieVcGLEphYBBUz#$Odh%6;o^Gw`h^u09aE=@ ze)RskX5BianLdwRz3R%%HuO34`EzkjetvRpu5ZtkbH9FBZQHi(#x%iIG8x&~hrfO` zt+AUg!T9U6pl6#JEe~gxJqNe_S?3tXX+c#(0L%2YsM*X%{~^oM!%?&vE8f<|>ApGrSmL z9r}}XOMEU*UK^q{Gpl6n8Ncf4-F_|WlwQ4kd-UKzMl&}+*9c%e@(ptiR5#@)L|pFLBn|NmMs#Ypn<^4UzS2VRzJy4|^a zxw?*yPCr@9Vo|Ia^-w^Y`DWzNNp!nSaOK zJRd(lC8^%7iMJNkAC~KHe=D%8sDVqc{cz*Wn~^R`f`(D{4-00jR;;@3qQ7#>idT$Q zZZBJzjuuo_&OHCc&B5&Cy&pd;_Agt>*StPyJDaK+a&k&AhT+uVZoFI26hIQv; zUIIBR>5jgR3=A9lx&I`x0{NT;9+AZi417mGm~pB$pEOWVvcxr_Bsf2(yEr+qAXP8FD1G)j8!4b7C6Jpw=<_E^zb%H<(BEYW6FQ_caOwTA`aCSCO2q;a;$xK#o$VRWf9&zzp9~C4 z$30yfLn7SY&e)lE$U&g3U0X)TQ=lc7MN=g66JO?p6&VYja%xm|+A#4dT)g;Mt;9i^ zRbcs!L!ur3dUbpDT9~y5wfIXpn!S0me{*wsg!9s%o0sI1MB@JUtY%op(0tIrZSlu7 zZ1W8)yHxJvZU6G~r)TrQ1|PM_231lYUVi?WVKw*C+qb&Eqg@0WzgGE9KG_nZC$2l) z``52uRwu(&i`v@S23pNs7Po%+jVVqHhgvz#q#1vz+IxmmzyWAE}@ljiOHH&lJRE;8r$@X@35i1@X$uZmf z`S8UT5C8p}_voXAHPgfzJO70N8Rw_Jx-Kx$LC&G)Xwt+o+rh{7^VJ??L2?Jk0OJ=!4-xYiMFVQ@SaT5E5c_cHy_^;)3Qjy zkwL26Z@F{W>Zy0~%uQ$ep6w44yfX3lad$5jA)f%V*{Sa@W_vu`_B6@Aq4RFubW!EK zOdEpFe5|kuSsSJ))_t+SLge4>#|c7*7+YS%Ms!(-i+-ITpU1bLI&=H&HTpa(OgchU zya{<)Qx|RDZmu=`^pg^+n>$4EoIm~hw{N=3!-9x#=O*7fckf<&{d%>*C+CF$3la=g z+?(Lx%r9KtY-rn--z;-+y2v}h7_NEmn>{Ny|HUx$XS1vm{1Go`;nlFGZoYIVW5t|B z4G+xc$qBy~jf;z8@wfk=RPf=tq1~GTiyQoB>-L|YyM|4veRrden)BDHxxG`pRI4f~ zZmj0K!;$cOhmV7M%cP!D9m`z$6a5xnTo9w@KGCD)=hZ395qHuy8#3+)a!fs(*Jr2` zvHI$Y2%SxJ1sfwcR=)|5VPtv0Q~BNUIMe(c?;K~V?_cuhTT8&Y?`O6uxVdqevwu)r oVYmIHIQxD(cD=Lp;tpSU1HNYY_nqIt3CuPOp00i_>zopr0D%hfod5s; literal 0 HcmV?d00001 diff --git a/ScrollCounterDemo/pngs/seven-segment-display-gray-2.png b/ScrollCounterDemo/pngs/seven-segment-display-gray-2.png new file mode 100644 index 0000000000000000000000000000000000000000..bf3881adb065613c7639e0920f393b88d8a49346 GIT binary patch literal 1324 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 D>gp%q literal 0 HcmV?d00001 diff --git a/ScrollCounterDemo/pngs/seven-segment-display-gray-5.png b/ScrollCounterDemo/pngs/seven-segment-display-gray-5.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7fd2a99ed97a80db96c6807cbbb66cc14577d6 GIT binary patch literal 1327 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDaK+a&k&AhT+uVZoFI26hIQv; zUIIBR>5jgR3=A9lx&I`x0{NT;9+AZi417mGm~pB$pEOWVvcxr_Bsf2(yEr+qAXP8FD1G)j8!4b7C6Jg_)Vjw%ZRqfKpl@DVNmZpw=<_C>(-akMKBEYW6FQ_caOwTA`aCSCO2q;a;$xK#o$VRWf9&zzp9~Dl zik>cxArbCxXIOh12MV;^KO%k4)v)65sdHW%45s!b2u?aBzaT-~>=!dnSJFdP9hWAj zrrzGxh#MSE3jbP`cr8{E6v4$6zES}_in`3Ug*?4kkZhn6H zhwdF$|744>%t$)$v}oa)H9VrCqFGO~ckJAG@bBNfzrM_uVYK=4@uT3y3=wW_?u?8K z2eru)9eXwl-pik3dG6df10y4*{rCIZ+u3(cQ+0O;3>4(!<1;WeZfuTnG{8-4s#JD6#Q!wF(5r=RmOIUcg zp}G0;usOzthK%d4XIEOBEOaa^H1zZHGqA8&5!P_)R#eO3L>W1`eLue`&znC#Fg{+t zJuWu(RK$AFO_p;C-Mx zNwUS>^&k@~w@6HaH$$+d@r=m}PyfBO_o~hZ?weO;w*H*I^Y5QOGUDRm+t~J>&WQ*O zRjn>6;E&ZcEOohh_3DjVw+=mer1a|5D+5#0){7SdORq|P{`@&3H}~kvmzq-2(t(kY znVXtC86FwoTVq-F8Uk zml>5Xl~iXpf7tz_l+lVyOe5k!e&mB-rWpY!iUq(Xfo{gC9R`EHTxY@9XOu zBt7TQlru?N_U~UG*5IL{RQj}5cY}yS@z(9zlT%Y!|L1(9h4#KK$#~ujTyeHTy5zz1zEPo!-wJZMF)Fvs-rV)HJn;pEhmUh3nVV-_N$I z@pOIhJ3^=J<;%>|ddD=UPoK`g*8Jkln jC;QcuWb0!YJ}~v>-MGN1-uDQYAsIYf{an^LB{Ts5<$oq} literal 0 HcmV?d00001 diff --git a/ScrollCounterDemo/pngs/seven-segment-display-gray-6.png b/ScrollCounterDemo/pngs/seven-segment-display-gray-6.png new file mode 100644 index 0000000000000000000000000000000000000000..fa6f7881f25621e16453c06d0711018ae9f62f1d GIT binary patch literal 1306 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 literal 0 HcmV?d00001 diff --git a/ScrollCounterDemo/pngs/seven-segment-display-gray-8.png b/ScrollCounterDemo/pngs/seven-segment-display-gray-8.png new file mode 100644 index 0000000000000000000000000000000000000000..a99db02b3f370a5454b19ec427dbbc5ffebd13e4 GIT binary patch literal 1318 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 E0Bqw#!~g&Q literal 0 HcmV?d00001