該範例使用UNO透過I2C連接兩片ADS1115量測電壓
分別為ADDRESS(0x48)使用單點量測模式
另一個為ADDRESS(0x49)使用差動(浮動)電壓量測模式
首先有兩件事情要思考一個是位址一個是電壓的最小分辨率
如果不知道位址,黨你要控制兩個以上的ADS1115的時候就會不知道要跟哪一片溝通了
而最小分辨率則是會隨著你所選用的刻度而有不同的量測範圍
下面是ADS1115的I2C位址
下面是電壓最小分辨率,請依照你要量測的電壓決定你的刻度
GAIN_TWOTHIRDS // 2/3x gain +/- 6.144V 1 bit = 3mV 0.1875mV (預設模式)
GAIN_ONE // 1x gain +/- 4.096V 1 bit = 2mV 0.125mV
GAIN_TWO // 2x gain +/- 2.048V 1 bit = 1mV 0.0625mV
GAIN_FOUR // 4x gain +/- 1.024V 1 bit = 0.5mV 0.03125mV
GAIN_EIGHT // 8x gain +/- 0.512V 1 bit = 0.25mV 0.015625mV
GAIN_SIXTEEN // 16x gain +/- 0.256V 1 bit = 0.125mV 0.0078125mV
下圖為四個全接的接線圖,由上往下數的兩個就是0x48 跟 0x49 , 也就是待會範例會用到的
程式碼 :
#include <Wire.h>
#include <Adafruit_ADS1015.h> //加载ADS1015/ADS1115库
Adafruit_ADS1115 ads48(0x48); //声明一个ads对象,设置模块地址
Adafruit_ADS1115 ads49(0x49); //声明一个ads对象,设置模块地址
int16_t adc0;
float voltage0;
int16_t adc1;
float voltage1;
int16_t adc2;
float voltage2;
int16_t adc3;
float voltage3;
int16_t adc4;
float voltage4;
int16_t adc5;
float voltage5;
float Scalevoltage = 0.0001875;
/*
ads.setGain(GAIN_TWOTHIRDS); // 2/3x gain +/- 6.144V 1 bit = 3mV 0.1875mV (default)
ads.setGain(GAIN_ONE); // 1x gain +/- 4.096V 1 bit = 2mV 0.125mV
ads.setGain(GAIN_TWO); // 2x gain +/- 2.048V 1 bit = 1mV 0.0625mV
ads.setGain(GAIN_FOUR); // 4x gain +/- 1.024V 1 bit = 0.5mV 0.03125mV
ads.setGain(GAIN_EIGHT); // 8x gain +/- 0.512V 1 bit = 0.25mV 0.015625mV
ads.setGain(GAIN_SIXTEEN); // 16x gain +/- 0.256V 1 bit = 0.125mV 0.0078125mV
*/
void setup() {
Serial.begin(115200);
ads48.setGain(GAIN_TWOTHIRDS); //刻度選擇
ads49.setGain(GAIN_TWOTHIRDS); //刻度選擇
ads48.begin();
ads49.begin();
}
void loop() {
//I2C ADDRESS 0X48
adc0 = ads48.readADC_SingleEnded(0); //點到GND的電壓
voltage0 = (adc0 * Scalevoltage); //A0讀到的類比值*解析度能量測到的最小電壓等於量測電壓
adc1 = ads48.readADC_SingleEnded(1); //點到GND的電壓
voltage1 = (adc1 * Scalevoltage); //A1讀到的類比值*解析度能量測到的最小電壓等於量測電壓
adc2 = ads48.readADC_SingleEnded(2); //點到GND的電壓
voltage2 = (adc2 * Scalevoltage); //A2讀到的類比值*解析度能量測到的最小電壓等於量測電壓
adc3 = ads48.readADC_SingleEnded(3); //點到GND的電壓
voltage3 = (adc3 * Scalevoltage); //A3讀到的類比值*解析度能量測到的最小電壓等於量測電壓
//I2C ADDRESS 0X49
adc4 = ads49.readADC_Differential_0_1();//A0-A1之間的浮動電壓
voltage4 = (adc4 * Scalevoltage);
adc5 = ads49.readADC_Differential_2_3();////A2-A3之間的浮動電壓
voltage5 = (adc5 * Scalevoltage);
Serial.print("v0: ");
Serial.println(voltage0);
Serial.print("v1: ");
Serial.println(voltage1);
Serial.print("v2: ");
Serial.println(voltage2);
Serial.print("v3: ");
Serial.println(voltage3);
Serial.print("v4: ");
Serial.println(voltage4);
Serial.print("v5: ");
Serial.println(voltage5);
delay(1000);
}