#include ADS1115_WEh uint16_t voltageRange; ADS1115_MEASURE_MODE deviceMeasureMode; int i2cAddress =0x481; int autoRangeMode; 输入值分别是:输入值输入最小值输入最大值输出最小值输出最大值float mapfloat val float I_Mi
#include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <linux/i2c-dev.h> #include <sys/ioctl.h>
#define ADS1115_CONFIG_REG 0x01 #define ADS1115_LO_THRESH_REG 0x02 #define ADS1115_HI_THRESH_REG 0x03 #define ADS1115_CONV_REG 0x00 #define ADS1115_REG_RESET_VAL 0x8583 #define ADS1115_RANGE_6144 0x0000 #define ADS1115_RANGE_4096 0x2000 #define ADS1115_RANGE_2048 0x4000 #define ADS1115_RANGE_1024 0x6000 #define ADS1115_RANGE_0512 0x8000 #define ADS1115_RANGE_0256 0xA000 #define ADS1115_CONV_RATE 0x00E0
int i2cFile;
void ADS1115_setADDR(int addr) { i2cFile = open("/dev/i2c-1", O_RDWR); ioctl(i2cFile, I2C_SLAVE, addr); }
void ADS1115_reset(void) { uint8_t val[2] = {0x06, 0x00}; write(i2cFile, val, 2); usleep(5000); }
void ADS1115_init(void) { ADS1115_writeRegister(ADS1115_CONFIG_REG, ADS1115_REG_RESET_VAL); ADS1115_setVoltageRange_mV(ADS1115_RANGE_2048); ADS1115_writeRegister(ADS1115_LO_THRESH_REG, 0x8000); ADS1115_writeRegister(ADS1115_HI_THRESH_REG, 0x7FFF); }
void ADS1115_setVoltageRange_mV(uint16_t range) { uint16_t currentConfReg = ADS1115_readRegister(ADS1115_CONFIG_REG); currentConfReg &= ~(0x8E00); currentConfReg |= range; ADS1115_writeRegister(ADS1115_CONFIG_REG, currentConfReg); }
void ADS1115_setConvRate(uint16_t rate) { uint16_t currentConfReg = ADS1115_readRegister(ADS1115_CONFIG_REG); currentConfReg &= ~(0x80E0); currentConfReg |= rate; ADS1115_writeRegister(ADS1115_CONFIG_REG, currentConfReg); }
void ADS1115_setMeasureMode(uint16_t mode) { uint16_t currentConfReg = ADS1115_readRegister(ADS1115_CONFIG_REG); currentConfReg &= ~(0x8100); currentConfReg |= mode; ADS1115_writeRegister(ADS1115_CONFIG_REG, currentConfReg); }
void ADS1115_setCompareChannels(uint16_t mux) { uint16_t currentConfReg = ADS1115_readRegister(ADS1115_CONFIG_REG); currentConfReg &= ~(0xF000); currentConfReg |= mux; ADS1115_writeRegister(ADS1115_CONFIG_REG, currentConfReg); }
int16_t ADS1115_readRegister(uint8_t reg) { uint8_t buf[2] = {reg, 0x00}; write(i2cFile, buf, 1); usleep(5000); read(i2cFile, buf, 2); return (buf[0] << 8) | buf[1]; }
void ADS1115_writeRegister(uint8_t reg, uint16_t val) { uint8_t buf[3] = {reg, val >> 8, val & 0xFF}; write(i2cFile, buf, 3); usleep(5000); }
float ADS1115_getResult_mV(void) { int16_t rawResult = ADS1115_readRegister(ADS1115_CONV_REG); float result = (rawResult * 1.0 / 32767) * 2048; // Assuming voltage range is 2048 mV return result; }
int main() { int addr = 0x48; ADS1115_setADDR(addr); ADS1115_reset(); ADS1115_init(); ADS111
原文地址: https://www.cveoy.top/t/topic/hJYh 著作权归作者所有。请勿转载和采集!