cw2015 arduino esp32程序

news/2024/11/24 20:55:43/

CW2015是一款超紧凑、低成本电量计IC,适用于手持式和便携式设备中的锂离子(Li+)电池。

cw2015.cpp

#include "cw2015.h"CW2015::CW2015(TwoWire *pWire)
{_pWire = pWire;
}void CW2015::initCW2015(void)//初始化IIC
{_pWire->begin();
}uint16_t CW2015::readAnalogVoltage(void)//读取adc量化数据14Bit
{uint16_t AnalogVoltage=0x0000;_pWire->beginTransmission(CW_ADDR);_pWire->write(CW_VCELL);_pWire->endTransmission();_pWire->requestFrom(CW_ADDR, (uint8_t)2);AnalogVoltage = _pWire->read();AnalogVoltage<<=8;AnalogVoltage += _pWire->read();return (AnalogVoltage&0x3fff);
}
float CW2015::readBatVoltage(void)//电压
{float Voltage=0.0;uint16_t AnalogVoltage;AnalogVoltage=readAnalogVoltage();Voltage=AnalogVoltage*0.000305;return (Voltage);
}
uint8_t CW2015::readBatQuantityLowPre(void)//读取电量,低精度1%
{uint8_t BatQuantity = readRegister(CW_SOC);return (BatQuantity);
}
float CW2015::readBatQuantityHighPre(void)//读取电量,高精度1/256%
{float BatQuantity=0.0;uint8_t BatQuantityH = readRegister(CW_SOC);uint8_t BatQuantityL = readRegister(CW_SOC+1);BatQuantity=BatQuantityH+BatQuantityL/256.0;return (BatQuantity);
}
void CW2015::checkCW2015(void)//读版本寄存器,对比版本号
{byte check;check=readRegister(CW_VERSION);if(check!=0x70)Serial.println("cw2015 error!");//版本可能会有所不同else Serial.println("cw2015 ok!");
}
void CW2015::setSleep(void)//进入睡眠模式
{writeRegister(0xc0,CW_MODE);
}
void CW2015::wakeUp(void)//从睡眠模式中唤醒
{writeRegister(0x00,CW_MODE);
}
void CW2015::quickStart(void)//快速启动
{writeRegister(0x30,CW_MODE);
}
void CW2015::powerReset(void)//电源复位
{writeRegister(0x0f,CW_MODE);
}
byte CW2015::readRegister(byte reg)//读寄存器,单字节
{byte rdat;_pWire->beginTransmission(CW_ADDR);_pWire->write(reg);_pWire->endTransmission();_pWire->requestFrom(CW_ADDR, (uint8_t)1);rdat = _pWire->read();return (rdat);
}void CW2015::writeRegister(byte val,byte reg)//写寄存器,单字节
{_pWire->beginTransmission(CW_ADDR);_pWire->write(reg);_pWire->write(val);_pWire->endTransmission();
}

cw2015.h

#ifndef __CW2015_H__
#define __CW2015_H__#include <Arduino.h>
#include <Wire.h>#define CW_ADDR       0X62
#define CW_VERSION    0x00
#define CW_VCELL      0x02
#define CW_SOC        0x04
#define CW_RRT_ALET   0x06
#define CW_CONFIG     0x08
#define CW_MODE       0x0a
class CW2015
{
public:CW2015(TwoWire *pWire=&Wire);void initCW2015(void);uint16_t readAnalogVoltage(void);uint8_t readBatQuantityLowPre(void);//低精度%1float readBatQuantityHighPre(void);//高精度1/256%float readBatVoltage(void);//电压void checkCW2015(void);void setSleep(void);void wakeUp(void);void quickStart(void);void powerReset(void);protected:byte readRegister(byte reg);void writeRegister(byte val,byte reg);private:uint8_t _addr;   // I2C communication address of CW2015TwoWire *_pWire;   // The pointer to I2C communication method
};#endif

示例

芯片上电默认进入睡眠模式,需要唤醒才能读取数据。


