#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);
typedef struct _gaugebuf{
int px1, py1;
int px2, py2;
int angle;
double rad;
char ch[3];
int val;
} gauge;
typedef struct _aph{
int aph;
int bank;
} alpha;
alpha a;
gauge eng;
gauge bat;
const int circle = 10; // px1, py1을 기준으로 큰 원을 63으로 설정
const int pin = 10; // 바늘침 크기 설정
void setup(void) {
eng.px1 = 10;
eng.py1 = 10;
bat.px1 = 40;
bat.py1 = 10;
}
void Disp()
{
int circh;
char bk[4];
eng.angle = map(eng.val, 0, 100, 180, 360);
eng.rad = eng.angle * 3.14 / 180;
eng.px2 = eng.px1+(cos(eng.rad)*pin);
eng.py2 = eng.py1+(sin(eng.rad)*pin);
itoa(eng.val, eng.ch, 10);
bat.angle = map(bat.val, 0, 100, 180, 360);
bat.rad = bat.angle * 3.14 / 180;
bat.px2 = bat.px1+(cos(bat.rad)*pin);
bat.py2 = bat.py1+(sin(bat.rad)*pin);
itoa(bat.val, bat.ch, 10);
if(a.aph >= -60 && a.aph <= 60){
circh = map(a.aph, 60, -60, 3, 25);
} else if(a.aph > 60){
circh = 2;
} else if(a.aph < -60){
circh = 26;
} else {
circh = 13;
}
u8g.firstPage();
do {
u8g.drawCircle(eng.px1, eng.py1, circle, U8G_DRAW_UPPER_RIGHT);
u8g.drawCircle(eng.px1, eng.py1, circle, U8G_DRAW_UPPER_LEFT);
u8g.drawLine(eng.px1, eng.py1, eng.px2, eng.py2);
u8g.setFont(u8g_font_5x7);
u8g.drawStr(4, 20, "ENG");
u8g.drawStr(4, 28, eng.ch);
u8g.drawStr(14, 28, "%");
u8g.drawCircle(bat.px1, bat.py1, circle, U8G_DRAW_UPPER_RIGHT);
u8g.drawCircle(bat.px1, bat.py1, circle, U8G_DRAW_UPPER_LEFT);
u8g.drawLine(bat.px1, bat.py1, bat.px2, bat.py2);
u8g.setFont(u8g_font_5x7);
u8g.drawStr(4+(bat.px1-eng.px1), 20, "BAT");
u8g.drawStr(4+(bat.px1-eng.px1), 28, bat.ch);
u8g.drawStr(14+(bat.px1-eng.px1), 28, "%");
// alpha indicator
u8g.drawLine(60, 3, 90, 3);
u8g.drawLine(60, 8, 90, 8);
u8g.drawLine(60, 13, 90, 13);
u8g.drawLine(60, 18, 90, 18);
u8g.drawLine(60, 23, 90, 23);
u8g.drawLine(70, 0, 75, 5);
u8g.drawLine(75, 5, 80, 0);
u8g.drawLine(70, 26, 75, 21);
u8g.drawLine(75, 21, 80, 26);
u8g.setFont(u8g_font_u8glib_4);
// u8g.setFont(u8g_font_04b_03);
u8g.drawStr(93, 6, "6");
u8g.drawStr(93, 11, "3");
u8g.drawStr(93, 16, "0");
u8g.drawStr(93, 21, "3");
u8g.drawStr(93, 26, "6");
//draw figure
u8g.setFont(u8g_font_5x7);
u8g.drawCircle(75, circh, 2);
u8g.drawStr(105, 7, "BANK");
u8g.drawStr(105, 17, bk);
u8g.drawStr(125, 17, "\'");
}
while( u8g.nextPage() );
}
void loop(void)
{
for(int i = 1; i <= 100; i++){
a.aph = map(i, 0, 100, 0, 180) - 90;
a.bank = map(i, 0, 100, 0, 360) - 180;
eng.val = i;
bat.val = i;
Disp();
delay(10);
}
delay(50);
}