但是这个程序是Linduino平台的,这个东东咱也没用过,但是源码还是可以参考下的。
下面我们把链接上的LTC2944.h和LTC2944.cpp下载下来进行改造。
详细的改造过程省略了,对改造过程感兴趣的可以对比下下面代码和原来的代码之间的差异。
主要改造4个函数:
int8_t LTC2944_write(uint8_t i2c_address, uint8_t adc_command, uint8_t code);
int8_t LTC2944_write_16_bits(uint8_t i2c_address, uint8_t adc_command, uint16_t code);
int8_t LTC2944_read(uint8_t i2c_address, uint8_t adc_command, uint8_t *adc_code);
int8_t LTC2944_read_16_bits(uint8_t i2c_address, uint8_t adc_command, uint16_t *adc_code)
这4个函数是对总线的操作,改造内容是把I2C的操作方法改成Wire方法,其他函数基本都是内部计算函数,不用改造。其他的改造内容都是为了方便使用而改造的,包括增加一些操作函数。
直接给出改造后的源码如下。
LTC2944.h
#ifndef LTC2944_h
#define LTC2944_h
#include "Arduino.h"
#include "Wire.h"
#define I2C_ADDRESS_LTC2944 0x64
//#define I2C_ADDR_LTC2944 144
//Registers
#define LTC2944_STATUS_REG 0x00
#define LTC2944_CONTROL_REG 0x01
#define LTC2944_ACCUM_CHARGE_MSB_REG 0x02
#define LTC2944_ACCUM_CHARGE_LSB_REG 0x03
#define LTC2944_CHARGE_THRESH_HIGH_MSB_REG 0x04
#define LTC2944_CHARGE_THRESH_HIGH_LSB_REG 0x05
#define LTC2944_CHARGE_THRESH_LOW_MSB_REG 0x06
#define LTC2944_CHARGE_THRESH_LOW_LSB_REG 0x07
#define LTC2944_VOLTAGE_MSB_REG 0x08
#define LTC2944_VOLTAGE_LSB_REG 0x09
#define LTC2944_VOLTAGE_THRESH_HIGH_MSB_REG 0x0A
#define LTC2944_VOLTAGE_THRESH_HIGH_LSB_REG 0x0B
#define LTC2944_VOLTAGE_THRESH_LOW_MSB_REG 0x0C
#define LTC2944_VOLTAGE_THRESH_LOW_LSB_REG 0x0D
#define LTC2944_CURRENT_MSB_REG 0x0E
#define LTC2944_CURRENT_LSB_REG 0x0F
#define LTC2944_CURRENT_THRESH_HIGH_MSB_REG 0x10
#define LTC2944_CURRENT_THRESH_HIGH_LSB_REG 0x11
#define LTC2944_CURRENT_THRESH_LOW_MSB_REG 0x12
#define LTC2944_CURRENT_THRESH_LOW_LSB_REG 0x13
#define LTC2944_TEMPERATURE_MSB_REG 0x14
#define LTC2944_TEMPERATURE_LSB_REG 0x15
#define LTC2944_TEMPERATURE_THRESH_HIGH_REG 0x16
#define LTC2944_TEMPERATURE_THRESH_LOW_REG 0x17
// Command Codes
#define LTC2944_AUTOMATIC_MODE 0xC0
#define LTC2944_SCAN_MODE 0x80
#define LTC2944_MANUAL_MODE 0x40
#define LTC2944_SLEEP_MODE 0x00
#define LTC2944_PRESCALAR_M_1 0x00
#define LTC2944_PRESCALAR_M_4 0x08
#define LTC2944_PRESCALAR_M_16 0x10
#define LTC2944_PRESCALAR_M_64 0x18
#define LTC2944_PRESCALAR_M_256 0x20
#define LTC2944_PRESCALAR_M_1024 0x28
#define LTC2944_PRESCALAR_M_4096 0x30
#define LTC2944_PRESCALAR_M_4096_2 0x31
#define LTC2944_ALERT_MODE 0x04
#define LTC2944_CHARGE_COMPLETE_MODE 0x02
#define LTC2944_DISABLE_ALCC_PIN 0x00
#define LTC2944_SHUTDOWN_MODE 0x01
#define LTC2944_SHUTDOWN_MODE_UNDO 0x00
class I2CLTC2944
{
public:
I2CLTC2944(TwoWire * ptrI2CBus)
{
_ptrI2CBus=ptrI2CBus;
}
int8_t LTC2944_write(uint8_t i2c_address, uint8_t adc_command, uint8_t code);
int8_t LTC2944_write_16_bits(uint8_t i2c_address, uint8_t adc_command, uint16_t code);
int8_t LTC2944_read(uint8_t i2c_address, uint8_t adc_command, uint8_t *adc_code);
int8_t LTC2944_read_16_bits(uint8_t i2c_address, uint8_t adc_command, uint16_t *adc_code);
float LTC2944_code_to_coulomb