Как суммировать данные в нужном диапазоне
- Войдите на сайт для отправки комментариев
Сб, 16/12/2017 - 19:43
Всем привет. Никак не могу придумать как написать программу, которая суммировала бы данные напряжения в диапазоне от 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);
}
}
Вы сначала задачу как следует сформулируйте. Вы понимаете, что эта Ваша "сумма", как Вы её сейчас описали, зависит от количества измерений? И зачем она Вам такая? Возможно Вам нужно либо измерение напряжения при определённых значениях температуры (иначе говоря, известное количество измерений в заданном интервале температур)? Или измерение через определённые промежутки времени? Или что-то ещё? А так, в чём проблема-то? sumU = sumU + results; (Ну или + results * multiplier, что там у Вас напряжение, я не вникал)
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; } }OlegK Большое спасибо за флажок то что нужно. Всё получилось как хотел.