#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64);
int lcdAddress = 0x27;
LiquidCrystal_I2C lcd(lcdAddress, 16, 2);
int countdownSeconds = 10;
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
const int colorChangeInterval = 500;
const int fireworksStepInterval = 200;
unsigned long lastColorChangeTime = 0;
unsigned long lastFireworksStepTime = 0;
unsigned long lastFireworks1Time = 0;
unsigned long lastFireworks2Time = 0;
const unsigned char myFireWork [] PROGMEM = {
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,
0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa0, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x19, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xd0, 0x00, 0x07, 0x84, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x40, 0x38, 0x00, 0x00, 0x03, 0xc8, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0xfc, 0x80, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfa, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xff, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfd, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xc0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x20, 0x00, 0x00, 0x00,
0x2f, 0xff, 0x80, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xf4, 0x7c, 0x00, 0x00, 0x00,
0x47, 0xff, 0xc7, 0x00, 0x07, 0x07, 0x00, 0x00, 0x78, 0x00, 0x4f, 0x98, 0x3b, 0x00, 0x00, 0x00,
0x6b, 0xff, 0xf8, 0xf0, 0x02, 0x23, 0xc0, 0x07, 0x1e, 0x00, 0x17, 0x39, 0x10, 0x00, 0x00, 0x00,
0x0b, 0xfe, 0xc0, 0x38, 0x00, 0xc0, 0xf0, 0x08, 0x07, 0x00, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00,
0x0b, 0xfc, 0x80, 0x1c, 0x01, 0x80, 0x78, 0x10, 0x03, 0x80, 0x02, 0x78, 0x80, 0x00, 0x00, 0x00,
0x00, 0x09, 0x00, 0x1c, 0x01, 0x00, 0x38, 0x20, 0x03, 0xc0, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0x00, 0x0e, 0x03, 0x00, 0x3c, 0x40, 0x01, 0xc0, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x3c, 0x00, 0x01, 0xc0, 0x01, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0e, 0x06, 0x00, 0x1c, 0x00, 0x01, 0xc0, 0x02, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0e, 0x06, 0x00, 0x1e, 0x00, 0x01, 0xc0, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x1e, 0x00, 0x01, 0xc0, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x1e, 0x00, 0x01, 0xc0, 0x08, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0c, 0x0e, 0x00, 0x0e, 0x00, 0x01, 0x80, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1c, 0x0e, 0x00, 0x0e, 0x00, 0x03, 0x80, 0x20, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x38, 0x0a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x40, 0x38, 0x0f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x30, 0x0e, 0x00, 0x0e, 0x00, 0x06, 0x00, 0x80, 0x38, 0x0f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x60, 0x0e, 0x00, 0x0e, 0x00, 0x0c, 0x01, 0x80, 0x38, 0x4f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x0e, 0x00, 0x0e, 0x00, 0x08, 0x01, 0xff, 0xff, 0xc7, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0x0c, 0x00, 0x18, 0x01, 0xfa, 0x79, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x0e, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x60, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x00, 0x07, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x00, 0x07, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x20, 0x00, 0x03, 0x80, 0x10, 0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x60, 0x00, 0x83, 0xc0, 0x20, 0x0c, 0x00, 0x18, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0x81, 0xe0, 0x40, 0x1f, 0xff, 0xf0, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0xff, 0x80, 0x70, 0x00, 0x3f, 0xff, 0xf0, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x30, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xe8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x07, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x81, 0x80, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe3, 0xc0, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x80, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00
};
const int fireWorkallArray_LEN = 1;
const unsigned char* fireWorkallArray[1] = {
myFireWork
};
const unsigned char myBitmap [] PROGMEM = {
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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc7, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc4, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xfb, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x3c, 0x7b, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0x3e, 0x7c, 0xf8, 0xe1, 0xf8, 0xf9, 0x8c, 0x7c, 0x63, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xbe, 0x7c, 0xf8, 0xf1, 0xfd, 0xf9, 0x8c, 0x3f, 0xef, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00,
0x3b, 0xb8, 0xe0, 0xc1, 0xf1, 0x9d, 0xc1, 0x8c, 0x0f, 0xef, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x3f, 0x3e, 0x78, 0xf1, 0xf9, 0xf9, 0x81, 0xfc, 0x0f, 0xe6, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x3f, 0x3e, 0x3c, 0xf9, 0xb9, 0xfb, 0x81, 0xfc, 0x0c, 0x06, 0x1b, 0x98, 0x00, 0x00, 0x00, 0x00,
0x3e, 0x38, 0x0e, 0xc3, 0xf9, 0xf1, 0x81, 0x8c, 0x00, 0x0f, 0x37, 0x98, 0x00, 0x00, 0x00, 0x00,
0x3f, 0x38, 0x4c, 0xe3, 0xfd, 0xf9, 0xf9, 0x8c, 0x00, 0x03, 0xb7, 0xd8, 0x00, 0x00, 0x00, 0x00,
0x3b, 0xbe, 0xfc, 0xfb, 0x1d, 0x9c, 0xf9, 0x8c, 0x00, 0x03, 0xf7, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x03, 0xfe, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x0e, 0x03, 0x8f, 0x40, 0xe4, 0x3c, 0x70, 0x03, 0xd0, 0x5c, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x48, 0x44, 0x84, 0x42, 0x4a, 0x12, 0x18, 0x48, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x00, 0x28, 0x44, 0x84, 0x83, 0x4b, 0x32, 0x1c, 0x48, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x2f, 0x24, 0xe4, 0x81, 0x5b, 0x3b, 0x96, 0x48, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x3f, 0x80, 0x28, 0x28, 0x84, 0x81, 0x42, 0xaa, 0x13, 0x48, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00,
0x33, 0x80, 0x28, 0x18, 0x84, 0xc3, 0x40, 0xca, 0x11, 0xc8, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00,
0x3f, 0x82, 0x48, 0x10, 0x84, 0x66, 0x44, 0x4a, 0x10, 0xc8, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00,
0x1d, 0x83, 0x8f, 0x00, 0xe7, 0x3c, 0x00, 0x03, 0xd0, 0x08, 0x00, 0x00, 0x40, 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, 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, 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, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
void setup() {
// Inisialisasi LCD
display.begin( SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.drawBitmap(0, 0, myBitmap, 128, 64, WHITE);
display.setTextColor(1);
display.setTextSize(2);
display.display();
delay(1000);
lcd.backlight();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
//0123456789012345
lcd.print(" Countdown: ");
// Atur pin sebagai OUTPUT
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
delay(500);
}
void loop() {
if (countdownSeconds >= 10) {
lcd.setCursor(8, 1);
lcd.print(countdownSeconds);
} else {
lcd.clear();
lcd.setCursor(0, 0);
//0123456789012345
lcd.print(" Countdown: ");
lcd.setCursor(8, 1);
lcd.print(countdownSeconds);
}
countdownSeconds--;
if (countdownSeconds == 0) {
lcd.clear();
lcd.setCursor(0, 0);
//0123456789012345
lcd.print("Happy New Year!!");
lcd.setCursor(0, 1);
//0123456789012345
lcd.print(" 2024 ");
delay(2000);
lcd.clear();
oledDis();
while (true) {
updateFireworks1();
updateFireworks2();
updateColor();
if (millis() - lastFireworks1Time > 1000 && millis() - lastFireworks2Time > 1000) {
lcd.clear();
}
}
}
delay(1000);
}
void setColor(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
void updateColor() {
unsigned long currentTime = millis();
if (currentTime - lastColorChangeTime >= colorChangeInterval) {
setColor(random(255), random(255), random(255));
lastColorChangeTime = currentTime;
}
}
void animateFireworks1() {
for (int i = 1; i < 5; i++) {
lcd.setCursor(i * 3, 1);
lcd.print("*");
delay(200);
}
}
void animateFireworks2() {
for (int k = 0; k < 15; k++) {
lcd.setCursor(k * 3, 0);
lcd.print("*");
delay(200);
}
}
void updateFireworks1() {
unsigned long currentTime = millis();
if (currentTime - lastFireworks1Time >= 1000) {
animateFireworks1();
lastFireworks1Time = currentTime;
}
}
void updateFireworks2() {
unsigned long currentTime = millis();
if (currentTime - lastFireworks2Time >= 1000) {
animateFireworks2();
lastFireworks2Time = currentTime;
}
}
void oledDis(){
display.clearDisplay();
display.drawBitmap(0, 0, fireWorkallArray[0], 128, 64, WHITE);
display.setTextSize(1);
display.display();
delay(1000);
}