1.介绍:
使用0.96寸OLED显示电池电量
2.实物效果:
3.程序:
#include <Arduino.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/14, /* data=*/2, /* reset=*/U8X8_PIN_NONE);
void setup()
{
pinMode(A0, INPUT);
u8g2.begin();
u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print() function
}
//均值采样
int average(int a)
{
int i;
int sum = 0, avg;
for (i = 0; i < 20; i++)
{
sum += a;
}
avg = sum / 20;
return avg;
}
void loop()
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.setFont(u8g2_font_wqy12_t_gb2312b); //中文字体库
int Analog_in = analogRead(A0); //采集到的模拟量
int Analog_avg = average(Analog_in); //采样均值处理
u8g2.setCursor(0, 23);
u8g2.print("模拟量:");
u8g2.setCursor(48, 23);
u8g2.print(Analog_avg); //显示端口模拟量
float V_ADC = Analog_avg * (1.0 / 1024.0); // A0端口电压,不能超过1.0V
u8g2.setCursor(0, 37);
u8g2.print("V_A0:");
u8g2.setCursor(41, 37);
u8g2.print(V_ADC, 3); //显示端口电压
float V_BAT = 6.6497 * V_ADC; //电池电压
u8g2.setCursor(0, 51);
u8g2.print("V_Bat:");
u8g2.setCursor(45, 51);
u8g2.print(V_BAT, 3); //显示端口电压
int val = map(V_BAT, 0, 5.104, 0, 100); //电压映射
u8g2.drawRFrame(110, 1, 17, 11, 3); //绘制空心圆角矩形
u8g2.setCursor(100, 11);
u8g2.print("%");
u8g2.setCursor(85, 11);
u8g2.print(val); //显示电量百分比
int pixelnum = V_BAT / 0.33; //电池能级划分,当满电为5V时,分为15个能级
if (pixelnum < 1)
{
pixelnum = 0;
}
else if (pixelnum > 14)
{
pixelnum = 15;
}
int i;
for (i = 0; i < pixelnum; i++)
{
u8g2.drawVLine(126 - i, 1, 11);
}
u8g2.sendBuffer();
delay(1000);
}