From 7f51bbc1a51e03a28ec08cf5b6c8fca6974bcaa8 Mon Sep 17 00:00:00 2001 From: ErfanSn <50053121+ErfanSn@users.noreply.github.com> Date: Sat, 23 Oct 2021 17:37:30 +0330 Subject: [PATCH] Release v1.1.0 --- ESTimer.ino | 20 +++++++++++++------- Fonts.h | 21 --------------------- Images.h | 24 ++++++++++++++++++++++++ README.md | 4 ++-- lib/ESTimer.zip | Bin 121830 -> 121918 bytes 5 files changed, 39 insertions(+), 30 deletions(-) create mode 100644 Images.h diff --git a/ESTimer.ino b/ESTimer.ino index 703bf81..72bddaa 100644 --- a/ESTimer.ino +++ b/ESTimer.ino @@ -1,8 +1,11 @@ -#define INCLUDE_OLED 0 +#define INCLUDE_OLED false // Change it to true if you assemble monitor version +#define BRIGHTNESS_OLED 0.5 // In Range of 0 to 1 +#define FLIP_VERTICAL_CONTENT false // If you have connect your ES Timer to right side of computer must change it to true #include #if INCLUDE_OLED #include "Fonts.h" +#include "Images.h" #endif #define seconds(n) (n) @@ -50,6 +53,9 @@ void initTimer() { EEPROM.get(8, countDonePomodoros); #if INCLUDE_OLED +#if FLIP_VERTICAL_CONTENT + ESTimer.flipVerticalContent(); +#endif splash(); initNumbers(); @@ -126,6 +132,12 @@ void startCountdownTimer(bool isAwake) { } #if INCLUDE_OLED +void splash() { + ESTimer.drawBitmap(46, 0, 82, 8, es_logo); + ESTimer.delay(3000); + ESTimer.clear(); +} + void drawNumbers(uint8_t m0, uint8_t m1, uint8_t s0, uint8_t s1) { ESTimer.drawBitmap(65, 1, 100, 4, numbers[m0]); ESTimer.drawBitmap(65, 4, 100, 7, numbers[m1]); @@ -138,12 +150,6 @@ void initNumbers() { drawNumbers(t, t, t, t); } -void splash() { - ESTimer.drawBitmap(46, 0, 82, 8, es_logo); - ESTimer.delay(3000); - ESTimer.clear(); -} - void initStatusPomodoros() { for (uint8_t i = 0; i < 16; i += 2) { if (i < 8) { diff --git a/Fonts.h b/Fonts.h index a2a652b..5a27bc0 100644 --- a/Fonts.h +++ b/Fonts.h @@ -2,27 +2,6 @@ // bitmap to code -> https://javl.github.io/image2cpp/ -const unsigned char es_logo[] PROGMEM = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf8, - 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x0f, 0x0f, - 0x07, 0x03, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x07, 0x0f, 0x0f, 0x3f, 0xff, - 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0x3f, 0x00, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, - 0xe7, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0x87, 0xe1, 0xf0, 0xfc, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0xff, 0xff, 0xfe, 0xfc, 0xf0, 0xe1, - 0x87, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x3f, 0x7f, 0xff, - 0xff, 0xfc, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - const uint8_t numbers[10][105] PROGMEM = { { // 0 diff --git a/Images.h b/Images.h new file mode 100644 index 0000000..798d849 --- /dev/null +++ b/Images.h @@ -0,0 +1,24 @@ +#include + +// bitmap to code -> https://javl.github.io/image2cpp/ + +const unsigned char es_logo[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf8, + 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x0f, 0x0f, + 0x07, 0x03, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x07, 0x0f, 0x0f, 0x3f, 0xff, + 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x3f, 0x00, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, + 0xe7, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0x87, 0xe1, 0xf0, 0xfc, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0xff, 0xff, 0xfe, 0xfc, 0xf0, 0xe1, + 0x87, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x3f, 0x7f, 0xff, + 0xff, 0xfc, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/README.md b/README.md index b2605b6..945afa4 100644 --- a/README.md +++ b/README.md @@ -58,10 +58,10 @@ After opening the file `EsTimer.ino` in `Arduino IDE` In order to be able to up `Arduino IDE Toolbar -> Sketch -> Include Library -> Add .ZIP Library...` -If you have assembled the monitor version, you need to change the value of `INCLUDE_OLED` to `1`. Now to upload the code in `ES Timer` click on the arrow button or use shortcut `Ctrl + U`. Wait for the code to be compiled. After you see the `Please plug in the device ...` message. Connect the device to the computer. After a maximum of 5 seconds, the code will be uploaded. Congratulations 🎉, your ES Timer is ready to use. +If you have assembled the monitor version, you need to change the value of `INCLUDE_OLED` to `true`. Now to upload the code in `ES Timer` click on the arrow button or use shortcut `Ctrl + U`. Wait for the code to be compiled. After you see the `Please plug in the device ...` message. Connect the device to the computer. After a maximum of 5 seconds, the code will be uploaded. Congratulations 🎉, your ES Timer is ready to use. ## Configurations -You can customize the awake and sleep system. All you have to do is change the definition values of `AWAKE_TIME` and `SLEEP_TIME`. +You can customize the awake and sleep system. All you have to do is change the definition values of `AWAKE_TIME` and `SLEEP_TIME` also, if you want you can change the brightness OLED by changing `BRIGHTNESS_OLED` defines in range of `0..1` and if you have connected your ES Timer to right side of computer must change `FLIP_VERTICAL_CONTENT` to `true` **Note 📝**: According to the code, the maximum definition time for `AWAKE_TIME` is 99 minutes and for `SLEEP_TIME` is a quarter `AWAKE_TIME`. diff --git a/lib/ESTimer.zip b/lib/ESTimer.zip index d28c31237504f0528ea1bb885d02b4b5e1bc7041..3e5e51255c9651c203fb103f9dacae84febbdbc6 100644 GIT binary patch delta 5899 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 delta 5813 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