#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define FRAME_DELAY (42)
#define FRAME_WIDTH (48)
#define FRAME_HEIGHT (48)
#define FRAME_COUNT (sizeof(frames) / sizeof(frames[0]))
const byte PROGMEM frames[][288] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,254,0,0,0,127,255,254,0,0,0,255,240,6,0,0,1,192,0,6,0,0,0,224,0,30,0,252,0,127,255,252,0,255,0,31,255,248,0,227,0,6,0,16,2,97,128,6,0,56,7,97,192,6,0,63,135,96,192,30,0,127,247,96,127,255,1,224,127,48,127,131,255,192,31,48,0,1,255,0,7,48,0,0,0,0,3,24,0,0,0,0,3,28,0,0,0,0,7,14,0,0,0,0,15,7,128,0,0,0,31,1,240,0,0,0,127,0,127,0,0,3,231,0,7,255,0,127,135,0,0,127,255,252,2,0,0,0,255,128,0,0,0,0,1,192,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,204,0,0,0,0,0,252,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,252,0,0,0,31,255,254,0,0,0,255,254,6,0,0,1,192,0,6,0,0,0,224,0,14,0,112,0,255,255,252,0,254,0,63,255,248,0,255,0,6,0,16,0,97,128,6,0,56,2,97,128,6,0,63,7,96,192,6,0,127,231,96,255,254,1,224,127,48,127,255,255,192,30,48,0,1,255,0,7,48,0,0,0,0,3,24,0,0,0,0,3,24,0,0,0,0,7,30,0,0,0,0,15,7,128,0,0,0,31,3,224,0,0,0,63,0,126,0,0,1,247,0,15,252,0,31,194,0,0,255,255,254,0,0,0,0,255,224,0,0,0,0,1,192,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,204,0,0,0,0,0,252,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0,0,0,255,254,0,0,0,255,255,134,0,0,1,254,0,6,0,0,0,192,0,14,0,0,0,248,0,252,0,254,0,63,255,248,0,255,0,7,255,48,0,67,128,6,0,48,0,97,128,6,0,63,2,96,192,6,0,63,231,96,225,254,0,224,255,48,127,255,7,192,30,48,56,3,255,0,6,48,0,0,112,0,7,24,0,0,0,0,3,24,0,0,0,0,7,28,0,0,0,0,7,15,0,0,0,0,31,3,224,0,0,0,63,0,252,0,0,1,247,0,31,224,0,31,192,0,3,255,255,254,0,0,0,7,255,224,0,0,0,0,1,192,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,204,0,0,0,0,0,204,0,0,0,0,0,124,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,0,31,254,0,0,0,127,255,134,0,0,0,255,0,6,0,0,1,192,0,14,0,0,0,240,0,60,0,254,0,127,255,248,0,255,0,7,255,240,0,195,128,6,0,48,0,97,128,6,0,63,7,96,192,6,0,63,231,96,192,254,0,225,254,48,127,255,7,192,30,48,62,3,255,128,6,48,0,0,248,0,7,16,0,0,0,0,3,24,0,0,0,0,7,28,0,0,0,0,6,14,0,0,0,0,31,3,192,0,0,0,63,1,252,0,0,0,247,0,63,192,0,15,199,0,7,255,255,255,0,0,0,31,255,248,0,0,0,0,1,128,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,204,0,0,0,0,0,204,0,0,0,0,0,124,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,7,254,0,0,0,127,255,198,0,0,1,255,224,6,0,0,1,192,0,14,0,0,0,240,0,60,0,124,0,127,255,248,0,255,0,15,255,240,0,227,0,6,0,48,7,97,128,6,0,62,7,97,192,6,0,63,199,96,192,126,0,97,246,48,127,255,3,192,62,48,127,131,255,128,14,48,0,1,248,0,7,48,0,0,0,0,3,24,0,0,0,0,7,24,0,0,0,0,6,14,0,0,0,0,14,7,192,0,0,0,63,1,248,0,0,0,247,0,127,128,0,15,199,0,7,255,255,255,7,0,0,127,255,248,0,0,0,0,1,128,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,196,0,0,0,0,0,204,0,0,0,0,0,124,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,0,0,0,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,254,0,0,0,63,255,246,0,0,0,255,248,6,0,0,1,192,0,14,0,0,0,224,0,60,0,112,0,255,255,248,0,254,0,63,255,240,0,255,0,6,0,48,0,97,128,6,0,62,6,97,192,6,0,63,199,96,192,14,0,115,246,48,127,255,1,224,62,48,127,195,255,128,14,48,0,1,254,0,7,48,0,0,0,0,3,24,0,0,0,0,7,24,0,0,0,0,6,14,0,0,0,0,14,7,192,0,0,0,63,1,248,0,0,0,247,0,127,128,0,7,199,0,7,255,255,255,0,0,0,127,255,248,0,0,0,0,3,128,0,0,0,0,0,240,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,196,0,0,0,0,0,204,0,0,0,0,0,252,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,248,0,0,0,0,7,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,254,0,0,0,63,255,254,0,0,0,255,248,6,0,0,1,192,0,14,0,0,0,224,0,28,0,0,0,255,255,248,0,254,0,63,255,240,0,255,0,6,0,48,0,97,128,6,0,62,0,97,192,6,0,63,198,96,192,14,0,115,247,48,127,255,1,224,62,48,127,255,255,128,14,48,0,1,254,0,7,48,0,0,0,0,3,24,0,0,0,0,7,24,0,0,0,0,6,14,0,0,0,0,14,7,128,0,0,0,63,3,240,0,0,0,247,0,127,0,0,7,224,0,15,255,255,255,128,0,0,127,255,252,0,0,0,0,15,128,0,0,0,0,0,240,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,196,0,0,0,0,0,204,0,0,0,0,0,252,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,248,0,0,0,0,127,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,254,0,0,0,63,255,254,0,0,0,255,248,6,0,0,1,192,0,14,0,0,0,224,0,60,0,0,0,255,255,248,0,254,0,63,255,240,0,255,0,6,0,48,0,97,128,6,0,62,6,97,192,6,0,63,199,96,192,14,0,115,246,48,127,255,1,224,62,48,127,195,255,128,14,48,0,1,254,0,7,48,0,0,0,0,3,24,0,0,0,0,7,28,0,0,0,0,6,14,0,0,0,0,14,7,192,0,0,0,63,3,248,0,0,0,247,0,127,128,0,7,199,0,15,255,255,255,0,0,0,255,255,248,0,0,0,0,15,128,0,0,0,0,0,240,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,196,0,0,0,0,0,204,0,0,0,0,0,252,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,255,248,0,0,0,1,255,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,254,0,0,0,63,255,246,0,0,0,255,248,6,0,0,1,192,0,14,0,0,0,224,0,60,0,112,0,255,255,248,0,254,0,63,255,240,0,255,0,6,0,48,6,97,128,6,0,62,7,97,192,6,0,63,198,96,192,14,0,115,246,48,127,255,1,224,62,48,127,195,255,128,14,48,0,1,254,0,6,48,0,0,0,0,3,24,0,0,0,0,7,28,0,0,0,0,6,14,0,0,0,0,14,7,192,0,0,0,62,3,248,0,0,0,247,0,127,128,0,7,199,0,7,255,255,255,7,0,0,127,255,248,0,0,0,0,3,128,0,0,0,0,0,240,0,0,0,0,0,252,0,0,0,0,128,204,0,0,0,1,192,196,0,0,0,0,0,204,0,0,0,0,0,252,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,255,248,0,0,0,3,255,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,254,0,0,0,63,255,198,0,0,0,255,224,6,0,0,1,192,0,14,0,0,0,224,0,60,0,112,0,255,255,248,0,254,0,63,255,240,0,227,0,6,0,48,0,97,128,6,0,62,7,97,192,6,0,63,199,96,192,14,0,99,246,48,127,255,3,192,62,48,127,131,255,128,14,48,0,1,248,0,7,16,0,0,0,0,3,24,0,0,0,0,7,28,0,0,0,0,6,14,0,0,0,0,14,7,192,0,0,0,63,1,248,0,0,0,247,0,127,128,0,7,199,0,7,255,255,255,0,0,0,127,255,248,0,0,0,0,3,128,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,3,128,204,0,0,0,7,192,196,0,0,0,0,0,204,0,0,0,0,0,124,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,255,240,0,0,0,3,255,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,7,254,0,0,0,127,255,198,0,0,0,255,224,6,0,0,1,192,0,14,0,0,0,240,0,60,0,124,0,127,255,248,0,255,0,15,255,176,0,227,0,6,0,48,0,97,128,6,0,62,0,97,192,6,0,63,199,96,192,126,0,97,247,48,127,255,3,192,62,48,127,131,255,128,14,48,0,1,248,0,6,16,0,0,0,0,3,24,0,0,0,0,7,24,0,0,0,0,6,14,0,0,0,0,14,7,192,0,0,0,63,1,248,0,0,0,247,0,127,128,0,15,192,0,7,255,255,255,0,0,0,127,255,248,0,0,0,0,1,128,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,31,128,204,0,0,0,31,192,196,0,0,0,0,0,204,0,0,0,0,0,124,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,255,192,0,0,0,3,255,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,31,254,0,0,0,127,255,198,0,0,0,255,224,6,0,0,1,192,0,14,0,0,0,240,0,60,0,124,0,127,255,248,0,255,0,15,255,176,0,227,0,6,0,48,0,97,128,6,0,63,7,97,192,6,0,63,231,96,192,126,0,225,254,48,127,255,3,192,62,48,127,3,255,128,14,48,0,0,248,0,7,24,0,0,0,0,3,24,0,0,0,0,7,28,0,0,0,0,6,15,0,0,0,0,30,3,192,0,0,0,63,1,252,0,0,0,247,0,63,224,0,15,199,0,3,255,255,255,0,0,0,31,255,248,0,0,0,0,1,128,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,127,128,204,0,0,0,255,192,204,0,0,0,0,0,204,0,0,0,0,0,124,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,252,0,0,0,0,3,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,0,31,254,0,0,0,255,255,134,0,0,1,255,0,6,0,0,1,192,0,14,0,0,0,240,0,60,0,254,0,127,255,248,0,255,0,7,255,176,0,99,128,6,0,48,7,97,128,6,0,63,7,96,192,6,0,127,230,96,193,254,0,225,254,48,127,255,7,192,30,48,62,3,255,0,14,48,0,0,240,0,7,24,0,0,0,0,3,24,0,0,0,0,7,28,0,0,0,0,6,15,0,0,0,0,30,3,192,0,0,0,62,1,252,0,0,0,247,0,63,224,0,15,199,0,7,255,255,254,7,0,0,31,255,224,0,0,0,0,1,128,0,0,0,0,0,248,0,0,0,0,0,252,0,0,1,255,128,204,0,0,3,255,192,204,0,0,0,0,0,204,0,0,0,0,0,124,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,224,0,0,0,0,3,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,255,254,0,0,0,255,255,134,0,0,1,255,0,6,0,0,1,192,0,14,0,0,0,248,0,252,0,254,0,127,255,248,0,255,0,7,255,48,0,99,128,6,0,48,0,97,128,6,0,63,7,96,192,6,0,127,231,96,225,254,0,224,254,48,127,255,7,192,30,48,56,3,255,0,14,48,0,0,112,0,7,24,0,0,0,0,3,24,0,0,0,0,7,28,0,0,0,0,6,15,0,0,0,0,30,3,224,0,0,0,127,0,254,0,0,1,247,0,31,224,0,31,198,0,3,255,255,254,0,0,0,7,255,224,0,0,0,0,1,192,0,0,0,0,0,248,0,0,0,0,0,252,0,0,3,255,128,204,0,0,7,255,192,204,0,0,0,0,0,252,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,128,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0,0,1,255,254,0,0,0,255,254,6,0,0,1,248,0,6,0,0,0,192,0,14,0,0,0,252,0,252,0,254,0,63,255,248,0,255,0,7,255,48,0,99,128,6,0,56,0,97,128,6,0,63,0,96,192,6,0,127,231,48,231,254,1,224,255,48,127,255,255,192,30,48,56,3,255,0,6,48,0,0,0,0,7,24,0,0,0,0,7,24,0,0,0,0,7,14,0,0,0,0,14,7,0,0,0,0,31,3,240,0,0,0,127,0,126,0,0,1,246,0,15,248,0,31,192,0,0,255,255,254,0,0,0,0,255,224,0,0,0,0,1,192,0,0,0,0,0,248,0,0,0,0,0,252,0,0,3,255,0,204,0,0,7,255,128,204,0,0,0,0,0,252,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,252,0,0,0,15,255,254,0,0,0,255,254,6,0,0,1,192,0,6,0,0,0,224,0,14,0,112,0,127,255,252,0,254,0,63,255,240,0,255,0,6,0,48,0,97,128,6,0,56,0,97,192,6,0,63,7,96,192,6,0,127,231,48,127,254,1,224,126,48,127,255,255,192,30,48,0,1,255,0,6,16,0,0,0,0,7,24,0,0,0,0,3,24,0,0,0,0,7,14,0,0,0,0,14,7,128,0,0,0,30,1,240,0,0,0,127,0,126,0,0,3,231,0,15,252,0,127,130,0,0,255,255,252,0,0,0,0,255,128,0,0,0,0,1,192,0,0,0,0,0,248,0,0,0,0,0,252,0,0,3,252,0,204,0,0,7,254,0,204,0,0,0,0,0,252,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,254,0,0,0,31,255,254,0,0,0,255,240,6,0,0,1,192,0,6,0,0,0,224,0,28,0,124,0,127,255,248,0,255,0,63,255,240,0,99,128,6,0,48,6,97,128,6,0,56,7,96,192,6,0,63,135,96,192,14,0,127,246,48,127,255,1,224,126,48,127,131,255,192,14,48,0,1,255,0,6,24,0,0,0,0,7,24,0,0,0,0,3,28,0,0,0,0,6,14,0,0,0,0,14,7,192,0,0,0,30,1,240,0,0,0,126,0,127,0,0,3,231,0,7,255,255,255,135,0,0,127,255,252,0,0,0,0,3,192,0,0,0,0,1,224,0,0,0,0,0,248,0,0,0,0,0,204,0,0,3,240,0,204,0,0,7,248,0,204,0,0,0,0,0,252,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,254,0,0,0,127,255,254,0,0,0,255,240,6,0,0,0,192,0,6,0,0,0,240,0,28,0,254,0,127,255,248,0,255,0,15,255,240,0,99,128,6,0,48,0,97,128,6,0,56,6,96,192,6,0,63,135,96,192,126,0,115,247,48,127,255,1,224,126,48,127,3,255,128,14,48,0,1,254,0,6,24,0,0,0,0,3,24,0,0,0,0,7,28,0,0,0,0,6,14,0,0,0,0,14,3,192,0,0,0,30,1,248,0,0,0,127,0,63,192,0,3,231,0,7,255,255,255,128,0,0,31,255,248,0,0,0,0,3,128,0,0,0,0,1,240,0,0,0,0,0,248,0,0,0,0,0,204,0,0,3,128,0,204,0,0,7,192,0,204,0,0,0,0,0,252,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,1,240,0,0,0,0,1,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,254,0,0,0,127,255,246,0,0,0,255,240,6,0,0,0,192,0,6,0,0,0,240,0,28,0,254,0,127,255,248,0,255,0,7,255,240,0,99,128,6,0,48,0,97,128,6,0,62,0,96,192,6,0,63,135,48,224,254,0,243,247,48,127,255,3,224,126,48,62,3,255,128,14,48,0,0,254,0,6,24,0,0,0,0,7,24,0,0,0,0,7,28,0,0,0,0,6,15,0,0,0,0,14,3,224,0,0,0,62,0,252,0,0,0,255,0,31,224,0,7,224,0,3,255,255,255,128,0,0,31,255,248,0,0,0,0,3,128,0,0,0,0,1,240,0,0,0,0,0,248,0,0,0,0,0,204,0,0,2,0,0,140,0,0,7,0,0,204,0,0,0,0,0,252,0,0,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,3,240,0,0,0,0,3,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,31,254,0,0,0,255,255,198,0,0,0,254,0,6,0,0,0,192,0,6,0,0,0,248,0,60,0,254,0,63,255,248,0,127,0,7,255,48,0,97,128,6,0,16,0,97,192,6,0,62,7,96,192,6,0,63,199,48,231,254,0,97,247,48,127,255,3,192,62,48,56,1,255,128,14,48,0,0,124,0,7,24,0,0,0,0,3,24,0,0,0,0,7,14,0,0,0,0,6,7,0,0,0,0,14,3,240,0,0,0,62,0,254,0,0,0,247,0,31,248,0,7,199,0,3,255,255,255,0,0,0,31,255,224,0,0,0,0,1,128,0,0,0,0,0,240,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,140,0,0,0,0,0,204,0,0,0,0,0,248,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,7,240,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,1,255,254,0,0,0,255,255,198,0,0,0,254,0,6,0,0,0,224,0,14,0,56,0,254,0,60,0,254,0,63,255,248,0,99,0,7,255,48,0,97,128,6,0,16,7,97,192,6,0,63,7,96,192,6,0,63,199,48,127,254,0,225,246,48,127,255,7,192,62,48,0,1,255,128,14,24,0,0,56,0,7,24,0,0,0,0,3,24,0,0,0,0,7,14,0,0,0,0,6,7,128,0,0,0,14,1,240,0,0,0,62,0,126,0,0,1,247,0,15,248,0,63,199,0,1,255,255,255,7,0,0,7,255,224,0,0,0,0,1,128,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,0,140,0,0,0,0,0,220,0,0,0,0,0,248,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,31,255,254,0,0,0,255,255,6,0,0,0,192,0,6,0,0,0,224,0,14,0,124,0,254,0,252,0,255,0,31,255,248,0,99,128,6,28,16,0,97,128,6,0,24,0,96,192,6,0,63,7,32,192,6,0,63,231,48,127,254,0,224,255,48,127,255,255,192,30,48,0,1,255,0,14,24,0,0,0,0,7,24,0,0,0,0,3,28,0,0,0,0,7,14,0,0,0,0,6,3,128,0,0,0,14,1,240,0,0,0,62,0,127,0,0,1,246,0,7,252,0,63,198,0,0,127,255,254,0,0,0,0,255,192,0,0,0,0,1,128,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,0,0,204,0,0,0,0,1,140,0,0,0,0,0,220,0,0,0,0,0,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,240,0,0,0,0,15,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,0,0,0,31,255,254,0,0,0,255,255,6,0,0,0,192,0,6,0,0,0,224,0,14,0,126,0,127,255,252,0,127,0,15,255,248,0,99,128,6,16,16,0,97,128,6,0,24,0,96,192,6,0,63,0,48,192,30,0,127,231,48,127,255,0,224,255,48,63,255,255,192,30,48,0,1,255,0,14,24,0,0,0,0,7,24,0,0,0,0,3,28,0,0,0,0,7,15,0,0,0,0,6,3,192,0,0,0,14,0,248,0,0,0,62,0,63,128,0,1,247,0,7,255,0,127,128,0,0,63,255,252,0,0,0,0,255,128,0,0,0,0,1,128,0,0,0,0,0,248,0,0,0,0,0,252,0,0,0,0,1,140,0,0,0,0,1,140,0,0,0,0,0,252,0,0,0,0,0,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,224,0,0,0,0,15,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,31,255,254,0,0,0,255,255,6,0,0,0,192,0,6,0,0,0,224,0,14,0,126,0,127,128,252,0,255,0,31,255,248,0,99,128,7,127,184,0,97,128,6,0,24,0,96,192,6,0,63,7,48,192,6,0,63,199,48,127,255,0,225,247,48,127,255,255,192,62,48,0,1,255,0,14,24,0,0,0,0,7,24,0,0,0,0,3,28,0,0,0,0,7,14,0,0,0,0,6,7,192,0,0,0,14,1,248,0,0,0,62,0,127,128,0,1,246,0,7,255,0,31,199,0,0,127,255,254,0,0,0,3,255,192,0,0,0,0,1,128,0,0,0,0,0,248,0,0,0,0,0,248,0,0,0,0,1,204,0,0,0,0,1,140,0,0,0,0,0,220,0,0,0,0,0,248,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,15,128,0,0,0,0,15,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,1,255,254,0,0,0,255,255,198,0,0,0,254,0,6,0,0,0,224,0,6,0,124,0,126,0,60,0,255,0,31,255,248,0,99,128,7,127,184,0,97,128,6,0,16,7,96,192,6,0,62,7,96,192,6,0,63,199,48,127,255,0,97,247,48,127,255,135,224,62,48,0,1,255,128,14,24,0,0,0,0,7,24,0,0,0,0,3,28,0,0,0,0,7,14,0,0,0,0,6,7,128,0,0,0,14,1,240,0,0,0,62,0,127,0,0,0,246,0,7,252,0,15,231,0,0,127,255,255,7,0,0,3,255,248,0,0,0,0,1,128,0,0,0,0,1,240,0,0,0,0,0,248,0,0,0,0,0,204,0,0,0,0,1,140,0,0,0,0,0,204,0,0,0,0,0,248,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,254,0,0,0,255,255,198,0,0,0,254,0,6,0,0,0,192,0,6,0,56,0,252,0,60,0,254,0,63,255,248,0,127,0,7,255,248,0,97,128,6,0,24,0,97,192,6,0,62,2,96,192,6,0,63,199,48,103,254,0,115,247,48,127,255,7,192,127,48,0,1,255,128,14,48,0,0,124,0,7,24,0,0,0,0,3,24,0,0,0,0,3,14,0,0,0,0,6,7,128,0,0,0,14,1,224,0,0,0,62,0,126,0,0,0,255,0,15,224,0,15,231,0,1,255,255,255,0,0,0,7,255,248,0,0,0,0,3,128,0,0,0,0,1,240,0,0,0,0,0,248,0,0,0,0,0,204,0,0,0,0,1,140,0,0,0,0,0,204,0,0,0,0,0,248,0,0,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,254,0,0,0,255,255,254,0,0,0,255,240,6,0,0,0,192,0,6,0,0,0,248,0,28,0,254,0,127,255,248,0,255,0,7,255,248,0,97,128,6,0,16,0,97,128,6,0,62,0,96,192,6,0,63,194,96,225,254,0,115,247,48,127,255,1,224,127,48,56,3,255,128,15,48,0,0,252,0,7,24,0,0,0,0,3,24,0,0,0,0,3,28,0,0,0,0,7,7,0,0,0,0,14,3,224,0,0,0,31,0,252,0,0,0,255,0,31,192,0,7,226,0,3,255,255,255,128,0,0,31,255,252,0,0,0,0,3,128,0,0,0,0,1,240,0,0,0,0,0,248,0,0,0,0,0,204,0,0,0,0,0,140,0,0,0,0,0,204,0,0,0,0,0,252,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,254,0,0,0,127,255,254,0,0,0,255,240,6,0,0,0,192,0,6,0,0,0,240,0,30,0,254,0,127,255,252,0,255,0,15,255,248,0,195,128,6,0,16,0,97,128,6,0,56,2,96,192,6,0,63,135,96,192,126,0,115,247,48,127,255,1,224,127,48,127,3,255,128,14,48,0,1,254,0,7,16,0,0,0,0,3,24,0,0,0,0,3,28,0,0,0,0,7,15,0,0,0,0,15,3,192,0,0,0,31,0,248,0,0,0,127,0,63,192,0,3,231,0,7,255,255,255,130,0,0,63,255,252,0,0,0,0,3,128,0,0,0,0,1,192,0,0,0,0,0,248,0,0,0,0,0,220,0,0,0,0,0,204,0,0,0,0,0,204,0,0,0,0,0,252,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'M', '0', '=', 'D'}
};
byte rowPins[ROWS] = {5, 6, 7, 8};
byte colPins[COLS] = {9, 10, 11, 12};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String input = "";
float num1 = 0, num2 = 0, num3 = 0;
char operation;
bool isFirstSet = true;
int frame = 0;
int starttime;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Welcome to our");
display.display();
display.setCursor(0,10);
display.println("UAM Calculator");
display.display();
display.setCursor(0,20);
display.println("by Group Manese");
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(0,0);
display.println("Choose:");
display.display();
display.setCursor(0,10);
display.println("Velocity (A)");
display.display();
display.setCursor(0,20);
display.println("Distance (B)");
display.display();
display.setCursor(0,30);
display.println("Time (C)");
display.display();
}
void loop() {
char key = keypad.getKey();
if (key) {
input += key;
display.setCursor(90,0);
display.println(key);
display.display();
if (isFirstSet == true) {
if (key == 'A') {
display.clearDisplay();
display.display();
velocity();
}
if (key == 'B') {
display.clearDisplay();
display.display();
distance();
}
if (key == 'C') {
display.clearDisplay();
display.display();
time();
}
} else {
if (key == 'A') {
display.clearDisplay();
display.display();
initial();
}
if (key == 'B') {
display.clearDisplay();
display.display();
finalv();
}
if (key == 'C') {
display.clearDisplay();
display.display();
accelerate();
}
}
if (key == 'D') {
isFirstSet = false;
display.clearDisplay();
display.display();
display.setCursor(0,0);
display.println("Initial V. (A)");
display.display();
display.setCursor(0,10);
display.println("Final V. (B)");
display.display();
display.setCursor(0,20);
display.println("Accelaration (C)");
display.display();
}
}
}
void velocity(){
String distanceInput = "";
String timeInput = "";
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter distance:");
display.display();
bool distanceEntered = false;
bool timeEntered = false;
while (!distanceEntered || !timeEntered) {
char key1 = keypad.getKey();
if (key1) {
if (key1 >= '0' && key1 <= '9') {
if (!distanceEntered) {
distanceInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter distance:");
display.setCursor(0,10);
display.print(distanceInput);
display.display();
} else if (!timeEntered) {
timeInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == 'M') {
if (!distanceEntered && distanceInput.length() > 0) {
distanceInput.remove(distanceInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter distance:");
display.setCursor(0,10);
display.print(distanceInput);
display.display();
} else if (distanceEntered && timeInput.length() > 0) {
timeInput.remove(timeInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == '=') {
if (!distanceEntered) {
num1 = distanceInput.toFloat();
distanceEntered = true;
distanceInput = ""; // Reset input for distance
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.display();
} else if (!timeEntered) {
playairplane();
num2 = timeInput.toFloat();
timeEntered = true;
timeInput = ""; // Reset input for time
display.clearDisplay();
display.setCursor(0,0);
float velocity = num1 / num2; // Calculate velocity (distance / time)
display.print("Velocity:");
display.setCursor(0,10);
display.print(velocity); // Display the calculated velocity
display.display();
break; // Exit the loop after calculating velocity
}
}
}
}
}
void distance(){
String velocityInput = ""; // Input for velocity
String timeInput = ""; // Input for time
display.clearDisplay(); // Clear the display before starting
display.setCursor(0,0);
display.print("Enter velocity:");
display.display();
bool velocityEntered = false;
bool timeEntered = false;
while (!velocityEntered || !timeEntered) {
char key1 = keypad.getKey();
if (key1) {
if (key1 >= '0' && key1 <= '9') {
if (!velocityEntered) {
velocityInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter velocity:");
display.setCursor(0,10);
display.print(velocityInput);
display.display();
} else if (!timeEntered) {
timeInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == 'M') {
if (!velocityEntered && velocityInput.length() > 0) {
velocityInput.remove(velocityInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter velocity:");
display.setCursor(0,10);
display.print(velocityInput);
display.display();
} else if (velocityEntered && timeInput.length() > 0) {
timeInput.remove(timeInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == '=') {
if (!velocityEntered) {
num1 = velocityInput.toFloat();
velocityEntered = true;
velocityInput = ""; // Reset input for velocity
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.display();
} else if (!timeEntered) {
playairplane();
num2 = timeInput.toFloat();
timeEntered = true;
timeInput = ""; // Reset input for time
display.clearDisplay();
display.setCursor(0,0);
float distance = num1 * num2; // Calculate distance (velocity * time)
display.print("Distance:");
display.setCursor(0,10);
display.print(distance); // Display the calculated distance
display.display();
break; // Exit the loop after calculating distance
}
}
}
}
}
void time(){
String distanceInput = ""; // Input for distance
String velocityInput = ""; // Input for velocity
display.clearDisplay(); // Clear the display before starting
display.setCursor(0,0);
display.print("Enter distance:");
display.display();
bool distanceEntered = false;
bool velocityEntered = false;
while (!distanceEntered || !velocityEntered) {
char key1 = keypad.getKey();
if (key1) {
if (key1 >= '0' && key1 <= '9') {
if (!distanceEntered) {
distanceInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter distance:");
display.setCursor(0,10);
display.print(distanceInput);
display.display();
} else if (!velocityEntered) {
velocityInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter velocity:");
display.setCursor(0,10);
display.print(velocityInput);
display.display();
}
}
else if (key1 == 'M') {
if (!distanceEntered && distanceInput.length() > 0) {
distanceInput.remove(distanceInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter distance:");
display.setCursor(0,10);
display.print(distanceInput);
display.display();
} else if (distanceEntered && velocityInput.length() > 0) {
velocityInput.remove(velocityInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter velocity:");
display.setCursor(0,10);
display.print(velocityInput);
display.display();
}
}
else if (key1 == '=') {
if (!distanceEntered) {
num1 = distanceInput.toFloat();
distanceEntered = true;
distanceInput = ""; // Reset input for distance
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter velocity:");
display.display();
} else if (!velocityEntered) {
playairplane();
num2 = velocityInput.toFloat();
velocityEntered = true;
velocityInput = ""; // Reset input for velocity
display.clearDisplay();
display.setCursor(0,0);
float time = num1 / num2; // Calculate time (distance / velocity)
display.print("Time:");
display.setCursor(0,10);
display.print(time); // Display the calculated time
display.display();
break; // Exit the loop after calculating time
}
}
}
}
}
void initial(){
String finalVelocityInput = ""; // Input for final velocity
String accelerationInput = ""; // Input for acceleration
String timeInput = ""; // Input for time
display.clearDisplay(); // Clear the display before starting
display.setCursor(0,0);
display.print("Enter final velocity:");
display.display();
bool finalVelocityEntered = false;
bool accelerationEntered = false;
bool timeEntered = false;
while (!finalVelocityEntered || !accelerationEntered || !timeEntered) {
char key1 = keypad.getKey();
if (key1) {
if (key1 >= '0' && key1 <= '9') {
if (!finalVelocityEntered) {
finalVelocityInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter final velocity:");
display.setCursor(0,10);
display.print(finalVelocityInput);
display.display();
} else if (!accelerationEntered) {
accelerationInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter acceleration:");
display.setCursor(0,10);
display.print(accelerationInput);
display.display();
} else if (!timeEntered) {
timeInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == 'M') {
if (!finalVelocityEntered && finalVelocityInput.length() > 0) {
finalVelocityInput.remove(finalVelocityInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter final velocity:");
display.setCursor(0,10);
display.print(finalVelocityInput);
display.display();
} else if (finalVelocityEntered && accelerationInput.length() > 0) {
accelerationInput.remove(accelerationInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter acceleration:");
display.setCursor(0,10);
display.print(accelerationInput);
display.display();
} else if (accelerationEntered && timeInput.length() > 0) {
timeInput.remove(timeInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == '=') {
if (!finalVelocityEntered) {
num1 = finalVelocityInput.toFloat();
finalVelocityEntered = true;
finalVelocityInput = ""; // Reset input for final velocity
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter acceleration:");
display.display();
} else if (!accelerationEntered) {
num2 = accelerationInput.toFloat();
accelerationEntered = true;
accelerationInput = ""; // Reset input for acceleration
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.display();
} else if (!timeEntered) {
playairplane();
num3 = timeInput.toFloat();
timeEntered = true;
timeInput = ""; // Reset input for time
display.clearDisplay();
display.setCursor(0,0);
float initialVelocity = num1 - (num2 * num3); // Calculate initial velocity (final velocity - acceleration * time)
display.print("Initial Velocity:");
display.setCursor(0,10);
display.print(initialVelocity); // Display the calculated initial velocity
display.display();
break; // Exit the loop after calculating initial velocity
}
}
}
}
}
void finalv(){
String initialVelocityInput = ""; // Input for initial velocity
String accelerationInput = ""; // Input for acceleration
String timeInput = ""; // Input for time
display.clearDisplay(); // Clear the display before starting
display.setCursor(0,0);
display.print("Enter initial velocity:");
display.display();
bool initialVelocityEntered = false;
bool accelerationEntered = false;
bool timeEntered = false;
while (!initialVelocityEntered || !accelerationEntered || !timeEntered) {
char key1 = keypad.getKey();
if (key1) {
if (key1 >= '0' && key1 <= '9') {
if (!initialVelocityEntered) {
initialVelocityInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter initial velocity:");
display.setCursor(0,10);
display.print(initialVelocityInput);
display.display();
} else if (!accelerationEntered) {
accelerationInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter acceleration:");
display.setCursor(0,10);
display.print(accelerationInput);
display.display();
} else if (!timeEntered) {
timeInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == 'M') {
if (!initialVelocityEntered && initialVelocityInput.length() > 0) {
initialVelocityInput.remove(initialVelocityInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter initial velocity:");
display.setCursor(0,10);
display.print(initialVelocityInput);
display.display();
} else if (initialVelocityEntered && accelerationInput.length() > 0) {
accelerationInput.remove(accelerationInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter acceleration:");
display.setCursor(0,10);
display.print(accelerationInput);
display.display();
} else if (accelerationEntered && timeInput.length() > 0) {
timeInput.remove(timeInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == '=') {
if (!initialVelocityEntered) {
num1 = initialVelocityInput.toFloat();
initialVelocityEntered = true;
initialVelocityInput = ""; // Reset input for initial velocity
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter acceleration:");
display.display();
} else if (!accelerationEntered) {
num2 = accelerationInput.toFloat();
accelerationEntered = true;
accelerationInput = ""; // Reset input for acceleration
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.display();
} else if (!timeEntered) {
playairplane();
num3 = timeInput.toFloat();
timeEntered = true;
timeInput = ""; // Reset input for time
display.clearDisplay();
display.setCursor(0,0);
float finalVelocity = num1 + (num2 * num3); // Calculate final velocity (initial velocity + acceleration * time)
display.print("Final Velocity:");
display.setCursor(0,10);
display.print(finalVelocity); // Display the calculated final velocity
display.display();
break; // Exit the loop after calculating final velocity
}
}
}
}
}
void accelerate(){
String initialVelocityInput = ""; // Input for initial velocity
String finalVelocityInput = ""; // Input for final velocity
String timeInput = ""; // Input for time
display.clearDisplay(); // Clear the display before starting
display.setCursor(0,0);
display.print("Enter initial velocity:");
display.display();
bool initialVelocityEntered = false;
bool finalVelocityEntered = false;
bool timeEntered = false;
while (!initialVelocityEntered || !finalVelocityEntered || !timeEntered) {
char key1 = keypad.getKey();
if (key1) {
if (key1 >= '0' && key1 <= '9') {
if (!initialVelocityEntered) {
initialVelocityInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter initial velocity:");
display.setCursor(0,10);
display.print(initialVelocityInput);
display.display();
} else if (!finalVelocityEntered) {
finalVelocityInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter final velocity:");
display.setCursor(0,10);
display.print(finalVelocityInput);
display.display();
} else if (!timeEntered) {
timeInput += key1;
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == 'M') {
if (!initialVelocityEntered && initialVelocityInput.length() > 0) {
initialVelocityInput.remove(initialVelocityInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter initial velocity:");
display.setCursor(0,10);
display.print(initialVelocityInput);
display.display();
} else if (initialVelocityEntered && finalVelocityInput.length() > 0) {
finalVelocityInput.remove(finalVelocityInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter final velocity:");
display.setCursor(0,10);
display.print(finalVelocityInput);
display.display();
} else if (finalVelocityEntered && timeInput.length() > 0) {
timeInput.remove(timeInput.length() - 1);
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.setCursor(0,10);
display.print(timeInput);
display.display();
}
}
else if (key1 == '=') {
if (!initialVelocityEntered) {
playairplane();
num1 = initialVelocityInput.toFloat();
initialVelocityEntered = true;
initialVelocityInput = ""; // Reset input for initial velocity
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter final velocity:");
display.display();
} else if (!finalVelocityEntered) {
num2 = finalVelocityInput.toFloat();
finalVelocityEntered = true;
finalVelocityInput = ""; // Reset input for final velocity
display.clearDisplay();
display.setCursor(0,0);
display.print("Enter time:");
display.display();
} else if (!timeEntered) {
playairplane();
num3 = timeInput.toFloat();
timeEntered = true;
timeInput = ""; // Reset input for time
display.clearDisplay();
display.setCursor(0,0);
float acceleration = (num2 - num1) / num3; // Calculate acceleration ((final velocity - initial velocity) / time)
display.print("Acceleration:");
display.setCursor(0,10);
display.print(acceleration); // Display the calculated acceleration
display.display();
break; // Exit the loop after calculating acceleration
}
}
}
}
}
void playairplane(){
for(int cv; cv <= 100; cv++){
display.clearDisplay();
display.drawBitmap(40, 8, frames[frame], FRAME_WIDTH, FRAME_HEIGHT, 1);
display.display();
frame = (frame + 1) % FRAME_COUNT;
delay(FRAME_DELAY);
}
return;
}