#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
//display.drawRect(x, y, x1, y1, SSD1306_WHITE);
struct st_menu {
char name[15];
uint16_t val;
};
class Menu {
private:
st_menu (*_p);
byte _len; // points len!!
byte _st=1; // start point render
byte _sp; // stop point render
byte _x=0;
byte _y=0;
byte _target[2] = {1,0};
public:
Menu(st_menu (*p), byte len){
_len = len;
if(_len>5){
_sp = 5;
} else {
_sp = _len;
}
_p = p;
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// display.setCursor(_x,_y);
};
void render(){
display.clearDisplay();
display.setCursor(_x=10,_y=0);
display.print(_p[0].name);
display.setCursor(_x=2,_y=12);
display.drawFastHLine(0,8,128,SSD1306_WHITE);
if(_target[0]>0){
display.drawRect(0, (_target[0]*10), 87, 11, SSD1306_WHITE);
} else {
display.drawRect(94, (_target[1]*10), 33, 11, SSD1306_WHITE);
}
_p[4].val++;//test!!!!
_p[3].val = _sp;//test!!!!
for(byte i=_st; i<=_sp; i++){
// if(_p[i].name[0] == 0) break;
display.print(_p[i].name);
display.setCursor(_x+=94,_y);
display.print(_p[i].val);
display.setCursor(_x=2,_y+=10);
}
display.display();
};
void up(){ // test!!!!!!
if(_target[0]!=1){
_target[0]--;
} else if(_st==1){
_sp=_len;
if(_len>5){
_target[0]=5;
_st=_len-4;
} else {
_target[0]=_len;
_st=1;
}
} else {
_st--;
_sp--;
}
Menu::render();
};
void down(){ // test!!!!!!
if(_target[0]!=5 && _target[0]!=_len){
_target[0]++;
} else if(_sp==_len){
_target[0]=1;
if(_len>5){
_st=1;
_sp=5;
}
} else {
_st++;
_sp++;
}
Menu::render();
};
};
//================================
st_menu s_menu[]{
{"NAME MENU", 0},
{"Point 1", 1},
{"Point 2", 2},
{"Point TESTtest", 65535},
{"iters", 0},
{"PIPE ID", 12345},
{"hren`--1111111",10101},
{"hren`--2222222",20202},
{"hren`--3333333",30303},
};
Menu menu(s_menu, 8);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3c);
display.clearDisplay();
// menu.render();
// display.setTextSize(1);
// display.setTextColor(SSD1306_WHITE);
// display.setCursor(0,0);
// for(byte i=0; i<8; i++){
// display.println(F("000000000000000000000"));
// }
// display.display();
}
void loop() {
menu.render();
delay(300);
for(byte i=0; i<7; i++){
menu.down();
delay(300);
}
delay(500);
for(byte i=0; i<9; i++){
menu.up();
delay(300);
}
}