#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
#define BUTTON_LEFT_PIN 4 //pin for left button
#define BUTTON_ENTER_PIN 8 //pin for enter button
#define BUTTON_RIGHT_PIN 12 //pin for right button
int item_sel = 0; //which item is selected
int item_sel_previous = 0; //which item is previous
int item_sel_next = 0; // which item is next
int current_screen = 1; // 0=start menu 1=breaker rating, 2=breaker type , 3=cable size, 4=BR, 5=BT, 6=CS
int button_left_clicked = 0; // only perform action when button is clicked, and wait until another press
int button_enter_clicked = 0; // same as above
int button_right_clicked = 0; // same as above
const int analogPin = A0;
//int raw = 0;
//int Vin = 5;
//float Vout = 0;
//float R1 = 30;
//float R2 = 0;
//float buffer = 0;
// ' scrollbar_background', 128x8px
const unsigned char epd_bitmap__scrollbar_background [] 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,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'arrow_right', 16x16px
const unsigned char epd_bitmap_arrow_right [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x70, 0xff, 0xf8, 0xff, 0xfc, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0xf8, 0x00, 0x70, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00
};
// 'arrow_left', 16x16px
const unsigned char epd_bitmap_arrow_left [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x1f, 0xff, 0x3f, 0xff, 0x7f, 0xff, 0xff, 0xff,
0xff, 0xff, 0x7f, 0xff, 0x3f, 0xff, 0x1f, 0xff, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00
};
// ' border', 128x21px
const unsigned char epd_bitmap__border [] PROGMEM = {
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8
};
// ' breaker_rating_icon', 16x16px
const unsigned char epd_bitmap__breaker_rating_icon [] PROGMEM = {
0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
0x3c, 0x3c, 0x3f, 0xfc, 0x3f, 0xfc, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00
};
// ' breaker_type_icon', 16x16px
const unsigned char epd_bitmap__breaker_type_icon [] PROGMEM = {
0x0f, 0xf0, 0x08, 0x10, 0x09, 0x90, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x0b, 0xd0, 0x09, 0x90,
0x09, 0x90, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x09, 0x90, 0x08, 0x10, 0x0f, 0xf0
};
// ' cable_size_icon', 16x16px
const unsigned char epd_bitmap__cable_size_icon [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x02, 0x10, 0x31, 0x20, 0x09, 0x40,
0x05, 0x40, 0x05, 0x40, 0x05, 0x40, 0x0a, 0xa0, 0x08, 0xa0, 0x08, 0xa0, 0x0a, 0xa0, 0x0a, 0xa0
};
// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 192)
const unsigned char* bitmap_icons[3] = {
epd_bitmap__breaker_rating_icon,
epd_bitmap__breaker_type_icon,
epd_bitmap__cable_size_icon,
};
const int NUM_ITEMS = 3;
char menu_items [NUM_ITEMS] [15] = {
{"Breaker Rating"},
{"Breaker Type "},
{"Cable Size "}
};
const int NUM_RATING = 9;
char Breaker_items [NUM_RATING] [4] = {
{"6A "},
{"10A"},
{"16A"},
{"20A"},
{"25A"},
{"32A"},
{"40A"},
{"50A"},
{"63A"}
};
const int NUM_TYPE = 3;
char Breaker_type [NUM_TYPE] [7] = {
{"Type B"},
{"Type C"},
{"Type D"}
};
const int CS_10 = 2;
char Cable_sz_1 [CS_10] [6] = {
"1.0mm",
"1.5mm"
};
const int CS_16 = 2;
char Cable_sz_2 [CS_16] [6] = {
"1.5mm",
"2.5mm"
};
const int CS = 6;
char Cable_sz_0 [CS] [6] = {
"1.0mm",
"2.5mm",
"4.0mm",
"6.0mm",
"10mm ",
"16mm "
};
bool B_Type [3] = {false, false, false};
byte btype = 0;
bool B_Rating [9] = {false, false, false, false, false, false, false, false, false};
byte brating = 0;
byte brating1 = 0;
bool C_Size [7] = {false, false, false, false, false, false, false};
byte csize = 0;
const int BREAKER_TYPES = 3;
const int BREAKER_RATINGS = 9;
int breakerRating = 0;
int breakerType = 0;
const float resistanceTable[BREAKER_RATINGS][BREAKER_TYPES] = {
//6A
{
6.1, 3.3, 2.0 // Type B, C, D - 1mm
},
//10A
{
3.7, 2.0, 1.2 // Type B, C, D - 1mm & 1.5mm
},
//16A
{
2.3, 1.2, 0.7 // Type B, C, D - 1.5mm & 2.5mm
},
//20A
{
1.8, 1.0, 0.6 // Type B, C, D - 2.5mm
},
//25A
{
1.5, 0.8, 0.5 // Type B, C, D - 4mm
},
//32A
{
1.2, 0.6, 0.4 // Type B, C, D - 4mm
},
//40A
{
0.9, 0.5, 0.3 // Type B, C, D - 6mm
},
//50A
{
0.7, 0.4, 0.2 // Type B, C, D - 10mm
},
//63A
{
0.6, 0.3, 0.2 // Type B, C, D - 16mm
}
};
const int CONFIRM = 2;
char Confirm [CONFIRM] [17] = {
{"Enter to Confirm"},
{" Left to Cancel "}
};
void setup() {
pinMode(BUTTON_LEFT_PIN, INPUT_PULLUP);
pinMode(BUTTON_ENTER_PIN, INPUT_PULLUP);
pinMode(BUTTON_RIGHT_PIN, INPUT_PULLUP);
u8g.setFont(u8g_font_tpssb);
u8g.setColorIndex(1);
}
void loop() {
float resistanceValue = resistanceTable[breakerRating][breakerType];
int sensorValue = analogRead(analogPin);
// Assuming a 5V reference voltage
float voltage = sensorValue * (5.0 / 1024.0);
// Calculate the resistance using the voltage divider formula
// R1 = R2 * (Vin / Vout - 1)
const int knownResistance = 20; // Replace with the resistance value of R2 in ohms
float unknownResistance = knownResistance * (5.0 / voltage);
//raw = analogRead(analogPin);
//if (raw) {
// buffer = raw * Vin;
// Vout = (buffer) / 1024.0;
// buffer = (Vin / Vout) - 1;
// R2 = R1 * buffer;
//}
u8g.firstPage();
do {
for (int i = 0; i < 3; i++) { //Breaker type
btype |= (B_Type[i] << (2 - i));
}
for (int b = 0; b < 8; b++) { //Breaker rating
brating |= (B_Rating[b] << (7 - b));
}
brating1 = B_Rating[8] << 7;
for (int c = 0; c < 7; c++) { //Cable Size
csize |= (C_Size[c] << (6 - c));
}
if (current_screen == 1) { // breaker rating
//left arrow
u8g.drawBitmapP((64 - u8g.getStrWidth(Breaker_items[item_sel]) / 2) - 21, 30, 16 / 8, 16, epd_bitmap_arrow_left);
//right arrow
u8g.drawBitmapP((64 + u8g.getStrWidth(Breaker_items[item_sel]) / 2) + 5, 30, 16 / 8, 16, epd_bitmap_arrow_right);
//breaker rating icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[0]);
u8g.drawStr(22, 15, menu_items[0]);
// selected item
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Breaker_items[item_sel]) / 2, 42, Breaker_items[item_sel]);
//scrollbar
u8g.drawBitmapP(1, 56, 128 / 8, 8, epd_bitmap__scrollbar_background);
u8g.drawBox(128 / NUM_RATING * item_sel, 59, 128 / NUM_RATING, 3);
if ((digitalRead(BUTTON_LEFT_PIN) == LOW) && (button_left_clicked == 0)) {//UP button is pressed
item_sel = item_sel - 1;
button_left_clicked = 1;
if (item_sel < 0) {
item_sel = NUM_RATING - 1;
}
}
if ((digitalRead(BUTTON_RIGHT_PIN) == LOW) && (button_right_clicked == 0)) {//DOWN button is pressed
item_sel = item_sel + 1;
button_right_clicked = 1;
if (item_sel >= NUM_RATING) {
item_sel = 0;
}
}
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) { //ENTER button is pressed
button_enter_clicked = 1;
current_screen = 2;
}
if ((digitalRead(BUTTON_LEFT_PIN) == HIGH) && (button_left_clicked == 1)) { // unclick
button_left_clicked = 0;
}
if ((digitalRead(BUTTON_RIGHT_PIN) == HIGH) && (button_right_clicked == 1)) { // unclick
button_right_clicked = 0;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) { // unclick
button_enter_clicked = 0;
}
item_sel_previous = item_sel - 1;
if (item_sel_previous < 0) {
item_sel_previous = NUM_RATING - 1;
}
item_sel_next = item_sel + 1;
if (item_sel_next >= NUM_RATING) {
item_sel_next = 0;
}
}
else if (current_screen == 2) {//Breaker Rating selection screen
u8g.setColorIndex(1);
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Breaker_items[item_sel]) / 2, 42, Breaker_items[item_sel]);
u8g.setFont(u8g_font_5x8);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 7, Confirm[0]);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 63, Confirm[1]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) { //ENTER button is pressed
button_enter_clicked = 1;
if (Breaker_items[item_sel] == Breaker_items [0]) {
current_screen = 5; //6A
B_Rating[0] = true;
}
else if (Breaker_items[item_sel] == Breaker_items[1]) {
current_screen = 6; //10A
//ten = true;
B_Rating[1] = true;
}
else if (Breaker_items[item_sel] == Breaker_items[2]) {
current_screen = 7; //16A
B_Rating[2] = true;
}
else if (Breaker_items[item_sel] == Breaker_items[3]) {
current_screen = 8; //20A
B_Rating[3] = true;
}
else if (Breaker_items[item_sel] == Breaker_items[4]) {
current_screen = 9; //25A
B_Rating[4] = true;
}
else if (Breaker_items[item_sel] == Breaker_items[5]) {
current_screen = 13; //32A
B_Rating[5] = true;
}
else if (Breaker_items[item_sel] == Breaker_items[6]) {
current_screen = 10; //40A
B_Rating[6] = true;
}
else if (Breaker_items[item_sel] == Breaker_items[7]) {
current_screen = 11; //50A
B_Rating[7] = true;
}
else if (Breaker_items[item_sel] == Breaker_items[8]) {
current_screen = 12; //63A
B_Rating[8] = true;
}
}
if ((digitalRead(BUTTON_LEFT_PIN) == LOW) && (button_left_clicked == 0)) {
current_screen --;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) { // unclick
button_enter_clicked = 0;
}
if ((digitalRead(BUTTON_LEFT_PIN) == HIGH) && (button_left_clicked == 1)) {
button_left_clicked = 0;
}
}
else if (current_screen == 3) {//breaker type
if ((digitalRead(BUTTON_LEFT_PIN) == LOW) && (button_left_clicked == 0)) {//UP button is pressed
item_sel = item_sel - 1;
button_left_clicked = 1;
if (item_sel < 0) {
item_sel = NUM_TYPE - 1;
}
}
if ((digitalRead(BUTTON_RIGHT_PIN) == LOW) && (button_right_clicked == 0)) {//DOWN button is pressed
item_sel = item_sel + 1;
button_right_clicked = 1;
if (item_sel >= NUM_TYPE) {
item_sel = 0;
}
}
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0 )) {
button_enter_clicked = 1;
current_screen ++;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) { // unclick
button_enter_clicked = 0;
}
if ((digitalRead(BUTTON_LEFT_PIN) == HIGH) && (button_left_clicked == 1)) { // unclick
button_left_clicked = 0;
}
if ((digitalRead(BUTTON_RIGHT_PIN) == HIGH) && (button_right_clicked == 1)) { // unclick
button_right_clicked = 0;
}
//left arrow
u8g.drawBitmapP((64 - u8g.getStrWidth(Breaker_type[item_sel]) / 2) - 21, 30, 16 / 8, 16, epd_bitmap_arrow_left);
//right arrow
u8g.drawBitmapP((64 + u8g.getStrWidth(Breaker_type[item_sel]) / 2) + 5, 30, 16 / 8, 16, epd_bitmap_arrow_right);
//breaker rating icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[1]);
u8g.drawStr(22, 15, menu_items[1]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Breaker_type[item_sel]) / 2, 42, Breaker_type[item_sel]);
//scrollbar
u8g.drawBitmapP(1, 56, 128 / 8, 8, epd_bitmap__scrollbar_background);
u8g.drawBox(128 / NUM_TYPE * item_sel, 59, 128 / NUM_TYPE, 3);
}
else if (current_screen == 4) {//Breaker type selection screen
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Breaker_type[item_sel]) / 2, 42, Breaker_type[item_sel]);
u8g.setFont(u8g_font_5x8);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 7, Confirm[0]);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 63, Confirm[1]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) { //ENTER button is pressed
button_enter_clicked = 1;
current_screen = 17;
if (Breaker_type[item_sel] == Breaker_type[0]) {
B_Type[0] = true;
}
else if (Breaker_type[item_sel] == Breaker_type[1]) {
B_Type[1] = true;
}
else if (Breaker_type[item_sel] == Breaker_type[2]) {
B_Type[2] = true;
}
}
if ((digitalRead(BUTTON_LEFT_PIN) == LOW) && (button_left_clicked == 0)) {
current_screen --;
item_sel = 1;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) { // unclick
button_enter_clicked = 0;
}
if ((digitalRead(BUTTON_LEFT_PIN) == HIGH) && (button_left_clicked == 1)) {
button_left_clicked = 0;
}
}
else if (current_screen == 5) {//cable size 6A
//cable size icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[2]);
u8g.drawStr(22, 15, menu_items[2]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.getStrWidth(Cable_sz_0[0]);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_0[0]) / 2, 42, Cable_sz_0[0]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) {
button_enter_clicked = 1;
current_screen = 16;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) {
button_enter_clicked = 0;
}
}
else if (current_screen == 6) {//cable size 10A
if ((digitalRead(BUTTON_LEFT_PIN) == LOW) && (button_left_clicked == 0)) {//UP button is pressed
item_sel = item_sel - 1;
button_left_clicked = 1;
if (item_sel < 0) {
item_sel = CS_10 - 1;
}
}
if ((digitalRead(BUTTON_RIGHT_PIN) == LOW) && (button_right_clicked == 0)) {//DOWN button is pressed
item_sel = item_sel + 1;
button_right_clicked = 1;
if (item_sel >= CS_10) {
item_sel = 0;
}
}
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) {
button_enter_clicked = 1;
current_screen = 14;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) {
button_enter_clicked = 0;
}
if ((digitalRead(BUTTON_LEFT_PIN) == HIGH) && (button_left_clicked == 1)) { // unclick
button_left_clicked = 0;
}
if ((digitalRead(BUTTON_RIGHT_PIN) == HIGH) && (button_right_clicked == 1)) { // unclick
button_right_clicked = 0;
}
item_sel_previous = item_sel - 1;
if (item_sel_previous < 0) {
item_sel_previous = CS_10 - 1;
}
item_sel_next = item_sel + 1;
if (item_sel_next >= CS_10) {
item_sel_next = 0;
}
//left arrow
u8g.drawBitmapP((64 - u8g.getStrWidth(Cable_sz_1[item_sel]) / 2) - 21, 30, 16 / 8, 16, epd_bitmap_arrow_left);
//right arrow
u8g.drawBitmapP((64 + u8g.getStrWidth(Cable_sz_1[item_sel]) / 2) + 5, 30, 16 / 8, 16, epd_bitmap_arrow_right);
//cable size icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[2]);
u8g.drawStr(22, 15, menu_items[2]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.getStrWidth(Cable_sz_1[item_sel]);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_1[item_sel]) / 2, 42, Cable_sz_1[item_sel]);
//scrollbar
u8g.drawBitmapP(1, 56, 128 / 8, 8, epd_bitmap__scrollbar_background);
u8g.drawBox(128 / CS_10 * item_sel, 59, 128 / CS_10, 3);
}
else if (current_screen == 7) {//cable size 16A
if ((digitalRead(BUTTON_LEFT_PIN) == LOW) && (button_left_clicked == 0)) {//UP button is pressed
item_sel = item_sel - 1;
button_left_clicked = 1;
if (item_sel < 0) {
item_sel = CS_16 - 1;
}
}
if ((digitalRead(BUTTON_RIGHT_PIN) == LOW) && (button_right_clicked == 0)) {//DOWN button is pressed
item_sel = item_sel + 1;
button_right_clicked = 1;
if (item_sel >= CS_16) {
item_sel = 0;
}
}
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) {
button_enter_clicked = 1;
current_screen = 15;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) {
button_enter_clicked = 0;
}
if ((digitalRead(BUTTON_LEFT_PIN) == HIGH) && (button_left_clicked == 1)) { // unclick
button_left_clicked = 0;
}
if ((digitalRead(BUTTON_RIGHT_PIN) == HIGH) && (button_right_clicked == 1)) { // unclick
button_right_clicked = 0;
}
//left arrow
u8g.drawBitmapP((64 - u8g.getStrWidth(Cable_sz_2[item_sel]) / 2) - 21, 30, 16 / 8, 16, epd_bitmap_arrow_left);
//right arrow
u8g.drawBitmapP((64 + u8g.getStrWidth(Cable_sz_2[item_sel]) / 2) + 5, 30, 16 / 8, 16, epd_bitmap_arrow_right);
//cable size icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[2]);
u8g.drawStr(22, 15, menu_items[2]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.getStrWidth(Cable_sz_2[item_sel]);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_2[item_sel]) / 2, 42, Cable_sz_2[item_sel]);
//scrollbar
u8g.drawBitmapP(1, 56, 128 / 8, 8, epd_bitmap__scrollbar_background);
u8g.drawBox(128 / CS_16 * item_sel, 59, 128 / CS_16, 3);
}
else if (current_screen == 8) {//cable size 20A
//cable size icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[2]);
u8g.drawStr(22, 15, menu_items[2]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_0[1]) / 2, 42, Cable_sz_0[1]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) {
button_enter_clicked = 1;
current_screen = 16;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) {
button_enter_clicked = 0;
}
}
else if (current_screen == 9) {//cable size 25A
//cable size icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[2]);
u8g.drawStr(22, 15, menu_items[2]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_0[2]) / 2, 42, Cable_sz_0[2]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) {
button_enter_clicked = 1;
current_screen = 16;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) {
button_enter_clicked = 0;
}
}
else if (current_screen == 10) {//cable size 40A
//cable size icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[2]);
u8g.drawStr(22, 15, menu_items[2]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_0[3]) / 2, 42, Cable_sz_0[3]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) {
button_enter_clicked = 1;
current_screen = 16;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) {
button_enter_clicked = 0;
}
}
else if (current_screen == 11) {//cable size 50A
//cable size icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[2]);
u8g.drawStr(22, 15, menu_items[2]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_0[4]) / 2, 42, Cable_sz_0[4]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) {
button_enter_clicked = 1;
current_screen = 16;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) {
button_enter_clicked = 0;
}
}
else if (current_screen == 12) {//cable size 63A
//cable size icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[2]);
u8g.drawStr(22, 15, menu_items[2]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_0 [5]) / 2, 42, Cable_sz_0 [5]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) {
button_enter_clicked = 1;
current_screen = 16;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) {
button_enter_clicked = 0;
}
}
else if (current_screen == 13) {//cable size 32A
//cable size icon & text
u8g.drawBitmapP(3, 2, 16 / 8, 16, bitmap_icons[2]);
u8g.drawStr(22, 15, menu_items[2]);
//selected item
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_0 [2]) / 2, 42, Cable_sz_0 [2]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) {
button_enter_clicked = 1;
current_screen = 16;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) {
button_enter_clicked = 0;
}
}
else if (current_screen == 14) {//Cable size selection screen 10A
u8g.setColorIndex(1);
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_1[item_sel]) / 2, 42, Cable_sz_1[item_sel]);
u8g.setFont(u8g_font_5x8);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 7, Confirm[0]);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 63, Confirm[1]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) { //ENTER button is pressed
button_enter_clicked = 1;
current_screen = 3;
if (Cable_sz_1[item_sel] == Cable_sz_1[0]) {
C_Size[0] = true;
}
else if (Cable_sz_1[item_sel] == Cable_sz_1[1]) {
C_Size[1] = true;
}
}
if ((digitalRead(BUTTON_LEFT_PIN) == LOW) && (button_left_clicked == 0)) {
current_screen --;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) { // unclick
button_enter_clicked = 0;
}
if ((digitalRead(BUTTON_LEFT_PIN) == HIGH) && (button_left_clicked == 1)) {
button_left_clicked = 0;
}
}
else if (current_screen == 15) {//Cable size selection screen 16A
u8g.setColorIndex(1);
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_2[item_sel]) / 2, 42, Cable_sz_2[item_sel]);
u8g.setFont(u8g_font_5x8);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 7, Confirm[0]);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 63, Confirm[1]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) { //ENTER button is pressed
button_enter_clicked = 1;
current_screen = 3;
if (Cable_sz_2[item_sel] == Cable_sz_2[0]) {
C_Size[0] = true;
}
else if (Cable_sz_1[item_sel] == Cable_sz_1[1]) {
C_Size[2] = true;
}
}
if ((digitalRead(BUTTON_LEFT_PIN) == LOW) && (button_left_clicked == 0)) {
current_screen --;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) { // unclick
button_enter_clicked = 0;
}
if ((digitalRead(BUTTON_LEFT_PIN) == HIGH) && (button_left_clicked == 1)) {
button_left_clicked = 0;
}
}
else if (current_screen == 16) {//Cable size selection screen (6A,20A,25A,32A,50A,63A)
u8g.setColorIndex(1);
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(64 - u8g.getStrWidth(Cable_sz_0[item_sel]) / 2, 42, Cable_sz_0[item_sel]);
u8g.setFont(u8g_font_5x8);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 7, Confirm[0]);
u8g.drawStr(64 - u8g.getStrWidth(Confirm[CONFIRM]) / 2, 63, Confirm[1]);
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) { //ENTER button is pressed
button_enter_clicked = 1;
current_screen = 3;
if (Cable_sz_0[item_sel] == Cable_sz_0[0]) {
C_Size[0] = true;
}
else if (Cable_sz_0[item_sel] == Cable_sz_0[1]) {
C_Size[2] = true;
}
else if (Cable_sz_0[item_sel] == Cable_sz_0[2]) {
C_Size[3] = true;
}
else if (Cable_sz_0[item_sel] == Cable_sz_0[3]) {
C_Size[4] = true;
}
else if (Cable_sz_0[item_sel] == Cable_sz_0[4]) {
C_Size[5] = true;
}
else if (Cable_sz_0[item_sel] == Cable_sz_0[5]) {
C_Size[6] = true;
}
}
if ((digitalRead(BUTTON_LEFT_PIN) == LOW) && (button_left_clicked == 0)) {
current_screen --;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) { // unclick
button_enter_clicked = 0;
}
if ((digitalRead(BUTTON_LEFT_PIN) == HIGH) && (button_left_clicked == 1)) {
button_left_clicked = 0;
}
}
else if (current_screen == 17) {//final confirmation screen
switch (btype) {
case 0b100: //Btype
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_type[0]) / 2, 15, Breaker_type[0]);
breakerType = 0;
break;
case 0b010: //Ctype
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_type[1]) / 2, 15, Breaker_type[1]);
breakerType = 1;
break;
case 0b001: //Dtype
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_type[2]) / 2, 15, Breaker_type[2]);
breakerType = 2;
}
switch (brating) {
case 0b10000000: //6A
u8g.setFont(u8g_font_7x14);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_items[0]) / 2, 42, Breaker_items[0]);
breakerRating = 0;
break;
case 0b01000000: //10A
u8g.setFont(u8g_font_7x14);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_items[1]) / 2, 42, Breaker_items[1]);
breakerRating = 1;
break;
case 0b00100000: //16A
u8g.setFont(u8g_font_7x14);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_items[2]) / 2, 42, Breaker_items[2]);
breakerRating = 2;
break;
case 0b00010000: //20A
u8g.setFont(u8g_font_7x14);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_items[3]) / 2, 42, Breaker_items[3]);
breakerRating = 3;
break;
case 0b00001000: //25A
u8g.setFont(u8g_font_7x14);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_items[4]) / 2, 42, Breaker_items[4]);
breakerRating = 4;
break;
case 0b00000100: //32A
u8g.setFont(u8g_font_7x14);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_items[5]) / 2, 42, Breaker_items[5]);
breakerRating = 5;
break;
case 0b00000010: //40A
u8g.setFont(u8g_font_7x14);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_items[6]) / 2, 42, Breaker_items[6]);
breakerRating = 6;
break;
case 0b00000001: //50A
u8g.setFont(u8g_font_7x14);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_items[7]) / 2, 42, Breaker_items[7]);
breakerRating = 7;
break;
}
switch (brating1) {
case 0b10000000: //63A
u8g.setFont(u8g_font_7x14);
u8g.drawStr(32 - u8g.getStrWidth(Breaker_items[8]) / 2, 42, Breaker_items[8]);
breakerRating = 8;
break;
}
switch (csize) {
case 0b1000000: //1mm
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Cable_sz_0[0]) / 2, 64, Cable_sz_0[0]);
break;
case 0b0100000: //1.5mm
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Cable_sz_1[1]) / 2, 64, Cable_sz_1[1]);
break;
case 0b0010000: //2.5mm
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Cable_sz_0[1]) / 2, 64, Cable_sz_0[1]);
break;
case 0b0001000: //4mm
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Cable_sz_0[2]) / 2, 64, Cable_sz_0[2]);
break;
case 0b0000100: //6mm
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Cable_sz_0[3]) / 2, 64, Cable_sz_0[3]);
break;
case 0b0000010: //10mm
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Cable_sz_0[4]) / 2, 64, Cable_sz_0[4]);
break;
case 0b0000001: //16mm
u8g.setFont(u8g_font_7x14B);
u8g.drawStr(32 - u8g.getStrWidth(Cable_sz_0[5]) / 2, 64, Cable_sz_0[5]);
break;
}
u8g.setFont(u8g_font_7x14B);
u8g.setPrintPos(64, 42);
u8g.print("Confirm?");
if ((digitalRead(BUTTON_ENTER_PIN) == LOW) && (button_enter_clicked == 0)) { //ENTER button is pressed
button_enter_clicked = 1;
current_screen = 18;
}
if ((digitalRead(BUTTON_ENTER_PIN) == HIGH) && (button_enter_clicked == 1)) { // unclick
button_enter_clicked = 0;
}
}
else if (current_screen == 18) {// resistance test
u8g.setPrintPos(64, 32);
u8g.print(unknownResistance);
u8g.setPrintPos(64, 52);
u8g.print(resistanceValue);
if (unknownResistance > resistanceValue) {
u8g.setPrintPos(64,64);
u8g.print("FAIL");
}
else if (unknownResistance <= resistanceValue){
u8g.setPrintPos(64,64);
u8g.print("PASS");
}
else {
u8g.setPrintPos(64,64);
u8g.print("no resistance read");
}
}
} while (u8g.nextPage());
}