#include <U8glib.h>
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
char str3[15];
enum states
{
idle = 0, // idle == out of menu
select, // 選擇要設定的值
set_target_distance, // 目標距離
set_target_error, // 目標誤差
set_measure_time, // 測量時間
set_cal_min_distance, // 校正真實最小距離
set_cal_max_distance, // 校正真實最大距離
set_save_flag, // 是否儲存
num_states
};
void drawCenteredString(const char *str, int y)
{
int strWidth = u8g.getStrWidth(str);
int startX = (128 - strWidth) / 2;
u8g.drawStr(startX, y, str);
}
void setup(void)
{
//Set font.
u8g.setFont(u8g_font_unifont);
pinMode(12, INPUT);
Serial.begin(9600);
}
void loop(void)
{
u8g.firstPage();
do {
draw();
} while (u8g.nextPage());
}
states set_select_state = set_save_flag;
void draw(void)
{
#if 0
u8g.setFont(u8g_font_unifont);
drawCenteredString("---Select Menu---", 10);
u8g.setFont(u8g_font_helvR18);
switch (set_select_state)
{
case set_target_distance:
drawCenteredString("Target", 40);
drawCenteredString("Distance", 64);
break;
case set_target_error:
drawCenteredString("Target", 40);
drawCenteredString("Error", 64);
break;
case set_measure_time:
drawCenteredString("Measure", 40);
drawCenteredString("Time", 64);
break;
case set_cal_min_distance:
drawCenteredString("Cal Min", 40);
drawCenteredString("Distance", 64);
break;
case set_cal_max_distance:
drawCenteredString("Cal Max", 40);
drawCenteredString("Distance", 64);
break;
case set_save_flag:
drawCenteredString("Save Data", 40);
break;
}
#endif
#if 0
float target_distance = -80.0;
u8g.setFont(u8g_font_helvB08);
drawCenteredString("1.target_distance", 10);
u8g.setFont(u8g_font_helvR24);
if (target_distance > 85.0)
{
target_distance = 85.0;
}
else if (target_distance < -85.0)
{
target_distance = -85.0;
}
dtostrf(target_distance, 3, 1, str3);
drawCenteredString(str3, 40);
drawCenteredString("mm", 64);
#endif
#if 0
float target_error = 0.0;
u8g.setFont(u8g_font_helvB08); // 8 pixel 粗
drawCenteredString("2.target_error", 10);
u8g.setFont(u8g_font_helvR24); // 10 pixel
if (target_error > 85.0)
{
target_error = 85.0;
}
if (target_error <= 0.0)
{
target_error = 0.0;
}
dtostrf(target_error, 3, 1, str3);
char str4[15];
sprintf(str4, "+/-%s", str3);
drawCenteredString(str4, 40);
drawCenteredString("mm", 64);
#endif
#if 1
long measure_time = 0x98961C;
if (measure_time <= 500)
{
measure_time = 500;
}
char buffer[10];
snprintf(buffer, sizeof(buffer), "%ld", measure_time);
u8g.firstPage();
do
{
u8g.setFont(u8g_font_helvB08);
drawCenteredString("3.measure_time", 10);
u8g.setFont(u8g_font_helvR24);
drawCenteredString(buffer, 40);
drawCenteredString("ms", 64);
} while (u8g.nextPage());
#endif
#if 0
float cal_min_distance = 80.0;
u8g.firstPage();
do
{
u8g.setFont(u8g_font_helvB08); // 8 pixel 粗
drawCenteredString("4.cal_min_distance", 10);
u8g.setFont(u8g_font_helvR24);
dtostrf(cal_min_distance, 3, 1, str3);
drawCenteredString(str3, 40);
drawCenteredString("mm", 64);
} while (u8g.nextPage());
#endif
#if 0
float cal_max_distance = -80.0;
u8g.firstPage();
do
{
u8g.setFont(u8g_font_helvB08); // 8 pixel 粗
drawCenteredString("5.cal_max_distance", 10);
u8g.setFont(u8g_font_helvR24);
dtostrf(cal_max_distance, 3, 1, str3);
drawCenteredString(str3, 40);
drawCenteredString("mm", 64);
} while (u8g.nextPage());
#endif
#if 0
bool save_flag = false;
u8g.firstPage();
do
{
u8g.setFont(u8g_font_helvB08); // 8 pixel 粗
drawCenteredString("6.save_flag", 10);
u8g.setFont(u8g_font_helvR24);
if (save_flag)
{
drawCenteredString("ON", 64);
}
else
{
drawCenteredString("OFF", 64);
}
} while (u8g.nextPage());
#endif
#if 0
bool start_detect_process = false;
float Now_Distance = 0.0;
u8g.firstPage();
do
{
u8g.setFont(u8g_font_unifont); // 10 pixel
if (start_detect_process)
{
u8g.drawStr(8, 10, "Raser Detecting");
}
else
{
u8g.drawStr(8, 10, "Raser Distance");
}
u8g.setFont(u8g_font_helvR24);
if (Now_Distance > 80.0 || Now_Distance < -80.0)
{
drawCenteredString("N/A", 40);
}
else
{
dtostrf(Now_Distance, 3, 1, str3);
drawCenteredString(str3, 40);
}
u8g.drawStr(37, 64, "mm");
} while (u8g.nextPage());
#endif
}