Как суммировать данные в нужном диапазоне

Dron_S
Offline
Зарегистрирован: 04.10.2016

Всем привет.  Никак не могу придумать как написать программу, которая суммировала бы данные напряжения в диапазоне от 70 до 40 градусов.  Идея в том чтобы нагреть до 70 градусов предмет, и измерить напряжения остывания суммируя каждое значение напряжения. И при значении 40 градусов вывести результат суммы напряжений. Спасибо.

#include <SPI.h>
#include "Adafruit_MAX31855.h" // подключаем библиотеку термопары
#include <Wire.h> // библиотека для работы I2C
#include <Adafruit_ADS1015.h> // подключаем библиотеку АЦП
#define MAXDO   3
#define MAXCS   4
#define MAXCLK  5
Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);
Adafruit_ADS1115 ads(0x48);  // инициализируем микросхему, и говорим что она подключена по адресу 0x48

float sumU = 0.0;

void setup()
{
  Serial.begin(9600);
  ads.begin(); //включаем АЦП                                                         
  // Выбираем коэфициент усиления                                                         
  
  ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.03125mV
}

void loop() 
{
 double c = thermocouple.readCelsius(); //считаем температуру
 Serial.println(c); 
 
 int16_t results; //на выходе преобразования АЦП мы получаем 16-разрядное знаковое целое
 float multiplier = 0.03125F; //Входной диапазон АЦП (усиления) 1x gain   +/- 4.096V  1 bit = 0.125mV 
 results = ads.readADC_Differential_0_1();  //Измеряем напряжение 

Serial.println((results * multiplier),5); // выводим в монитор значения напряжения
 if (c==60)
 
 ???????
 
 if else (c==40) 
 {
  Serial.println(sumU);
  }
}

 

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Вы сначала задачу как следует сформулируйте. Вы понимаете, что эта Ваша "сумма", как Вы её сейчас описали, зависит от количества измерений? И зачем она Вам такая? Возможно Вам нужно либо измерение напряжения при определённых значениях температуры (иначе говоря, известное количество измерений в заданном интервале температур)? Или измерение через определённые промежутки времени? Или что-то ещё? А так, в чём проблема-то? sumU = sumU + results; (Ну или + results * multiplier, что там у Вас напряжение, я не вникал)

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

float multiplier = 0.03125F закиньте в объявления, зачем её каждый виток обновлять...
Если нужно выполнить процедуру измерения только при достижении 70 град. и последующем остывании до 40, то заведите флаг, который опредеяет, достигнута ли стартовая точка.

static boolean needMeasure = false;
(if results >= 70) needMeasure = true;
//теперь остываем и ждём выполнения условия - 
//мол нужно измерить и температура находится в нужном диапазоне
(if needMeasure && results <= 70.0 && results >= 40.0) {
    //суммируем
    sumU += results;
    //если остыли до 40 град., выводим сумму
    (if results <= 40.0) {
         Serial.println(sumU);
         needMeasure = false;
    }
}
Dron_S
Offline
Зарегистрирован: 04.10.2016

OlegK Большое спасибо за флажок то что нужно. Всё получилось как хотел.