Hello, I'm programming a calculator with oled display and IR remote (using lightIRRecv).
I need around 350 bytes of dynamic memory (I'm using ARDUINO UNO) to get IR and OLED to work.
/////////////////////////////////////////
Here is memory usage
Sketch uses 24876 bytes (77%) of program storage space. Maximum is 32256 bytes.
Global variables use 1786 bytes (87%) of dynamic memory, leaving 262 bytes for local variables. Maximum is 2048 bytes.
Low memory available, stability problems may occur.
==========================
Here is the code (it's so long)
#include <Wire.h>
#include <U8g2lib.h>
#include "lightIRRecv.h"
#define ir 3
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
const unsigned char PROGMEM intro_frame0 [] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xEE, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x80, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x80, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0xF7, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x94, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2E, 0x94, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x50, 0x20, 0xF7, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2E, 0xF7, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x94, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x94, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0xF7, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0xF7, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x94, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x50, 0x2A, 0x94, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xEE, 0xF7, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
const unsigned char PROGMEM intro_frame1 [] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x2C, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x5A, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x55, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x01, 0x40, 0x55, 0x1C, 0x70, 0x00, 0x00, 0x00, 0x01, 0x40, 0xA5, 0x03, 0x0E, 0x00, 0x00, 0x00, 0x02, 0xC0, 0xA8, 0xE1, 0x71, 0x00, 0x00, 0x00, 0x02, 0x80, 0xA8, 0x1E, 0x5C, 0x00, 0x00, 0x00, 0x02, 0x81, 0x53, 0x06, 0x83, 0x00, 0x00, 0x00, 0x05, 0x01, 0x35, 0x80, 0xE0, 0x00, 0x00, 0x00, 0x05, 0x03, 0x04, 0xB8, 0x1C, 0x00, 0x00, 0x00, 0x0D, 0x02, 0x8E, 0xA5, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x02, 0xE1, 0x45, 0xE0, 0x00, 0x00, 0x00, 0x0A, 0x05, 0xAE, 0x3A, 0x28, 0x00, 0x00, 0x00, 0x12, 0x05, 0x51, 0x0A, 0x57, 0x00, 0x00, 0x00, 0x14, 0x05, 0x52, 0xF1, 0xD2, 0x00, 0x00, 0x00, 0x17, 0x0A, 0x5E, 0x96, 0x1A, 0x00, 0x00, 0x00, 0x31, 0xCA, 0xA2, 0x95, 0x84, 0x00, 0x00, 0x00, 0x0E, 0x3A, 0xBC, 0x64, 0xB1, 0x00, 0x00, 0x00, 0x01, 0xC7, 0x25, 0x8D, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x38, 0x69, 0xE3, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3A, 0x5C, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC3, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xD2, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC5, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
const unsigned char PROGMEM intro_frame2 [] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xB3, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x61, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xC0, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x01, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x03, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x06, 0x92, 0x80, 0x00, 0x00, 0x00, 0x01, 0xB0, 0x0D, 0x27, 0x40, 0x00, 0x00, 0x00, 0x03, 0x60, 0x1A, 0x49, 0xA0, 0x00, 0x00, 0x00, 0x06, 0xC0, 0x34, 0x88, 0xD0, 0x00, 0x00, 0x00, 0x0D, 0x80, 0x63, 0x04, 0x68, 0x00, 0x00, 0x00, 0x05, 0x80, 0xD0, 0x62, 0x34, 0x00, 0x00, 0x00, 0x02, 0xC1, 0xA8, 0x91, 0x12, 0x00, 0x00, 0x00, 0x01, 0x63, 0x49, 0x90, 0xA5, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x92, 0xE4, 0x4E, 0x80, 0x00, 0x00, 0x00, 0x5D, 0x25, 0x4A, 0x13, 0x40, 0x00, 0x00, 0x00, 0x2A, 0x48, 0x91, 0x11, 0xA0, 0x00, 0x00, 0x00, 0x16, 0x8D, 0x1A, 0x08, 0xD0, 0x00, 0x00, 0x00, 0x0B, 0x36, 0x64, 0xC4, 0x68, 0x00, 0x00, 0x00, 0x04, 0x48, 0x91, 0x22, 0x24, 0x00, 0x00, 0x00, 0x02, 0xC9, 0x91, 0x21, 0x4A, 0x00, 0x00, 0x00, 0x01, 0x72, 0xE4, 0xC8, 0x9D, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x4A, 0x14, 0x26, 0x00, 0x00, 0x00, 0x00, 0x48, 0x91, 0x22, 0x43, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x1A, 0x14, 0x81, 0x00, 0x00, 0x00, 0x00, 0x16, 0x6C, 0xC9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x91, 0x22, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05, 0x93, 0x24, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0xE5, 0xC8, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4A, 0x90, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x20, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x40, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x80, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x01, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x03, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x86, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 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};
const unsigned char PROGMEM intro_frame3 [] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8D, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x70, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xC0, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x03, 0x98, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x60, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x11, 0x80, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x07, 0x34, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x18, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x63, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x9C, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x04, 0x86, 0x0B, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x02, 0xB9, 0xCC, 0x25, 0x00, 0x00, 0x00, 0x00, 0x02, 0xE6, 0x41, 0x26, 0x80, 0x00, 0x00, 0x00, 0x01, 0x18, 0xCF, 0x12, 0x80, 0x00, 0x00, 0x00, 0x01, 0x67, 0x2C, 0x92, 0x40, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xD5, 0x89, 0x40, 0x00, 0x00, 0x00, 0x00, 0xB2, 0x96, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x98, 0xCD, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x51, 0x63, 0x26, 0x30, 0x00, 0x00, 0x00, 0x00, 0x29, 0x1D, 0x21, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x35, 0xE2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x31, 0xA6, 0x92, 0x28, 0x00, 0x00, 0x00, 0x00, 0x16, 0xDC, 0x79, 0x28, 0x00, 0x00, 0x00, 0x00, 0x12, 0x51, 0x49, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xCF, 0x4C, 0x94, 0x00, 0x00, 0x00, 0x00, 0x09, 0x29, 0x30, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x04, 0xE5, 0x8C, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x05, 0x96, 0x32, 0x61, 0x00, 0x00, 0x00, 0x00, 0x02, 0x90, 0xD2, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x02, 0xE3, 0x5E, 0x74, 0x80, 0x00, 0x00, 0x00, 0x01, 0x1A, 0x29, 0xC2, 0x80, 0x00, 0x00, 0x00, 0x01, 0x75, 0xE6, 0x02, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x98, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0xAC, 0x60, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x51, 0x80, 0x06, 0x20, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x19, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x03, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x0E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x39, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
const unsigned char PROGMEM intro_frame4 [] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x20, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x03, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x10, 0x3F, 0xFC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x17, 0xC0, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x03, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x1F, 0xFC, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE0, 0x03, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1E, 0x7C, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE2, 0x43, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x1E, 0x7C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE0, 0x03, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1E, 0xF2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xD9, 0x49, 0x28, 0x00, 0x00, 0x00, 0x00, 0x05, 0x29, 0x49, 0x28, 0x00, 0x00, 0x00, 0x00, 0x05, 0x2F, 0x79, 0x28, 0x00, 0x00, 0x00, 0x00, 0x05, 0xE0, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0F, 0x79, 0x28, 0x00, 0x00, 0x00, 0x00, 0x05, 0xE9, 0x49, 0x28, 0x00, 0x00, 0x00, 0x00, 0x05, 0x29, 0x49, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x05, 0x2F, 0x78, 0x08, 0x00, 0x00, 0x00, 0x00, 0x05, 0xE0, 0x01, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0F, 0x79, 0x28, 0x00, 0x00, 0x00, 0x00, 0x05, 0xE9, 0x49, 0x28, 0x00, 0x00, 0x00, 0x00, 0x05, 0x29, 0x48, 0x94, 0x00, 0x00, 0x00, 0x00, 0x02, 0x97, 0xBC, 0x94, 0x00, 0x00, 0x00, 0x00, 0x02, 0xF0, 0x00, 0x94, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0xBC, 0x94, 0x00, 0x00, 0x00, 0x00, 0x02, 0xF4, 0xA4, 0x94, 0x00, 0x00, 0x00, 0x00, 0x02, 0x94, 0xA4, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x02, 0x97, 0xBC, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0xF0, 0x01, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0xFE, 0x14, 0x00, 0x00, 0x00, 0x00, 0x02, 0xF0, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4F, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x70, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
const unsigned char PROGMEM intro_frame5 [] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xFE, 0x7F, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x40, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xFE, 0x7F, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xDE, 0xF3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x52, 0x92, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x52, 0x92, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xDE, 0xF2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xDE, 0xF2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x52, 0x92, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x52, 0x92, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xDE, 0xF3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xDE, 0xF3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x52, 0x92, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x52, 0x92, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xDE, 0xF2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xDE, 0xF2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x52, 0x92, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x52, 0x92, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xDE, 0xF3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
double math1 = 0;
double math2 = 0;
double output = 0;
short page1 = 0;
//byte page2 = 0;
char pageb1 = 0;
//byte pageb2 = 0;
char op1 = 1;
//byte op2 = 1;
char step1 = 1;
char err = 0;
char frame = 0;
void u8g2drawBitmap(int16_t x, int16_t y, int16_t w, int16_t h, const unsigned char *bitmap, bool mirrorX) {
int16_t i, j, byteWidth = (w + 7) / 8;
uint8_t byte;
if (mirrorX) {
for (j = 0; j < h; j++) {
for (i = 0; i < w; i++) {
if (i & 7) byte <<= 1;
else byte = pgm_read_byte(bitmap + j * byteWidth + i / 8);
if (byte & 0x80) u8g2.drawPixel((x + w) - i, y + j);
}
}
} else {
for (j = 0; j < h; j++) {
for (i = 0; i < w; i++) {
if (i & 7) byte <<= 1;
else byte = pgm_read_byte(bitmap + j * byteWidth + i / 8);
if (byte & 0x80) u8g2.drawPixel(x + i, y + j);
}
}
}
}
/*String dtostrl( double val, byte precision) {
// prints val with number of decimal places determine by precision
// precision is a number from 0 to 6 indicating the desired decimial places
// example: printDouble( 3.1415, 2); // prints 3.14 (two decimal places)
String dbl;
dbl += String(int(val)); //prints the int part
if (val < 0.0) {
dbl += String('-');
val = -val;
}
dbl += String(int(val)); //prints the int part
if ( precision > 0) {
dbl += String("."); // print the decimal point
unsigned long frac;
unsigned long mult = 1;
byte padding = precision - 1;
while (precision--)
mult *= 10;
if (val >= 0)
frac = (val - int(val)) * mult;
else
frac = (int(val) - val ) * mult;
unsigned long frac1 = frac;
while ( frac1 /= 10 )
padding--;
while ( padding--)
dbl += String("0");
dbl += String(frac, DEC) ;
return dbl;
}
}*/
/*String getDoubleString(double val, int maxDig) {
// prints val with number of decimal places determine by precision
// NOTE: precision is 1 followed by the number of zeros for the desired number of decimial places
// example: printDouble( 3.1415, 100); // prints 3.14 (two decimal places)
String valStr;
valStr += floor(val);
int digits = 0;
double val2 = val - floor(val);
do {
digits++;
val2 = val / 10;
} while (val2 > 0.0000000000);
unsigned long frac;
for (int i = (val2 + 1); i < maxDig; i++) {
frac = frac * 10 + String(val).substring(i, i + 1).toInt();
}
if (frac != 0) {
valStr += ".";
valStr += String(frac, DEC);
}
return valStr;
}*/
void u8g2_overlayPrint(String printStr, /* 0 = none, 1 = center, 2 = right -> */ byte align, /* false = replaces only width of text, true = replaces from right to left */ bool horiz, bool sCPAB, byte x, byte y) {
u8g2.setDrawColor(0);
byte gw = u8g2.getStrWidth(printStr.c_str());
byte gh1 = u8g2.getAscent();
byte gh2 = u8g2.getDescent();
byte gh = gh1 + gh2 + 1;
byte ghf = gh * 1.5;
byte cx = (u8g2.getDisplayWidth() - gw) / 2;
//byte cy = (u8g2.getDisplayHeight()) / 2;
byte rx = (u8g2.getDisplayWidth() - gw);
y += gh;
if (sCPAB) {
x = u8g2.tx;
y = u8g2.ty;
}
if (align == 0 && !horiz) {
u8g2.drawBox(x, y - (gh), gw, ghf);
u8g2.setDrawColor(1);
u8g2.setCursor(x, y);
} else if (align == 0 && horiz) {
u8g2.drawBox(0, y - (gh), u8g2.getDisplayWidth(), gh);
u8g2.setDrawColor(1);
u8g2.setCursor(x, y);
} else if (align == 1 && !horiz) {
u8g2.drawBox(cx, y - (gh), gw, ghf);
u8g2.setDrawColor(1);
u8g2.setCursor(cx, y);
} else if (align == 1 && horiz) {
u8g2.drawBox(0, y - (gh), u8g2.getDisplayWidth(), gh);
u8g2.setDrawColor(1);
u8g2.setCursor(cx, y);
} else if (align == 2 && !horiz) {
u8g2.drawBox(rx, y - (gh), gw, ghf);
u8g2.setDrawColor(1);
u8g2.setCursor(rx, y);
} else if (align == 2 && horiz) {
u8g2.drawBox(0, y - (gh), u8g2.getDisplayWidth(), gh);
u8g2.setDrawColor(1);
u8g2.setCursor(rx, y);
}
u8g2.print(printStr);
//Serial.print(printStr + ": "); Serial.print("gw = " + gw); Serial.print(" gh1 = " + gh1); Serial.print(" gh2 = " + gh2); Serial.print(" gh = " + gh); Serial.println(" cx = " + cx);
}
void drawIntro(byte x, byte y, bool reversed, bool mirrored) {
if (!reversed) {
if (frame == 0) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame0, mirrored);
frame++;
} else if (frame == 1) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame1, mirrored);
frame++;
} else if (frame == 2) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame2, mirrored);
frame++;
} else if (frame == 3) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame3, mirrored);
frame++;
} else if (frame == 4) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame4, mirrored);
frame++;
} else if (frame == 5) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame5, mirrored);
//frame = 0;
}
} else {
if (frame == 0) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame5, mirrored);
frame++;
} else if (frame == 1) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame4, mirrored);
frame++;
} else if (frame == 2) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame3, mirrored);
frame++;
} else if (frame == 3) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame2, mirrored);
frame++;
} else if (frame == 4) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame1, mirrored);
frame++;
} else if (frame == 5) {
u8g2.setDrawColor(0);
u8g2.drawBox(x, y, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(x, y, 64, 64, intro_frame0, mirrored);
}
}
}
void u8g2_overlayPrintLn(String printStr, /* 0 = none, 1 = center, 2 = right -> */ byte align, /* false = replaces only width of text, true = replaces from right to left */ bool horiz, bool sCPAB, byte x, byte y) {
u8g2.setDrawColor(0);
byte gw = u8g2.getStrWidth(printStr.c_str());
byte gh1 = u8g2.getAscent();
byte gh2 = u8g2.getDescent();
byte gh = gh1 + gh2 + 1;
byte ghf = gh * 1.5;
byte cx = (u8g2.getDisplayWidth() - gw) / 2;
//byte cy = (u8g2.getDisplayHeight()) / 2;
byte rx = (u8g2.getDisplayWidth() - gw);
y += gh;
if (sCPAB) {
x = u8g2.tx;
y = u8g2.ty;
}
if (align == 0 && !horiz) {
u8g2.drawBox(x, y - (gh), gw, ghf);
u8g2.setDrawColor(1);
u8g2.setCursor(x, y);
} else if (align == 0 && horiz) {
u8g2.drawBox(0, y - (gh), u8g2.getDisplayWidth(), gh);
u8g2.setDrawColor(1);
u8g2.setCursor(x, y);
} else if (align == 1 && !horiz) {
u8g2.drawBox(cx, y - (gh), gw, ghf);
u8g2.setDrawColor(1);
u8g2.setCursor(cx, y);
} else if (align == 1 && horiz) {
u8g2.drawBox(0, y - (gh), u8g2.getDisplayWidth(), gh);
u8g2.setDrawColor(1);
u8g2.setCursor(cx, y);
} else if (align == 2 && !horiz) {
u8g2.drawBox(rx, y - (gh), gw, ghf);
u8g2.setDrawColor(1);
u8g2.setCursor(rx, y);
} else if (align == 2 && horiz) {
u8g2.drawBox(0, y - (gh), u8g2.getDisplayWidth(), gh);
u8g2.setDrawColor(1);
u8g2.setCursor(rx, y);
}
u8g2.println(printStr);
u8g2.setCursor(u8g2.tx - gw, u8g2.ty + ghf);
//Serial.print(printStr + ": "); Serial.print("gw = " + gw); Serial.print(" gh1 = " + gh1); Serial.print(" gh2 = " + gh2); Serial.print(" gh = " + gh); Serial.println(" cx = " + cx);
}
void u8g2_clearDisplay() {
u8g2.setDrawColor(0);
u8g2.drawBox(0, 0, u8g2.getDisplayWidth(), u8g2.getDisplayHeight());
u8g2.setDrawColor(1);
}
void draw() {
if (page1 == 0) {
if (frame == 0) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame0, false);
frame++;
} else if (frame == 1) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame1, false);
frame++;
} else if (frame == 2) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame2, false);
frame++;
} else if (frame == 3) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame3, false);
frame++;
} else if (frame == 4) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame4, false);
frame++;
} else if (frame == 5) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame5, false);
//frame = 0;
}
u8g2_overlayPrintLn(F("Welcome to "), 0, false, false, 0, 10);
u8g2_overlayPrint(F("Calculator!"), 0, false, true, 0, 0);
u8g2_overlayPrint(F("Help"), 2, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
u8g2_overlayPrint(F("Next"), 0, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
//u8g2_overlayPrint(F("Replay"), 1, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
}
else if (page1 == 1) {
//char* behind;
u8g2.drawHLine(20, 25, 108);
String operatorStr = "";
if (op1 == 1) operatorStr = "+";
else if (op1 == 2) operatorStr = "-";
else if (op1 == 3) operatorStr = "*";
else if (op1 == 4) operatorStr = "/";
else if (op1 == 5) operatorStr = "^";
u8g2.setDrawColor(1);
u8g2_overlayPrint(String(printf("%g", output)), 2, false, false, 0, (u8g2.getDisplayHeight() - u8g2.getDisplayHeight()));
u8g2_overlayPrint(String(operatorStr), 0, false, false, 6, 22);
if (step1 == 1) {
u8g2_overlayPrint(String("<"), 0, false, false, 0, 22);
u8g2_overlayPrint(String(">"), 0, false, false, 13, 22);
u8g2_overlayPrint(F("Choose"), 1, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
}
if (step1 >= 2) {
u8g2_overlayPrint(String(printf("%g", output)), 2, false, false, 0, (u8g2.getDisplayHeight() - u8g2.getDisplayHeight()) + 10);
}
if (step1 == 2) {
u8g2_overlayPrint(F("Equals"), 1, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
}
if (step1 == 3) {
u8g2_overlayPrint(F("Next"), 1, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
if (err == 0) {
u8g2_overlayPrint(String(printf("%g", output)), 2, false, false, 0, 27);
} else if (err == 1) {
u8g2_overlayPrint(String("Error!"), 2, false, false, 0, 27);
} else if (err == 2) {
String digLeft = String("e+" + String(String(printf("%g", output)).length()));
u8g2_overlayPrint(String(String(printf("%g", output)).substring(0, 16) + digLeft), 2, false, false, 0, 27);
} else if (err == 3) {
u8g2_overlayPrint(String("Can't divide by zero."), 2, false, false, 0, 27);
}
}
u8g2_overlayPrint(F("Clear"), 0, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
u8g2_overlayPrint(F("Help"), 2, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
}
else if (page1 == 2) {
u8g2_overlayPrint(F("Back"), 0, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
u8g2_overlayPrint(F("About"), 2, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
u8g2_overlayPrintLn(F("0-9 - Numbers"), 0, false, false, 0, 0);
u8g2_overlayPrintLn(F("Up arrow - backspace"), 0, false, true, 0, 0);
}
}
void typeNumber(int num1) {
if (step1 == 1) {
if ((math1 * 10 + num1) < 1000000001 && (math1 * 10 + num1) > -1000000001)
math1 = math1 * 10 + num1;
} else if (step1 == 2) {
if ((math2 * 10 + num1) < 1000000001 && (math2 * 10 + num1) > -1000000001)
math2 = math2 * 10 + num1;
} else if (step1 == 3) {
resetCalc();
if ((math1 * 10 + num1) < 1000000001 && (math1 * 10 + num1) > -1000000001)
math1 = math1 * 10 + num1;
}
}
void backSp() {
if (step1 == 1) {
if (floor(math1 / 10) < 1000000001 && floor(math1 / 10) > -1000000001)
math1 = floor(math1 / 10);
if (math1 < 0) math1 = 0;
} else if (step1 == 2) {
if (floor(math2 / 10) < 1000000001 && floor(math2 / 10) > -1000000001)
math2 = floor(math2 / 10);
if (math2 < 0) math2 = 0.00;
} else if (step1 == 3) {
resetCalc();
}
}
void nextOp() {
if (step1 == 1) {
if ((op1 + 1) <= 5) {
op1++;
}
else {
op1 = 1;
}
}
}
void prevOp() {
if (step1 == 1) {
if ((op1 - 1) >= 1) {
op1--;
}
else {
op1 = 5;
}
}
}
void resetCalc() {
math1 = 0;
math2 = 0;
output = 0;
step1 = 1;
}
void calcEquals() {
if (op1 == 0) {
err = 1;
} else if (op1 == 1) {
output = math1 + math2;
} else if (op1 == 2) {
output = math1 - math2;
} else if (op1 == 3) {
output = math1 * math2;
} else if (op1 == 4) {
output = math1 / math2;
} else if (op1 == 5) {
output = pow(math1, math2);
}
if (output > 1000000000.00) {
if (op1 == 4) err = 3;
else err = 2;
}
if (isnan(output)) {
err = 1;
}
}
void calcOk() {
if (step1 == 1) {
step1 = 2;
} else if (step1 == 2) {
step1 = 3;
calcEquals();
} else if (step1 == 3) {
if (err == 0) {
math1 = output;
calcEquals();
} else {
err = 0;
resetCalc();
}
}
}
void belowZero() {
if (step1 == 1) {
if (math1 < 0) {
math1 = (math1 - (math1 * 2));
} else if (math1 > 0) {
math1 = (math1 - (math1 * 2));
}
} else if (step1 == 2) {
if (math2 < 0) {
math2 = (math2 - (math2 * 2));
} else if (math2 > 0) {
math2 = (math2 - (math2 * 2));
}
} else if (step1 == 3) {
math1 = 0;
double output1;
if (output1 < 0) {
output1 = (output1 + (output1 * 2));
} else if (output1 > 0) {
output1 = (output1 - (output1 * 2));
}
if ((math1 + output1) > -1000000001 && (math1 + output1) < 1000000001) {
math1 = output1;
}
math2 = 0;
output = 0;
step1 = 1;
}
}
void clearCalc() {
if (step1 == 1) {
math1 = 0;
} else if (step1 == 2) {
math2 = 0;
step1 = 1;
} else if (step1 == 3) {
resetCalc();
}
}
void irtasks() {
//String btnLS PROGMEM = "ff6897";
//String btnRS PROGMEM = "ffb04f";
//String btn1 PROGMEM = "ffa25d";
//String btn2 PROGMEM = "ff629d";
//String btn3 PROGMEM = "ffe21d";
//String btn4 PROGMEM = "ff22dd";
//String btn5 PROGMEM = "ff02fd";
//String btn6 PROGMEM = "ffc23d";
//String btn7 PROGMEM = "ffe01f";
//String btn8 PROGMEM = "ffa857";
//String btn9 PROGMEM = "ff906f";
//String btn0 PROGMEM = "ff9867";
//String btnOK PROGMEM = "ff38c7";
//String btnR PROGMEM = "ff5aa5";
//String btnL PROGMEM = "ff10ef";
//String btnD PROGMEM = "ff4ab5";
//String btnU PROGMEM = "ff18e7";
remoteEvents_t remoteEvents = lirrGetEvents();
if (page1 == 0) {
switch (remoteEvents.buttonState)
{
case (BUTTON_RELEASED):
if (String(remoteEvents.buttonCode, HEX) == "ff6897") {
page1 = 1;
//page2 = page1;
}
if (String(remoteEvents.buttonCode, HEX) == "ff38c7") {
frame = 0;
u8g2.firstPage();
for (char i = 0; i < 5; i++) {
do {
if (i == 0) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame5, true);
} else if (i == 1) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame4, true);
} else if (i == 2) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame3, true);
frame++;
} else if (i == 3) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame2, true);
frame++;
} else if (i == 4) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame1, true);
frame++;
} else if (i == 5) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame0, true);
//frame = 0;
}
u8g2_overlayPrintLn(F("Welcome to "), 0, false, false, 0, 10);
u8g2_overlayPrint(F("Calculator!"), 0, false, true, 0, 0);
u8g2_overlayPrint(F("Help"), 2, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
u8g2_overlayPrint(F("Next"), 0, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
} while (u8g2.nextPage());
} do {
u8g2_clearDisplay();
u8g2_overlayPrintLn(F("Welcome to "), 0, false, false, 0, 10);
u8g2_overlayPrint(F("Calculator!"), 0, false, true, 0, 0);
u8g2_overlayPrint(F("Help"), 2, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
u8g2_overlayPrint(F("Next"), 0, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
} while (u8g2.nextPage());
delay(10);
for (char i = 0; i < 5; i++) {
u8g2.firstPage();
do {
if (i == 0) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame0, false);
} else if (i == 1) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame1, false);
} else if (i == 2) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame2, false);
} else if (i == 3) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame3, false);
frame++;
} else if (i == 4) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame4, false);
frame++;
} else if (i == 5) {
u8g2.setDrawColor(0);
u8g2.drawBox(64, 0, 64, 64);
u8g2.setDrawColor(1);
u8g2drawBitmap(64, 0, 64, 64, intro_frame5, false);
//frame = 0;
}
u8g2_overlayPrintLn(F("Welcome to "), 0, false, false, 0, 10);
u8g2_overlayPrint(F("Calculator!"), 0, false, true, 0, 0);
u8g2_overlayPrint(F("Help"), 2, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
u8g2_overlayPrint(F("Next"), 0, false, false, 0, (u8g2.getDisplayHeight() - (u8g2.getAscent() + u8g2.getDescent() + 2)));
} while (u8g2.nextPage());
}
}
if (String(remoteEvents.buttonCode, HEX) == "ffb04f") {
pageb1 = page1;
//pageb2 = pageb1;
page1 = 2;
//page2 = page1;
}
}
}
else if (page1 == 1) {
switch (remoteEvents.buttonState) {
case (BUTTON_PRESSED):
if (String(remoteEvents.buttonCode, HEX) == "ffffff") {
} else if ( String(remoteEvents.buttonCode, HEX) == "ff6897" ) {
clearCalc();
}
else if (String(remoteEvents.buttonCode, HEX) == "ff9867") {
typeNumber(0);
} else if (String(remoteEvents.buttonCode, HEX) == "ffa25d") {
typeNumber(1);
} else if (String(remoteEvents.buttonCode, HEX) == "ff629d") {
typeNumber(2);
} else if (String(remoteEvents.buttonCode, HEX) == "ffe21d") {
typeNumber(3);
} else if (String(remoteEvents.buttonCode, HEX) == "ff22dd") {
typeNumber(4);
} else if (String(remoteEvents.buttonCode, HEX) == "ff02fd") {
typeNumber(5);
} else if (String(remoteEvents.buttonCode, HEX) == "ffc23d") {
typeNumber(6);
} else if (String(remoteEvents.buttonCode, HEX) == "ffe01f") {
typeNumber(7);
} else if (String(remoteEvents.buttonCode, HEX) == "ffa857") {
typeNumber(8);
} else if (String(remoteEvents.buttonCode, HEX) == "ff906f") {
typeNumber(9);
} else if (String(remoteEvents.buttonCode, HEX) == "ff10ef") {
prevOp();
} else if (String(remoteEvents.buttonCode, HEX) == "ff5aa5") {
nextOp();
} else if (String(remoteEvents.buttonCode, HEX) == "ff4ab5") {
belowZero();
} else if (String(remoteEvents.buttonCode, HEX) == "ff18e7") {
backSp();
} else if (String(remoteEvents.buttonCode, HEX) == "ff38c7") {
calcOk();
}
else if (String(remoteEvents.buttonCode, HEX) == "ffb04f") {
pageb1 = page1;
//pageb2 = pageb1;
page1 = 2;
//page2 = page1;
}
}
}
}
void setup() {
//Serial.begin(115200);
lirrBegin(ir, PROTOCOL_NEC);
u8g2.begin();
u8g2.setFont(u8g2_font_nokiafc22_tr);
u8g2.firstPage();
}
void loop() {
do {
u8g2_clearDisplay();
draw();
} while (u8g2.nextPage());
irtasks();
delay(10);
}
/////////////////////////////////////////
Please help. Any help will be appreciated. Thank You.