#include <Adafruit_ADS1X15.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Include NewLiquidCrystal Library for I2C
Adafruit_ADS1115 ads; //создание объекта ADS1115 с помощью библиотеки Adafruit_ADS1X15, адрес (0x48);
/* в файле библиотеки Adafruit_ADS1015.cpp найти все строчки: ADS1015_REG_CONFIG_DR_1600SPS и заменить на: ADS1015_REG_CONFIG_DR_128SPS */
LiquidCrystal_I2C lcd(0x27, 16, 2); // инициализация библиотеки LiquidCrystal если подключение по I2C
float multiplier = 0.0078125;
const int u_pogr=10; // 10 мВ - погрешность ADS1115 при измерении 5 В
const float r_ogr=100.00; // эталонное сопротивление 100 Ом
float u3300;
int u_digital;
byte n,k;
long u_sum,u_an,x;
float u_iz,rx,rx_m;
void setup(void){
lcd.init();lcd.backlight();lcd.clear();
Serial.begin(9600); // инициализация монитора порта
ads.begin(); //инициализация АЦП ADS1115
delay(1000);
}
void loop(){
while(x<50){ // цикл будет выполняться, пока значение переменной x меньше 50
x++; // увеличение значения переменной x на единицу с возвращением старого значения
ads.setGain(GAIN_TWOTHIRDS); // устанавливается коэффициент усиления 2/3 для модуля ADS1115, диапазон входного напряжения — ±6,144 В
u3300=ads.readADC_SingleEnded(2)*0.1875-u_pogr;
}
k++;
if(k==60){x=0;k=0;} // измерение напряжения 5В каждую минуту
if(n==0){ads.setGain(GAIN_SIXTEEN);multiplier = 0.0078125;} // если значение переменной n равно 0, то нужно выполнить следующие действия: установить значение усиления (gain) для переменной ads как GAIN_SIXTEEN (16-кратное усиление), а значение множителя (multiplier) установить как 0,0078125. Значение GAIN_SIXTEEN соответствует диапазону измерений +/- 0,256 В, при этом 1 бит будет равен 0,0078125 мВ.
if(u_iz>250&&n==0){n=1;}
if(n==1){ads.setGain(GAIN_EIGHT);multiplier = 0.015625;}
if(u_iz>500&&n==1){n=2;}
if(n==2){ads.setGain(GAIN_FOUR);multiplier = 0.03125;}
if(u_iz<500&&n==2){n=1;}
if(u_iz<250&&n==1){n=0;}
lcd.setCursor(1,0); //***отображение в первой строке измеренного сопротивления Rx
if(rx<1){rx_m=rx*1000;lcd.print("R = ");lcd.print(rx_m,1);lcd.print(" mOm");}
if(rx>=1&&rx<20){lcd.print("R = ");lcd.print(rx,3);lcd.print(" Om");}
if(rx>=20){lcd.print(" Rx > 20 Om ");}
//***отображение во второй строке измеренного значения в mV
lcd.setCursor(1,1);
lcd.print("U = ");
lcd.print(u3300,1);
lcd.print(" mV");
u_sum=0;
for(int i=0;i<100;i++){
u_digital = ads.readADC_Differential_0_1();
u_sum = u_sum + u_digital;
delay(1);}
u_an=u_sum/100;
u_iz=u_an * multiplier;
rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
lcd.clear();
}