#include <Arduino.h>
#include <U8g2lib.h>
U8G2_MAX7219_32X8_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* cs=*/ 10, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ U8X8_PIN_NONE);
const unsigned char epd_bitmap_matrix_display_counter [] = {
0x7e, 0x67, 0x75, 0x77, 0xef, 0x21, 0x15, 0x44, 0xe7, 0x21, 0x15, 0x44, 0xe3, 0x27, 0x77, 0x77,
0xe7, 0x24, 0x11, 0x15, 0xef, 0x24, 0x11, 0x15, 0x7e, 0x77, 0x71, 0x77, 0x00, 0x00, 0x00, 0x00
};
byte digits[6] = {0, 0, 0, 0, 0, 0};
byte digits_offset_perc[6] = {0, 0, 0, 0, 0, 0};
char digit_char[2];
char digit_char_next[2];
float y_offset;
void setup(void) {
u8g2.begin();
u8g2.setContrast(10*16);
pinMode(7, INPUT_PULLUP);
}
void loop(void) {
if (digitalRead(7) == LOW) {
if (digits_offset_perc[5] == 0) {
digits_offset_perc[5] = 2;
}
}
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minuteconsole_tr);
for (int i=5; i>=0; i--) {
if (digits_offset_perc[i] > 0) {
digits_offset_perc[i] = digits_offset_perc[i] + 2;
if ((digits[i] == 9) && (digits_offset_perc[i-1] == 0) && (digits_offset_perc[i] > 20)) {
digits_offset_perc[i-1] = 2;
}
if (digits_offset_perc[i] >= 100) {
digits_offset_perc[i] = 0;
digits[i] = digits[i] + 1;
if (digits[i] == 10) {
digits[i] = 0;
}
}
}
y_offset = round((1-((cos(digits_offset_perc[i] / 100.0 * 3.141592654) / 2.0)+0.5)) * 8.0);
itoa(digits[i], digit_char, 10);
itoa((digits[i]+1) % 10, digit_char_next, 10);
u8g2.drawStr(9 + i*4, 7 - y_offset, digit_char);
u8g2.drawStr(9 + i*4, 7 - y_offset + 8, digit_char_next);
}
u8g2.sendBuffer();
}