// Подключение библиотек для работы OLED
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 7
Adafruit_SSD1306 display(OLED_RESET);
unsigned long ms = 0;
unsigned long popping = 0;
int wpop_step = 0;
int wpop_move = 0;
const unsigned long dayTime = 24*3600000; // Размер суток в мс
const unsigned char wpop1 [] PROGMEM = {
0x00, 0x00, 0x00, 0x04, 0x03, 0xe0, 0x03, 0x1c, 0x10, 0x00, 0xc4, 0x48, 0x00, 0x3c, 0xd4, 0x00,
0x02, 0x1c, 0x00, 0x02, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08,
0x08, 0x00, 0x10, 0x08, 0x00, 0x70, 0x18, 0x01, 0xe0, 0x10, 0x03, 0xc0, 0x30, 0x07, 0x00, 0x20,
0x0e, 0x00, 0xa0, 0x0c, 0x02, 0x40, 0x18, 0x18, 0x80, 0x10, 0xf3, 0x00, 0x23, 0xed, 0x80, 0x5e,
0x40, 0xc0, 0xe0, 0xb0, 0x78
};
const unsigned char wpop2 [] PROGMEM = {
0x00, 0x03, 0xe0, 0x00, 0x1c, 0x10, 0x00, 0x04, 0x48, 0x07, 0x1c, 0xd4, 0x00, 0xe2, 0x1c, 0x00,
0x02, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x10, 0x00, 0x04, 0x18, 0x00, 0x04, 0x08, 0x00, 0x08,
0x08, 0x00, 0x10, 0x08, 0x00, 0x70, 0x18, 0x01, 0xe0, 0x10, 0x03, 0xc0, 0x32, 0x07, 0x00, 0x26,
0x0e, 0x00, 0xbc, 0x0c, 0x02, 0x68, 0x18, 0x1c, 0x80, 0x30, 0xf7, 0x00, 0x43, 0xe4, 0x00, 0xfe,
0x0c, 0x00, 0x00, 0x0b, 0x00
};
const unsigned char wpop3 [] PROGMEM = {
0x00, 0x00, 0x00, 0x04, 0x03, 0xe0, 0x03, 0x1c, 0x10, 0x00, 0xc4, 0x48, 0x00, 0x3c, 0xd4, 0x00,
0x02, 0x1c, 0x00, 0x02, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x08, 0x00, 0x04, 0x08, 0x00, 0x08,
0x08, 0x00, 0x10, 0x08, 0x00, 0x70, 0x08, 0x01, 0xa0, 0x10, 0x02, 0xc0, 0x10, 0x06, 0x00, 0x20,
0x0a, 0x00, 0xa0, 0x08, 0x02, 0x40, 0x10, 0x1e, 0x80, 0x10, 0xf3, 0x00, 0x23, 0xed, 0x80, 0x5e,
0x40, 0xc0, 0xe0, 0xb0, 0x78
};
const unsigned char wpop4 [] PROGMEM = {
0x00, 0x03, 0xe0, 0x00, 0x1c, 0x10, 0x00, 0x04, 0x48, 0x07, 0x1c, 0xd4, 0x00, 0xe2, 0x1c, 0x00,
0x02, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x10, 0x00, 0x04, 0x18, 0x00, 0x04, 0x08, 0x00, 0x08,
0x08, 0x00, 0x30, 0x08, 0x00, 0x40, 0x18, 0x01, 0xc0, 0x10, 0x02, 0x40, 0x32, 0x07, 0x00, 0x26,
0x08, 0x00, 0xfc, 0x08, 0x03, 0x88, 0x18, 0x10, 0x80, 0x30, 0xff, 0x00, 0x43, 0x44, 0x00, 0xfe,
0x0c, 0x00, 0x00, 0x0b, 0x00
};
const int wpop_LEN = 4;
const unsigned char* wpop[4] = {
wpop1,
wpop2,
wpop3,
wpop4
};
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // инициализация дисплея по интерфейсу I2C, адрес 0x3C
display.clearDisplay(); // очистка дисплея
display.setTextSize(1); // установка размера шрифта
display.setTextColor(WHITE); // установка цвета текста
display.setCursor(0, 0); // установка курсора в позицию X = 0; Y = 0
}
void loop() {
ms = millis()*1000;
Display();
}
void Display(){
display.clearDisplay();
Display_time(ms,15,0);
Display_time(ms,83,0);
Whats_popping();
display.display();
}
void Display_time(unsigned long time, int x, int y){
display.setCursor(x, y);
unsigned long hours = time/3600000%24;
unsigned long minutes = time/60000%60;
if (hours<10){display.print (0);}
display.print (hours);
display.print (':');
if (minutes<10){display.print (0);}
display.print (minutes);
}
void Whats_popping(){
if (ms - popping >= 250){
popping = ms;
wpop_step +=1;
if (wpop_step == 4) {
wpop_step = 0;
}
}
wpop_move = 77*(1-double(dayTime - ms)/dayTime);
display.drawBitmap(wpop_move, 8, wpop[wpop_step], 23, 23, WHITE);
}