101

Re: Миллиомметр 0 — 20 Ом (Arduino)

Подскажите такой скетч подойдёт.

#include <EEPROM.h>              // импортируем библиотеку
int address;                     // переменная для хранения адреса

void setup() {
                                // перезаписываем в цикле все адреса в ЕЕПРОМ памяти
while (address < EEPROM.length()) {
EEPROM.update(address, 255);
address++;
}
}
void loop() {
}

102

Re: Миллиомметр 0 — 20 Ом (Arduino)

Добавьте паузу в основной цикл loop()

lcd.clear();           
}


>>>


lcd.clear();           
delay(50);
}

103

Re: Миллиомметр 0 — 20 Ом (Arduino)

Таким образом?

#include <EEPROM.h>              // импортируем библиотеку
int address;                     // переменная для хранения адреса

void setup() {
                                // перезаписываем в цикле все адреса в ЕЕПРОМ памяти
while (address < EEPROM.length()) {
EEPROM.update(address, 255);
address++;
}
}
void loop() {
lcd.clear();           
delay(50);
}

104

Re: Миллиомметр 0 — 20 Ом (Arduino)

Нет, в основной скетч.

105

Re: Миллиомметр 0 — 20 Ом (Arduino)

Добавил, но ничего не изменилось. Так же на дисплее набор различных символов.

lcd.setCursor(1,1);
lcd.print("U = ");
lcd.print(u3300,1);
lcd.print(" mV");
u_sum=0;
for(int i=0;i<100;i++){                       // измерение, цикл, который будет выполняться 100 раз, а затем останавливаться.
u_digital = ads.readADC_Differential_0_1(); 	// измерение значения АЦП (аналого-цифрового преобразователя) на канале 0–1 с помощью функции readADC_Differential_0_1(); измеряет разницу напряжений между входами P (AIN0) и N (AIN1)
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();			// стереть данные экрана
delay(50);          //***изменение
}

106

Re: Миллиомметр 0 — 20 Ом (Arduino)

#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();      
}

107

Re: Миллиомметр 0 — 20 Ом (Arduino)

Информация на дисплее отображается как положено. Всё отлично работает. Громадное спасибо за помощь в решении возникшей проблемы