diff --git a/.clang-format b/.clang-format deleted file mode 100644 index 0c7aa0c..0000000 --- a/.clang-format +++ /dev/null @@ -1,5 +0,0 @@ -BasedOnStyle: LLVM -UseTab: Never -ColumnLimit: 90 -BreakBeforeBraces: Allman -IndentWidth: 4 diff --git a/.vscode/settings.json b/.vscode/settings.json index c2f89c3..6e493b5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,15 +1,12 @@ { - // Suggest where to make a new line by adding two vertical lines - // Vertical lines, 79 works well for code reviews and diffs - "editor.rulers": [ - 79, - 90 - ], - "editor.formatOnSave": true, - "editor.minimap.enabled": false, - "workbench.colorCustomizations": { - "editorRuler.foreground": "#ff4081" - }, - "files.insertFinalNewline": true, - "files.autoSave": "onFocusChange", -} + "files.associations": { + "images.h": "c", + "*.tcc": "cpp", + "deque": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "vector": "cpp", + "system_error": "cpp" + } +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 13d1436..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "Format All Files with ClangFormat", - "type": "shell", - "command": "find . -name '*.cpp' -o -name '*.h' | xargs clang-format -i", - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": [] - } - ] -} diff --git a/include/images.h b/include/images.h index bb29f07..d159401 100644 --- a/include/images.h +++ b/include/images.h @@ -2,9 +2,9 @@ #ifndef __IMAGES_H__ #define __IMAGES_H__ -// Array of all bitmaps for convenience. (Total bytes used to store images in -// PROGMEM = 1040) +// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 1040) -extern const unsigned char epd_bitmap_ucog[]; +extern const unsigned char epd_bitmap_ucog []; #endif // __IMAGES_H__ + diff --git a/include/ui.h b/include/ui.h index 055b8ed..fe7bff6 100644 --- a/include/ui.h +++ b/include/ui.h @@ -2,9 +2,9 @@ #ifndef __UI_H__ #define __UI_H__ -#include "OLEDDisplayUi.h" -#include "SSD1306Wire.h" #include +#include "SSD1306Wire.h" +#include "OLEDDisplayUi.h" // #include @@ -14,8 +14,8 @@ #define ONE_MILLISEC 1 -// Prints debug information and the scan measurement bins from the SX1262 in -// hex Change spectrum plot values at once or by line +// Prints debug information and the scan measurement bins from the SX1262 in hex +// Change spectrum plot values at once or by line #define ANIMATED_RELOAD false #define MAJOR_TICK_LENGTH 2 diff --git a/src/images.cpp b/src/images.cpp index ab61f38..99431cd 100644 --- a/src/images.cpp +++ b/src/images.cpp @@ -1,89 +1,102 @@ #include "images.h" //'Logo_UCOG', 128x64px -// https://www.online-utility.org/image/convert/to/XBM -// https://javl.github.io/image2cpp/ +//https://www.online-utility.org/image/convert/to/XBM +//https://javl.github.io/image2cpp/ //#define 1721604660673_width 128 //#define 1721604660673_height 64 -const unsigned char epd_bitmap_ucog[] = { - 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, 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, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, - 0x10, 0x84, 0xC3, 0x81, 0x03, 0x00, 0x60, 0x00, 0xCC, 0x07, 0x00, 0x00, 0x00, 0x70, - 0x00, 0x00, 0x30, 0xE6, 0xF3, 0xE3, 0x07, 0x00, 0x60, 0x00, 0x0C, 0x3E, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x30, 0x66, 0x10, 0x36, 0x00, 0x00, 0x60, 0x00, 0x06, 0xF8, - 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x30, 0x26, 0x18, 0x36, 0x00, 0x00, 0x60, 0x00, - 0x07, 0xE0, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x30, 0x26, 0x18, 0x36, 0x07, 0x00, - 0x60, 0x00, 0x03, 0x00, 0x1F, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x30, 0x26, 0x18, 0x36, - 0x06, 0x00, 0x60, 0x80, 0x01, 0x00, 0x7C, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x30, 0x66, - 0x38, 0x76, 0x06, 0x0C, 0x60, 0xC0, 0x01, 0x00, 0xF0, 0x01, 0x78, 0x00, 0x00, 0x00, - 0xE0, 0xE3, 0xF3, 0xE3, 0x07, 0x0E, 0x60, 0xC0, 0x03, 0x00, 0x80, 0x0F, 0x1C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x60, 0xE0, 0x07, 0x00, 0x00, 0x3E, - 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x60, 0x60, 0x0E, 0x00, - 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x60, 0x70, - 0x1C, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, - 0x60, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x60, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x00, 0xF0, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xFC, 0x0D, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xFE, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x67, 0x0F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x61, 0x1C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, - 0x60, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x60, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0xE0, 0xE0, 0x01, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x67, 0xE0, 0x83, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0xE1, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0xD0, 0x63, 0x60, 0x07, 0x07, 0x00, 0xC0, 0xFF, - 0x03, 0x80, 0x03, 0x00, 0x00, 0x08, 0x00, 0x02, 0xF0, 0x61, 0x60, 0x1C, 0x1F, 0x80, - 0xFF, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, - 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x18, 0x00, 0x02, 0xF0, 0x7F, - 0x60, 0xDC, 0x1F, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x02, - 0xD0, 0x61, 0x60, 0x07, 0x0F, 0x00, 0xC0, 0xFF, 0x03, 0x80, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x90, 0x67, 0xE0, 0x83, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0xC1, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xE0, 0xC1, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x61, 0x1C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x67, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xEE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1C, 0x00, 0xFC, 0x0D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xF0, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x60, 0x18, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x60, 0x30, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x60, 0x70, - 0x3C, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, - 0x60, 0x60, 0x1E, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x07, 0x60, 0xE0, 0x0F, 0x00, 0x00, 0x3E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x03, 0x00, 0x0F, 0x60, 0xC0, 0x03, 0x00, 0x80, 0x0F, 0x1C, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x01, 0x07, 0x00, 0x0C, 0x60, 0xC0, 0x01, 0x00, 0xF0, 0x01, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x81, 0x05, 0x00, 0x08, 0x60, 0xC0, 0x01, 0x00, 0x7C, 0x00, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x0C, 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, - 0x1F, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x0C, 0x00, 0x00, 0x60, 0x00, - 0x07, 0xE0, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x0F, 0x00, 0x00, - 0x60, 0x00, 0x06, 0xF8, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x1F, - 0x00, 0x00, 0x60, 0x00, 0x0E, 0x3E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x80, - 0x67, 0x18, 0x00, 0x00, 0x60, 0x00, 0xCC, 0x07, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0xFC, 0x01, 0x00, 0x00, - 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, +const unsigned char epd_bitmap_ucog[] = { + 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xF8, 0x01, 0x00, 0x00, + 0x00, 0xC0, 0x00, 0x00, 0x10, 0x84, 0xC3, 0x81, 0x03, 0x00, 0x60, 0x00, + 0xCC, 0x07, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x30, 0xE6, 0xF3, 0xE3, + 0x07, 0x00, 0x60, 0x00, 0x0C, 0x3E, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x30, 0x66, 0x10, 0x36, 0x00, 0x00, 0x60, 0x00, 0x06, 0xF8, 0x00, 0x00, + 0x00, 0x0E, 0x00, 0x00, 0x30, 0x26, 0x18, 0x36, 0x00, 0x00, 0x60, 0x00, + 0x07, 0xE0, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x30, 0x26, 0x18, 0x36, + 0x07, 0x00, 0x60, 0x00, 0x03, 0x00, 0x1F, 0x00, 0xC0, 0x01, 0x00, 0x00, + 0x30, 0x26, 0x18, 0x36, 0x06, 0x00, 0x60, 0x80, 0x01, 0x00, 0x7C, 0x00, + 0xE0, 0x00, 0x00, 0x00, 0x30, 0x66, 0x38, 0x76, 0x06, 0x0C, 0x60, 0xC0, + 0x01, 0x00, 0xF0, 0x01, 0x78, 0x00, 0x00, 0x00, 0xE0, 0xE3, 0xF3, 0xE3, + 0x07, 0x0E, 0x60, 0xC0, 0x03, 0x00, 0x80, 0x0F, 0x1C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x60, 0xE0, 0x07, 0x00, 0x00, 0x3E, + 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x60, 0x60, + 0x0E, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0x01, 0x60, 0x70, 0x1C, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x60, 0x30, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x60, 0x18, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0xF0, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xFC, 0x0D, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xFE, 0x0F, + 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x67, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x61, 0x1C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x60, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xE0, 0xE0, 0x01, 0x00, 0x00, 0x00, + 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x67, 0xE0, 0x83, + 0x03, 0x00, 0x00, 0xE0, 0xFF, 0xE1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, + 0xD0, 0x63, 0x60, 0x07, 0x07, 0x00, 0xC0, 0xFF, 0x03, 0x80, 0x03, 0x00, + 0x00, 0x08, 0x00, 0x02, 0xF0, 0x61, 0x60, 0x1C, 0x1F, 0x80, 0xFF, 0x07, + 0x00, 0x00, 0x0E, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x18, 0x00, 0x02, + 0xF0, 0x7F, 0x60, 0xDC, 0x1F, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x1E, 0x00, + 0x00, 0x00, 0x00, 0x02, 0xD0, 0x61, 0x60, 0x07, 0x0F, 0x00, 0xC0, 0xFF, + 0x03, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x67, 0xE0, 0x83, + 0x03, 0x00, 0x00, 0xF0, 0xFF, 0xC1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7E, 0xE0, 0xC1, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC0, 0x61, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x67, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x00, 0xFC, 0x0D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xF0, 0x18, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x60, 0x18, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x60, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x60, 0x70, 0x3C, 0x00, 0x00, 0xE0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x60, 0x60, + 0x1E, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x07, 0x60, 0xE0, 0x0F, 0x00, 0x00, 0x3E, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x03, 0x00, 0x0F, 0x60, 0xC0, 0x03, 0x00, 0x80, 0x0F, + 0x1C, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x07, 0x00, 0x0C, 0x60, 0xC0, + 0x01, 0x00, 0xF0, 0x01, 0x38, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x05, + 0x00, 0x08, 0x60, 0xC0, 0x01, 0x00, 0x7C, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x83, 0x0C, 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, 0x1F, 0x00, + 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x0C, 0x00, 0x00, 0x60, 0x00, + 0x07, 0xE0, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x0F, + 0x00, 0x00, 0x60, 0x00, 0x06, 0xF8, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, + 0x00, 0x00, 0xCC, 0x1F, 0x00, 0x00, 0x60, 0x00, 0x0E, 0x3E, 0x00, 0x00, + 0x00, 0x1C, 0x00, 0x00, 0x00, 0x80, 0x67, 0x18, 0x00, 0x00, 0x60, 0x00, + 0xCC, 0x07, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x60, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0xFC, 0x01, 0x00, 0x00, + 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, }; -// Array of all bitmaps for convenience. (Total bytes used to store images in -// PROGMEM = 1040) const int epd_bitmap_allArray_LEN = 1; const unsigned char* -// epd_bitmap_allArray[1] = { epd_bitmap_ucog +// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 1040) +// const int epd_bitmap_allArray_LEN = 1; +// const unsigned char* epd_bitmap_allArray[1] = { +// epd_bitmap_ucog // }; diff --git a/src/main.cpp b/src/main.cpp index 759023f..514c0f8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,6 +21,7 @@ https://jgromes.github.io/RadioLib/ */ + #include #include // This file contains a binary patch for the SX1262 @@ -61,8 +62,8 @@ uint64_t RANGE_PER_PAGE = FREQ_END - FREQ_BEGIN; // FREQ_END - FREQ_BEGIN #define LOW_FILTER 3 #define FILTER_SPECTRUM_RESULTS true -// Number of samples for each frequency scan. Fewer samples = better temporal -// resolution. if more than 100 it can freez +// Number of samples for each frequency scan. Fewer samples = better temporal resolution. +// if more than 100 it can freez #define SAMPLES 100 //(scan time = 1294) // number of samples for RSSI method #define SAMPLES_RSSI RADIOLIB_SX126X_SPECTRAL_SCAN_WINDOW_DEFAULT // 21 // @@ -71,6 +72,7 @@ uint64_t RANGE_PER_PAGE = FREQ_END - FREQ_BEGIN; // FREQ_END - FREQ_BEGIN #define SINGLE_STEP (float)(RANGE / STEPS) + uint64_t range = (int)(FREQ_END - FREQ_BEGIN); uint64_t fr_begin = FREQ_BEGIN; uint64_t fr_end = FREQ_BEGIN; @@ -103,6 +105,7 @@ uint64_t detection_count = 0; bool single_page_scan = false; bool SOUND_ON = true; + #define PRINT_PROFILE_TIME #ifdef PRINT_PROFILE_TIME @@ -170,10 +173,11 @@ void setup(void) RADIOLIB_OR_HALT(radio.setDataShaping(RADIOLIB_SHAPING_NONE)); both.println("Starting scanning..."); vbat = heltec_vbat(); - both.printf("V battery: %.2fV (%d%%)\n", vbat, heltec_battery_percent(vbat)); + both.printf("V battery: %.2fV (%d%%)\n", vbat, + heltec_battery_percent(vbat)); delay(300); display.clear(); - + resolution = RANGE / STEPS; single_page_scan = (RANGE_PER_PAGE == range); @@ -191,8 +195,7 @@ void setup(void) both.println("Single Page Screen MODE"); both.println("Multi Screen View Press P - button"); both.println("Single Screen Resolution: " + String(resolution) + "Mhz/tick"); - both.println("Curent Resolution: " + String((float)RANGE_PER_PAGE / STEPS) + - "Mhz/tick"); + both.println("Curent Resolution: " + String((float)RANGE_PER_PAGE / STEPS) + "Mhz/tick"); for (int i = 0; i < 500; i++) { button.update(); @@ -214,8 +217,7 @@ void setup(void) both.println("Multi Page Screen MODE"); both.println("Single screen View Press P - button"); both.println("Single screen Resolution: " + String(resolution) + "Mhz/tick"); - both.println("Curent Resolution: " + String((float)RANGE_PER_PAGE / STEPS) + - "Mhz/tick"); + both.println("Curent Resolution: " + String((float)RANGE_PER_PAGE / STEPS) + "Mhz/tick"); for (int i = 0; i < 500; i++) { button.update(); @@ -233,8 +235,9 @@ void setup(void) display.clear(); Serial.println(); - // calibrate only once ,,, at startup - radio.setFrequency(FREQ_BEGIN, true); + // calibrate only once ,,, at startup + radio.setFrequency(FREQ_BEGIN,true); + // waterfall start line y-axis w = WATERFALL_START; @@ -247,7 +250,7 @@ void loop(void) drone_detected_frequency_start = 0; ranges_count = 0; - // reset scan time + //reset scan time scan_time = 0; // general purpose loop conter @@ -256,7 +259,7 @@ void loop(void) #ifdef PRINT_PROFILE_TIME loop_start = millis(); #endif - + if (!ANIMATED_RELOAD || !single_page_scan) { // clear the scan plot rectangle @@ -269,7 +272,7 @@ void loop(void) { RANGE_PER_PAGE = range; } - + fr_begin = FREQ_BEGIN; fr_end = fr_begin; @@ -320,18 +323,18 @@ void loop(void) fr_end = SCAN_RANGES[range_item] % 1000; range = fr_end - fr_begin; } - + if (!ANIMATED_RELOAD || !single_page_scan) { // clear the scan plot rectangle UI_clearPlotter(); } - + if (single_page_scan == false) { UI_displayDecorate(fr_begin, fr_end, true); } - + drone_detected_frequency_start = 0; display.setTextAlignment(TEXT_ALIGN_RIGHT); @@ -339,7 +342,7 @@ void loop(void) for (x = 0; x < STEPS; x++) { #if ANIMATED_RELOAD - UI_drawCursor(x); + UI_drawCursor(x); #endif #ifdef PRINT_PROFILE_TIME @@ -349,8 +352,7 @@ void loop(void) waterfall[range_item][x][w] = false; freq = fr_begin + (range * ((float)x / STEPS)); - radio.setFrequency(freq, - false); // false = no calibration need here + radio.setFrequency(freq,false); // false = no calibration need here #ifdef PRINT_DEBUG // Serial.printf("Step:%d Freq: %f\n",x,freq); @@ -381,8 +383,8 @@ void loop(void) Serial.println(state); } - // memset - memset(result, 0, RADIOLIB_SX126X_SPECTRAL_SCAN_RES_SIZE); + // memset + memset(result,0,RADIOLIB_SX126X_SPECTRAL_SCAN_RES_SIZE); result_index = 0u; // N of samples for (int r = 0; r < SAMPLES_RSSI; r++) @@ -390,7 +392,7 @@ void loop(void) rssi = radio.getRSSI(false); // delay(ONE_MILLISEC); // ToDO: check if 4 is correct value for 33 power bins - result_index = uint8_t(abs(rssi) / 4); /// still not clear formula + result_index = uint8_t(abs(rssi) / 4); /// still not clear formula #ifdef PRINT_DEBUG // Serial.printf("RSSI: %d IDX: %d\n",rssi,result_index); @@ -398,8 +400,7 @@ void loop(void) // avoid buffer overflow if (result_index < RADIOLIB_SX126X_SPECTRAL_SCAN_RES_SIZE) { - // Saving max value only rss is negative so smaller is - // bigger + // Saving max value only rss is negative so smaller is bigger if (result[result_index] > rssi) { result[result_index] = rssi; @@ -411,12 +412,14 @@ void loop(void) Serial.print("Out-of-Range: result_index %d\n"); } #endif + } } -#endif // SCAN_METHOD == METHOD_RSSI - +#endif // SCAN_METHOD == METHOD_RSSI + detected = false; + for (y = 0; y < RADIOLIB_SX126X_SPECTRAL_SCAN_RES_SIZE; y++) { #ifdef PRINT_DEBUG @@ -430,16 +433,13 @@ void loop(void) // if RSSI method actual value is -xxx dB if (result[y]) { - // do not process 'first' and 'last' row to avoid out of - // index access - if ((y != 0) && (y != (RADIOLIB_SX126X_SPECTRAL_SCAN_RES_SIZE - 1))) + // do not process 'first' and 'last' row to avoid out of index access + if ((y!=0) && (y != (RADIOLIB_SX126X_SPECTRAL_SCAN_RES_SIZE - 1))) { if ((result[y + 1] != 0) || (result[y - 1] != 0)) { - // Filling the empty pixel between signals int the - // level < 27 (noise level) - /* if (y < 27 && result[y + 1] == 0 && result[y + - 2] > 0) + // Filling the empty pixel between signals int the level < 27 (noise level) + /* if (y < 27 && result[y + 1] == 0 && result[y + 2] > 0) { result[y + 1] = 1; filtered_result[y + 1] = 1; @@ -450,17 +450,18 @@ void loop(void) } #endif + // if (result[y] || y == drone_detection_level) { // check if we should alarm about a drone presence - if ((filtered_result[y] == 1) // we have some data and - && (y <= drone_detection_level)) // detection threshold match + if ((filtered_result[y] == 1) // we have some data and + && (y <= drone_detection_level)) // detection threshold match { - + // Set LED to ON (filtered in UI component) UI_setLedFlag(true); -#if (WATERFALL_ENABLED == true) +#if ( WATERFALL_ENABLED == true ) if (single_page_scan) { // Drone detection true for waterfall @@ -471,14 +472,14 @@ void loop(void) #endif if (drone_detected_frequency_start == 0) { - // mark freq start + // mark freq start drone_detected_frequency_start = freq; } - // mark freq end ... will shift right to last detected - // range + // mark freq end ... will shift right to last detected range drone_detected_frequency_end = freq; + // If level is set to sensitive, // start beeping every 10th frequency and shorter if (drone_detection_level <= 25) @@ -490,7 +491,7 @@ void loop(void) if (detection_count % 5 == 0 && SOUND_ON) { tone(BUZZER_PIN, 205, 10); // same action ??? - } + } } else { @@ -500,20 +501,22 @@ void loop(void) } } - // debug draw + + // debug draw // display.setPixel(x, 1); // display.setPixel(x, 2); // display.setPixel(x, 3); // display.setPixel(x, 4); - // draw vertical line on top of display for "drone - // detected" frequencies - display.drawLine(x, 1, x, 6); + // draw vertical line on top of display for "drone detected" frequencies + display.drawLine(x , 1, x, 6 ); } -#if (WATERFALL_ENABLED == true) - if ((filtered_result[y] == 1) && (y > drone_detection_level) && - (single_page_scan) && (waterfall[range_item][x][w] != true)) +#if ( WATERFALL_ENABLED == true ) + if ((filtered_result[y] == 1) + && ( y > drone_detection_level) + && ( single_page_scan ) + && ( waterfall[range_item][x][w] != true) ) { // If drone not found set dark pixel on the waterfall // TODO: make something like scrolling up if possible @@ -528,6 +531,7 @@ void loop(void) #endif // If 0 + // next 2 If's ... adds !!!! 10ms of runtime ......tfk ??? if (filtered_result[y] == 1) { @@ -539,20 +543,21 @@ void loop(void) // ------------------------------------------------------------- // Draw "Detection Level line" every 2 pixel // ------------------------------------------------------------- - if ((y == drone_detection_level) && (x % 2 == 0)) - { + if ( ( y == drone_detection_level) && (x % 2 == 0)) + { display.setColor(INVERSE); display.setPixel(x, y); - display.setPixel(x, y + 1); // 2 px wide + display.setPixel(x, y+1); // 2 px wide display.setColor(WHITE); } } - } + } + #ifdef PRINT_PROFILE_TIME scan_time += (millis() - scan_start_time); -#endif - // count detected +#endif + // count detected if (detected) { detection_count++; @@ -601,8 +606,7 @@ void loop(void) { // Visually confirm it's off so user releases button display.displayOff(); - // Deep sleep (has wait for release so we don't wake up - // immediately) + // Deep sleep (has wait for release so we don't wake up immediately) heltec_deep_sleep(); break; } @@ -633,7 +637,7 @@ void loop(void) { w = WATERFALL_START; } -#if (WATERFALL_ENABLED == true) +#if ( WATERFALL_ENABLED == true ) // Draw waterfall position cursor if (single_page_scan) { @@ -644,18 +648,20 @@ void loop(void) #endif // Render display data here - display.display(); + display.display(); } #ifdef PRINT_DEBUG - // Serial.println("----"); + //Serial.println("----"); #endif loop_time = millis() - loop_start; + #ifdef PRINT_PROFILE_TIME #ifdef PRINT_DEBUG - Serial.printf("LOOP: %lld ms; SCAN: %lld ms;\n ", loop_time, scan_time); + Serial.printf("LOOP: %lld ms; SCAN: %lld ms;\n ", loop_time,scan_time); #endif #endif + } diff --git a/src/ui.cpp b/src/ui.cpp index ada8a0b..f4f8ef2 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -1,7 +1,7 @@ #include "ui.h" -#include "RadioLib.h" -#include "global_config.h" #include "images.h" +#include "global_config.h" +#include "RadioLib.h" // ------------------------------------------------- // LOCAL DEFINES @@ -37,6 +37,7 @@ extern unsigned int range_item; extern uint64_t loop_time; + void UI_Init(SSD1306Wire *display_ptr) { // init pointer to display instance. @@ -48,7 +49,10 @@ void UI_Init(SSD1306Wire *display_ptr) display_instance->display(); } -void UI_setLedFlag(bool new_status) { led_flag = new_status; } +void UI_setLedFlag(bool new_status) +{ + led_flag = new_status; +} void clearStatus(void) { @@ -99,8 +103,7 @@ void drawTicks(float every, int length) tick_minor = 0; median = (RANGE_PER_PAGE / every) / 2; // TODO: (RANGE_PER_PAGE / every) - // * 2 has twice extra steps we need to figureout correct logic or minor - // ticks is not showing to the end + // * 2 has twice extra steps we need to figureout correct logic or minor ticks is not showing to the end for (int t = 0; t <= (RANGE_PER_PAGE / every) * 2; t++) { // fix if pixels per step is not int and we have shift @@ -118,24 +121,22 @@ void drawTicks(float every, int length) // Central tick if (tick > (128 / 2) - 3 && tick < (128 / 2) + 3) { - display_instance->drawLine(tick + 1, HEIGHT + X_AXIS_WEIGHT, tick + 1, - HEIGHT + X_AXIS_WEIGHT + length); + display_instance->drawLine(tick + 1, HEIGHT + X_AXIS_WEIGHT, + tick + 1, HEIGHT + X_AXIS_WEIGHT + length); } } #ifdef MINOR_TICKS // Fix two ticks together - if ((tick_minor + 1 != tick) && (tick_minor - 1 != tick) && - (tick_minor + 2 != tick) && (tick_minor - 2 != tick)) + if ((tick_minor + 1 != tick) && (tick_minor - 1 != tick) && (tick_minor + 2 != tick) && (tick_minor - 2 != tick)) { - display_instance->drawLine(tick_minor, HEIGHT + X_AXIS_WEIGHT, tick_minor, - HEIGHT + X_AXIS_WEIGHT + MINOR_TICK_LENGTH); + display_instance->drawLine(tick_minor, HEIGHT + X_AXIS_WEIGHT, + tick_minor, HEIGHT + X_AXIS_WEIGHT + MINOR_TICK_LENGTH); } // Central tick if (tick_minor > (128 / 2) - 3 && tick_minor < (128 / 2) + 3) { display_instance->drawLine(tick_minor + 1, HEIGHT + X_AXIS_WEIGHT, - tick_minor + 1, - HEIGHT + X_AXIS_WEIGHT + MINOR_TICK_LENGTH); + tick_minor + 1, HEIGHT + X_AXIS_WEIGHT + MINOR_TICK_LENGTH); } #endif } @@ -158,8 +159,10 @@ void UI_displayDecorate(int begin = 0, int end = 0, bool redraw = false) if (!ui_initialized) { // Start and end ticks - display_instance->fillRect(0, HEIGHT + X_AXIS_WEIGHT, 2, MAJOR_TICK_LENGTH + 1); - display_instance->fillRect(126, HEIGHT + X_AXIS_WEIGHT, 2, MAJOR_TICK_LENGTH + 1); + display_instance->fillRect(0, HEIGHT + X_AXIS_WEIGHT, 2, + MAJOR_TICK_LENGTH + 1); + display_instance->fillRect(126, HEIGHT + X_AXIS_WEIGHT, 2, + MAJOR_TICK_LENGTH + 1); // Drone detection level display_instance->setTextAlignment(TEXT_ALIGN_RIGHT); display_instance->drawString(128, 0, String(drone_detection_level)); @@ -176,14 +179,13 @@ void UI_displayDecorate(int begin = 0, int end = 0, bool redraw = false) display_instance->drawString(128, 0, String(drone_detection_level)); // Frequency start display_instance->setTextAlignment(TEXT_ALIGN_LEFT); - display_instance->drawString(0, ROW_STATUS_TEXT, + display_instance->drawString(0, ROW_STATUS_TEXT, (begin == 0) ? String(FREQ_BEGIN) : String(begin)); - // Frequency detected + // Frequency detected display_instance->setTextAlignment(TEXT_ALIGN_CENTER); display_instance->drawString(128 / 2, ROW_STATUS_TEXT, - (begin == 0) ? String(median_frequency) - : String(begin + ((end - begin) / 2))); + (begin == 0) ? String(median_frequency) : String(begin + ((end - begin) / 2))); // Frequency end display_instance->setTextAlignment(TEXT_ALIGN_RIGHT); display_instance->drawString(128, ROW_STATUS_TEXT, @@ -191,16 +193,14 @@ void UI_displayDecorate(int begin = 0, int end = 0, bool redraw = false) } // Status text block - if (led_flag) // 'drone' detected + if (led_flag) // 'drone' detected { display_instance->setTextAlignment(TEXT_ALIGN_CENTER); // clear status line clearStatus(); display_instance->drawString(start_scan_text, ROW_STATUS_TEXT, - String(drone_detected_frequency_start) + ">RF<" + - String(drone_detected_frequency_end)); - } - else + String(drone_detected_frequency_start) + ">RF<" + String(drone_detected_frequency_end)); + } else { // "Scanning" display_instance->setTextAlignment(TEXT_ALIGN_CENTER); @@ -208,19 +208,23 @@ void UI_displayDecorate(int begin = 0, int end = 0, bool redraw = false) clearStatus(); if (scan_progress_count == 0) { - display_instance->drawString(start_scan_text, ROW_STATUS_TEXT, "Scan \\"); + display_instance->drawString(start_scan_text, ROW_STATUS_TEXT, + "Scan \\"); } else if (scan_progress_count == 1) { - display_instance->drawString(start_scan_text, ROW_STATUS_TEXT, "Scan |"); + display_instance->drawString(start_scan_text, ROW_STATUS_TEXT, + "Scan |"); } else if (scan_progress_count == 2) { - display_instance->drawString(start_scan_text, ROW_STATUS_TEXT, "Scan /"); + display_instance->drawString(start_scan_text, ROW_STATUS_TEXT, + "Scan /"); } else if (scan_progress_count == 3) { - display_instance->drawString(start_scan_text, ROW_STATUS_TEXT, "Scan -"); + display_instance->drawString(start_scan_text, ROW_STATUS_TEXT, + "Scan -"); } scan_progress_count++; if (scan_progress_count >= 4) @@ -229,6 +233,7 @@ void UI_displayDecorate(int begin = 0, int end = 0, bool redraw = false) } } + if (led_flag == true && detection_count >= 5) { digitalWrite(LED, HIGH); @@ -244,32 +249,31 @@ void UI_displayDecorate(int begin = 0, int end = 0, bool redraw = false) digitalWrite(LED, LOW); } + if (ranges_count == 0) { #ifdef DEBUG display_instance->setTextAlignment(TEXT_ALIGN_LEFT); - display_instance->drawString(0, ROW_STATUS_TEXT, String(loop_time)); + display_instance->drawString(0, ROW_STATUS_TEXT,String(loop_time)); #else display_instance->setTextAlignment(TEXT_ALIGN_LEFT); display_instance->drawString(0, ROW_STATUS_TEXT, String(FREQ_BEGIN)); - + #endif display_instance->setTextAlignment(TEXT_ALIGN_RIGHT); display_instance->drawString(128, ROW_STATUS_TEXT, String(FREQ_END)); + } else if (ranges_count > 0) { display_instance->setTextAlignment(TEXT_ALIGN_LEFT); display_instance->drawString(0, ROW_STATUS_TEXT, - String(SCAN_RANGES[range_item] / 1000) + "-" + - String(SCAN_RANGES[range_item] % 1000)); + String(SCAN_RANGES[range_item] / 1000) + "-" + String(SCAN_RANGES[range_item] % 1000)); if (range_item + 1 < iterations) { display_instance->setTextAlignment(TEXT_ALIGN_RIGHT); display_instance->drawString(128, ROW_STATUS_TEXT, - String(SCAN_RANGES[range_item + 1] / 1000) + - "-" + - String(SCAN_RANGES[range_item + 1] % 1000)); + String(SCAN_RANGES[range_item + 1] / 1000) + "-" + String(SCAN_RANGES[range_item + 1] % 1000)); } } if (ui_initialized == false)