Найти дельту изменяющейся переменной

22580
Offline
Зарегистрирован: 20.09.2016

Всем привет, есть переменная типа float. она постоянно изменяется в небоьших пределах. Задача найти дельту изменения этой переменной. Вот такую конструкцию написал,но она не работает по понтятным причинам, мы же произвелии одно измерение, дельты никакой не будет.. Помогите реализовать, пожалуйста

#include <Wire.h>
#include <Adafruit_ADS1015.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
Adafruit_ADS1115 ads(0x48);
float Voltage0;
double sensorValue = 0;
double outputValue = 0;
double outputValue_min = 0;
double outputValue_max = 0;
double delta = 0;
void setup() {
  Serial.begin(9600);
  Wire.begin();
  ads.begin();
  lcd.init();
  lcd.backlight();
}

void loop() {
  int16_t adc0;
  adc0 = ads.readADC_SingleEnded(0);
  sensorValue = adc0 * 0.1875;
  if (sensorValue > outputValue_max) outputValue_max = sensorValue;
  if (sensorValue < outputValue_min) outputValue_min = sensorValue;
  delta = outputValue_max - outputValue_min;
  Serial.println(delta);
  lcd.setCursor(0, 0);
  lcd.print(sensorValue);
    delay(10);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

почему одно измерение? - оно же у вас в лупе - значит будет мерить, пока не остановаите.

vvadim
Offline
Зарегистрирован: 23.05.2012

производите два измерения через какой то промежуток времени и считайте дельту.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
#include <Wire.h>
#include <Adafruit_ADS1015.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
Adafruit_ADS1115 ads(0x48);
float Voltage0;
double sensorValue = 0;
double outputValue = 0;
double outputValue_min = 0;
double outputValue_max = 0;
double delta = 0;
void setup() {
  Serial.begin(9600);
  Wire.begin();
  ads.begin();
  lcd.init();
  lcd.backlight();
  // а это А.С.Пушкин потерял
  int16_t adc0;
  adc0 = ads.readADC_SingleEnded(0);
  outputValue_max = outputValue_min= adc0 * 0.1875;
}

void loop() {
  int16_t adc0;
  adc0 = ads.readADC_SingleEnded(0);
  sensorValue = adc0 * 0.1875;
  if (sensorValue > outputValue_max) outputValue_max = sensorValue;
  if (sensorValue < outputValue_min) outputValue_min = sensorValue;
  delta = outputValue_max - outputValue_min;
  Serial.println(delta);
  lcd.setCursor(0, 0);
  lcd.print(sensorValue);
  delay(10);
}

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

qwone пишет:

#include <Wire.h>
#include <Adafruit_ADS1015.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
Adafruit_ADS1115 ads(0x48);
float Voltage0;
double sensorValue = 0;
double outputValue = 0;
double outputValue_min = 0;
double outputValue_max = 0;
double delta = 0;
void setup() {
  Serial.begin(9600);
  Wire.begin();
  ads.begin();
  lcd.init();
  lcd.backlight();
  // а это А.С.Пушкин потерял
  int16_t adc0;
  adc0 = ads.readADC_SingleEnded(0);
  outputValue_max = outputValue_min= adc0 * 0.1875;
}

void loop() {
  int16_t adc0;
  adc0 = ads.readADC_SingleEnded(0);
  sensorValue = adc0 * 0.1875;
  if (sensorValue > outputValue_max) outputValue_max = sensorValue;
  if (sensorValue < outputValue_min) outputValue_min = sensorValue;
  delta = outputValue_max - outputValue_min;
  Serial.println(delta);
  lcd.setCursor(0, 0);
  lcd.print(sensorValue);
  delay(10);
}

 

Ну тогда уже по логике:


#include <Wire.h>
#include <Adafruit_ADS1015.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
Adafruit_ADS1115 ads(0x48);
float Voltage0;
double sensorValue = 0;
double outputValue = 0;
double outputValue_min = 0;
double outputValue_max = 0;
double delta = 0;
void setup() {
  Serial.begin(9600);
  Wire.begin();
  ads.begin();
  lcd.init();
  lcd.backlight();
  // а это А.С.Пушкин потерял
  int16_t adc0;
  adc0 = ads.readADC_SingleEnded(0);
  outputValue_max = outputValue_min= adc0 * 0.1875;
//Тута
 delay(10);
}

void loop() {
  int16_t adc0;
  adc0 = ads.readADC_SingleEnded(0);
  sensorValue = adc0 * 0.1875;
  if (sensorValue > outputValue_max) outputValue_max = sensorValue;
  if (sensorValue < outputValue_min) outputValue_min = sensorValue;
  delta = outputValue_max - outputValue_min;
  Serial.println(delta);
  lcd.setCursor(0, 0);
  lcd.print(sensorValue);
  delay(10);
}