Найти дельту изменяющейся переменной
- Войдите на сайт для отправки комментариев
Вс, 03/03/2019 - 12:42
Всем привет, есть переменная типа 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);
}
почему одно измерение? - оно же у вас в лупе - значит будет мерить, пока не остановаите.
производите два измерения через какой то промежуток времени и считайте дельту.
#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; } 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); }