#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
// 'Menu bar', 128x64px
const unsigned char epd_bitmap_Menu_bar [] 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, 0x04,
0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x50, 0x00, 0x0c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04,
0x00, 0x50, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0xdc, 0x00, 0x18, 0x01, 0xf1, 0xf7, 0x8f, 0xc7, 0xc7, 0xe3, 0xe3, 0xf3, 0xcf, 0x80, 0x00,
0x00, 0x50, 0x00, 0x18, 0x03, 0x19, 0x9c, 0xcc, 0x44, 0x66, 0x32, 0x33, 0x11, 0x18, 0x80, 0x04,
0x00, 0x50, 0x00, 0x18, 0x02, 0x09, 0x08, 0x48, 0x6c, 0x24, 0x36, 0x12, 0x19, 0x18, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x02, 0x09, 0x08, 0x48, 0x6c, 0x24, 0x37, 0xf2, 0x19, 0x0f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x02, 0x09, 0x08, 0x48, 0x6c, 0x24, 0x36, 0x02, 0x19, 0x03, 0x80, 0x04,
0x00, 0xfc, 0x00, 0x08, 0x13, 0x09, 0x08, 0x4c, 0x6c, 0x24, 0x36, 0x02, 0x19, 0x00, 0x80, 0x00,
0x03, 0x87, 0x00, 0x0c, 0x33, 0x19, 0x08, 0x4c, 0x44, 0x64, 0x32, 0x32, 0x19, 0x18, 0x80, 0x00,
0x00, 0xfc, 0x00, 0x07, 0xe1, 0xf1, 0x08, 0x4f, 0xc7, 0xc4, 0x31, 0xe2, 0x19, 0xcf, 0x80, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x84,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x20,
0x40, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x24,
0x40, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x20,
0x41, 0xf8, 0x00, 0x1e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x81, 0x00, 0x00, 0x00, 0x00, 0x20,
0x43, 0x0c, 0x00, 0x12, 0x17, 0x8f, 0x88, 0xf0, 0x74, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x24,
0x41, 0x08, 0x00, 0x33, 0x18, 0x88, 0x89, 0x88, 0x8c, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20,
0x41, 0x08, 0x00, 0x33, 0x10, 0xc0, 0xc9, 0x0d, 0x84, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20,
0x43, 0x0c, 0x00, 0x21, 0x10, 0xc0, 0xc9, 0x0d, 0x84, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x24,
0x41, 0x08, 0x00, 0x7f, 0x90, 0xcf, 0xc9, 0x0d, 0x84, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20,
0x41, 0x08, 0x00, 0x61, 0x90, 0xd8, 0xc9, 0x0d, 0x84, 0x08, 0x81, 0x00, 0x00, 0x00, 0x00, 0x20,
0x43, 0x0c, 0x00, 0x40, 0x90, 0xd8, 0xc9, 0x88, 0x8c, 0x08, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x24,
0x41, 0x08, 0x00, 0xc0, 0xd0, 0xdf, 0xc8, 0xd8, 0xdc, 0x08, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x20,
0x41, 0xf8, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60, 0x24, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x20,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44,
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3f, 0x84, 0x00, 0x40, 0x00, 0x60, 0xc3, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x87, 0x00, 0x20, 0xc4, 0x00, 0x4c, 0x00, 0x60, 0xc4, 0x18, 0x00, 0x00, 0x00, 0x00, 0x04,
0x08, 0x49, 0x00, 0x20, 0x60, 0x00, 0x0c, 0x00, 0x60, 0xcc, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x41, 0x00, 0x20, 0x64, 0x3a, 0x5f, 0x3c, 0x60, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x41, 0x00, 0x20, 0x24, 0xce, 0x4c, 0x66, 0x60, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x08, 0x41, 0x00, 0x20, 0x24, 0x86, 0x4c, 0x02, 0x60, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x41, 0x00, 0x20, 0x24, 0x86, 0x4c, 0x02, 0x60, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x41, 0x00, 0x20, 0x64, 0x86, 0x4c, 0x3e, 0x60, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x08, 0x41, 0x00, 0x20, 0x64, 0x86, 0x4c, 0x42, 0x60, 0xc8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x8f, 0xc0, 0x20, 0xc4, 0xc6, 0x4c, 0x42, 0x60, 0xcc, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3f, 0x84, 0x4e, 0x44, 0x66, 0x60, 0xc7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x3e, 0x04, 0x36, 0x46, 0x3a, 0x40, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'icon_analog', 16x16px
const unsigned char epd_bitmap_icon_analog [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x18, 0x60, 0x08, 0x40, 0x08, 0x40, 0x18, 0x60,
0x08, 0x40, 0x08, 0x40, 0x18, 0x60, 0x08, 0x40, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'icon_comp', 16x16px
const unsigned char epd_bitmap_icon_comp [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x02, 0x80, 0x0e, 0xe0, 0x02, 0x80, 0x02, 0x80, 0x00, 0x00,
0x00, 0x00, 0x07, 0xe0, 0x1c, 0x38, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'icon_digital', 16x16px
const unsigned char epd_bitmap_icon_digital [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x38, 0x42, 0x48, 0x42, 0x08, 0x42, 0x08, 0x42, 0x08,
0x42, 0x08, 0x42, 0x08, 0x42, 0x08, 0x3c, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 144)
const unsigned char* bitmap_icons[3] = {
epd_bitmap_icon_comp,
epd_bitmap_icon_analog,
epd_bitmap_icon_digital,
};
// 'item_set', 128x21px
const unsigned char epd_bitmap_item_set [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
};
// 'scroll_dot', 8x64px
const unsigned char epd_bitmap_scroll_dot [] PROGMEM = {
0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00,
0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04,
0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00,
0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00
};
#define BUTTON_UP_PIN 4
#define BUTTON_SELECT_PIN 8
#define BUTTON_DOWN_PIN 12
const int NUM_ITEMS = 3; // number of items in the list and also the number of screenshots and screenshots with QR codes (other screens)
const int MAX_ITEM_LENGTH = 20;
char menu_items [NUM_ITEMS] [20] ={
{"Components"},
{"Analog IC"},
{"Digital IC"},
};
int item_selected =1;
int item_sel_previous;
int item_sel_next;
void setup() {
pinMode(BUTTON_UP_PIN, INPUT_PULLUP);
pinMode(BUTTON_SELECT_PIN, INPUT_PULLUP);
pinMode(BUTTON_DOWN_PIN, INPUT_PULLUP);
u8g.setFont(u8g_font_tpssb);
u8g.setColorIndex(1);
}
void loop() {
if (digitalRead(BUTTON_UP_PIN)==LOW){
item_selected=item_selected-1;
if(item_selected<0){
item_selected=NUM_ITEMS-1;
}
}
if (digitalRead(BUTTON_DOWN_PIN)==LOW){
item_selected=item_selected-1;
if(item_selected>=NUM_ITEMS){
item_selected=0;
}
}
item_sel_previous=item_selected-1;
if (item_sel_previous<0){
item_sel_previous=NUM_ITEMS-1;
}
item_sel_next=item_selected+1;
if (item_sel_next>=NUM_ITEMS){
item_sel_next=0;
}
u8g.firstPage();
do {
//u8g.drawBitmapP(0,0,128/,64,epd_bitmap_Menu_bar);
u8g.drawBitmapP(3,2,16/8,16,bitmap_icons[item_sel_previous]);//component
u8g.setFont(u8g_font_7x14);
u8g.drawStr(27,17,menu_items[item_sel_previous]);
u8g.setFont(u8g_font_7x14);
u8g.drawStr(24,40,menu_items[item_selected]);
u8g.drawBitmapP(3,24,16/8,16,bitmap_icons[item_selected]);//analog
u8g.setFont(u8g_font_7x14);
u8g.drawStr(25,63,menu_items[item_sel_next]);
u8g.drawBitmapP(3,46,16/8,16,bitmap_icons[item_sel_next]);//digital
u8g.drawBitmapP(0,21,128/8,21,epd_bitmap_item_set);//select indicator
u8g.drawBitmapP(120,0,8/8,64,epd_bitmap_scroll_dot);//scroll indicator
} while ( u8g.nextPage() );
}