#include "cw2015.h"/*** Hardware Connections:* -VCC = 3.3V* -GND = GND* -SDA = 18 (use inline 330 ohm resistor if your board is 5V)* -SCL = 23 (use inline 330 ohm resistor if your board is 5V)*/
TwoWire I2Cone = TwoWire(0);
CW2015 cw2015(&I2Cone);void setup()
{Serial.begin(115200);pinMode(22, INPUT);I2Cone.begin(18,23, 400000UL);   //SDA0,SCL0cw2015.initCW2015();delay(100);Serial.println("Sensor init finish!");//cw_2015.powerReset();cw2015.wakeUp();delay(100);//cw2015.checkCW2015();
}void loop()
{float val = cw2015.readBatVoltage();uint8_t eleq = cw2015.readBatQuantityLowPre();Serial.print("Time:");Serial.print(millis());   // Get the system time from ArduinoSerial.print(" val:");Serial.print(val, 1);   // Only print one decimal placeSerial.print("V");Serial.print(" eleq:");Serial.print(eleq);   // Only print one decimal placeSerial.print("%");Serial.println();delay(1000);
}

http://www.ppmy.cn/news/520199.html

相关文章

cw脉冲matlab产生,CW脉冲和LFM信号Matlab仿真.pdf

CW脉冲和LFM信号Matlab仿真.pdf 一 CW信号 一、程序 t-0.05:0.0001:0.05; f01000; k25000; s cos(2.*pi.*f0.*t); nwgn(1,1001,2); s1sn; h cos(2.*pi.*f0.*(-t)); c1conv(s,h); c2conv(s1,h); figure(1); plot(n); figure(2); plot(s); figure(3); plot(c1); figure(4); plot(…

利用计算机进行CW收发报的技术,让你成为CW高手

作者:BD4RFK 使用的是最新版本软件: 这是俄罗斯HAM UA9OV编写的软件,软件体积小巧,短小精悍。(如有需要留下E-mail我会发给你) CwGet v1.5 CwType v1.36 CwGet v1.45特别版 下载本软件请到我的网络硬盘下载 软件安装完毕之后,同时打开接收和编码两部分。 软件CwType默认安…

Qt编写跨平台的推流工具(支持win/linux/mac/嵌入式linux/安卓等)

一、前言 跨平台的推流工具当属OBS最牛逼&#xff0c;功能也是最强大的&#xff0c;唯一的遗憾就是多路推流需要用到插件&#xff0c;而且CPU占用比较高&#xff0c;默认OBS的规则是将对应画布中的视频画面和设定的音频一起重新编码再推流&#xff0c;意味着肯定占用不少CPU资…

leetcode416. 分割等和子集(动态规划-java)

分割等和子集 leetcode416. 分割等和子集题目描述 暴力递归代码演示 动态规划解题思路代码演示 动态规划专题 leetcode416. 分割等和子集 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/partition-equal-subset-sum 题目…

0325心得体会

上午学习了 table标签下的 cellspacing\cellpaddingimg标签的三个属性 src alt title 下午接着学了超链接 a标签 它的绝对路径 相对路径 锚点链接总体来说今天的学习收获还是可以的&#xff0c;自己还是需要多练习代码 及难点 易混淆 <table border"1px" width&qu…

中国互联网创业工具库Startup Tools

http://hi.baidu.com/longniao/item/39f13c31084ecdb9633aff81 中国互联网创业工具库Startup Tools 一、第三方创业投资服务平台 1、科技及投资类媒体&#xff08;原创类文章为主&#xff09; 36氪&#xff0c;http://www.36kr.com/ 银海网&#xff0c;http://www.inhai.com/ …

敏捷:从卖皮肤到融入血液

一块死去的敏捷看板 这篇文章&#xff0c;通过一些职场碎片记忆&#xff0c;讲述了我如何从狂热的Agile布道师&#xff0c;转变成一个想从心底抹去Agile烙印的生意人。 Take an economic view 1 这周&#xff0c;在朋友圈看到自己3年前在H公司的照片&#xff0c;颇为感慨。 当时…

【算法】Mice and Cheese 老鼠和奶酪 Greedy

文章目录 Mice and Cheese 老鼠和奶酪问题描述&#xff1a;分析代码 Tag Mice and Cheese 老鼠和奶酪 问题描述&#xff1a; 有两只老鼠和 n 块不同类型的奶酪&#xff0c;每块奶酪都只能被其中一只老鼠吃掉。 下标为 i 处的奶酪被吃掉的得分为&#xff1a; 如果第一只老鼠…