OLED屏显示电池电量设计

该博客介绍了一个Arduino项目,通过0.96寸OLED显示器实时显示电池电量。程序首先读取A0端口的模拟值,经过平均处理后计算电池电压,并将结果显示在显示屏上。此外,它还使用电压映射来显示电池电量的百分比,并通过绘制不同数量的竖线来直观表示电量状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值