#include <U8g2lib.h>
#include <Wire.h>
short x ,x_targ;
short y=8,y_targ=8;
int state;
typedef struct
{
byte val ;
byte last_val;
}KEY_T;
KEY_T key[2]={0};
typedef struct
{
byte id;
byte press;
byte update_flag;
byte res;
}KEY_MSG;
KEY_MSG key_msg={0};
byte get_io_val(byte ch)
{
if(ch==0)
{
return digitalRead(2);
}
else
{
return digitalRead(4);
}
}
void key_init(void)
{
for(int i=0; i<2;i++)
{
key[i].val=key[i].last_val=get_io_val(i);
}
}
void key_scan(void)
{
for(int i=0;i<2;i++)
{
key[i].val=get_io_val(i);
if(key[i].val!=key[i].last_val)
{
key[i].last_val=key[i].val;
if(key[i].val==0)
{
key_msg.id=i;
key_msg.press=1;
key_msg.update_flag=1;
}
}
}
}
int ui_run(short *a,short *a_targ){
if(*a<*a_targ){
*a+=1;
}
else if(*a>*a_targ){
*a-=1;
}
else{
return 0;
}
return 1;
}
typedef struct{
char* str;
}SETTING_LIST;
SETTING_LIST list[]={
{"listA"},
{"listB"},
{"listC"},
};
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void show_ui(void)
{
int list_len =sizeof(list)/sizeof(SETTING_LIST);
u8g2.clearBuffer();
for(int i=0;i<list_len;i++){
//u8g2.drawStr(x,y,list[i].str);
u8g2.drawStr(x,y+i*16,list[i].str);
}
ui_run(&y,&y_targ) ;
u8g2.sendBuffer();
}
void ui_proc(void)
{
if(key_msg.update_flag && key_msg.press)
{
key_msg.update_flag=0;
if(key_msg.id)
{
y_targ += 10;
}
else
{
y_targ -= 10;
}
}
show_ui();
}
void setup() {
// put your setup code here, to run once:
pinMode(2, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.begin();
//u8g2.enableUTF8Print();
y_targ=8;
//u8g2.setCursor(0, 48);
}
void loop() {
// put your main code here, to run repeatedly:
key_scan();
ui_proc();
}