Как сравнивать данные снятые с датчиков?

betka29
Offline
Зарегистрирован: 30.11.2016

Например, данные снятые с двух датчиков температуры:

#include <OneWire.h>
#include <DallasTemperature.h>
 
#define ONE_WIRE_BUS 9
 
OneWire oneWire(ONE_WIRE_BUS);
 
DallasTemperature sensors(&oneWire);
 
DeviceAddress Thermometer1 = { 
  0x28, 0x00, 0x54, 0xB6, 0x04, 0x00, 0x00, 0x92 };  // адрес датчика DS18B20 280054B604000092
DeviceAddress Thermometer2 = { 
  0x28, 0x9E, 0x95, 0xB5, 0x04, 0x00, 0x00, 0x57 }; 
 
void setup() {
 
  sensors.begin();
  sensors.setResolution(Thermometer1, 10);
  sensors.setResolution(Thermometer2, 10);
 
  Serial.begin(9600);
}
 
void printTemperature(DeviceAddress deviceAddress) {
  float tempC = sensors.getTempC(deviceAddress);
  Serial.println(tempC);
}
void loop() {
 
  sensors.requestTemperatures();
  Serial.print("Sensor1  ");
  printTemperature(Thermometer1);
 
  Serial.print("Sensor2  ");
  printTemperature(Thermometer2);
}

Как лучше их сравнивать?

Нужно для самодиагностики, чтобы вдруг один датчик не накрылся?

Может у кого то есть идеи как это лучше осуществить?

betka29
Offline
Зарегистрирован: 30.11.2016

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

Если их значения очень сильно разняться, то не выполнять действие.

 

Хотя бы на словах скажите

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

betka29 пишет:

Может у кого то есть идеи как это лучше осуществить?

Господи, какие нах идеи? Как сравнить два числа? Я охреневаю, дорогая редакция!

Пошёл посыпать голову пеплом и рожать идеи по сравнению двух чисел ....

T.Rook
Offline
Зарегистрирован: 05.03.2016

ЕвгенийП пишет:

betka29 пишет:

Может у кого то есть идеи как это лучше осуществить?

Господи, какие нах идеи? Как сравнить два числа? Я охреневаю, дорогая редакция!

Пошёл посыпать голову пеплом и рожать идеи по сравнению двух чисел ....

Осторожно предложу использовать то, что предназначается для проверки : читаем про "if...else"

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

T.Rook пишет:

Осторожно предложу использовать то, что предназначается для проверки : читаем про "if...else"

Ну, как-то не наш метод!

Я думаю так, для начала числа надо преобразовать в String и добавить в начало 0x (они (новички) зачем-то всегда так делают). Потом, организовать цикл поразрядного сравнения, начиная со старших разрядов. Но при этом не забыть, что числа-то, float потому длина дробной части может быть разной, т.е. перед циклом надо найти точки в строках и выровнять, чтобы правильные разряды сравнивались. Как-то так в общих словах.

betka29
Offline
Зарегистрирован: 30.11.2016

Числа не будут равными, а с некой ошибкой..

И стоять они будут не в одном месте.

Например значение с одного - 27

Со второго - 30

 

Нужно чтобы разница их значений не превышала 5гр.

И еще нужно вычичслить среднее значение с двух датчиков, и используя это значение выполнить действие.

Как вычислить среднее значение?

И если разница превышает 5гр, то как использовать значения с "более правдивого" датчика?

 

betka29
Offline
Зарегистрирован: 30.11.2016

Числа не будут равными, а с некой ошибкой..

И стоять они будут не в одном месте.

Например значение с одного - 27

Со второго - 30

 

Нужно чтобы разница их значений не превышала 5гр.

И еще нужно вычичслить среднее значение с двух датчиков, и используя это значение выполнить действие.

Как вычислить среднее значение?

И если разница превышает 5гр, то как использовать значения с "более правдивого" датчика?

 

betka29
Offline
Зарегистрирован: 30.11.2016

Можно ли просто использовать  в if else конструкции ,

if (t1-t2>5 || t2-t1 > 5) { не выполнять то то...}

T.Rook
Offline
Зарегистрирован: 05.03.2016

betka29 пишет:

И если разница превышает 5гр, то как использовать значения с "более правдивого" датчика?

А какой из двух "более правдивый"?

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

betka29 пишет:

И если разница превышает 5гр, то как использовать значения с "более правдивого" датчика?

тю. элементарно - берёшь значения с более лучше правдивого датчика.

*смотрите, сейчас спросит: как узнать, какой из двух датчиков врёт? :D

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

T.Rook пишет:

А какой из двух "более правдивый"?

зачем ты это спросил?

T.Rook
Offline
Зарегистрирован: 05.03.2016

Клапауций 112 пишет:

T.Rook пишет:

А какой из двух "более правдивый"?

зачем ты это спросил?

меня всегда интересовал вопрос выбора "более правдивого" из двух. И потом - я раньше тебя спросил :)

T.Rook
Offline
Зарегистрирован: 05.03.2016

betka29 пишет:

Можно ли просто использовать  в if else конструкции ,

if (t1-t2>5 || t2-t1 > 5) { не выполнять то то...}

В общем случае так:

Если условие выполняется - то выполниять, иначе - выполнять другое.

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

T.Rook пишет:

Клапауций 112 пишет:

T.Rook пишет:

А какой из двух "более правдивый"?

зачем ты это спросил?

меня всегда интересовал вопрос выбора "более правдивого" из двух.

нужен третий датчик, точность которого проверяешь ещё двумя, точность которых проверяешь четырьмя и т.д.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

и, вообще, пусть ТС запостит фотку трупа хотя бы одного датчика - для личного музея электронных редкостей хочу.

какие там у него? ага - Dallas

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

betka29 пишет:

Можно ли просто использовать  в if else конструкции ,

if (t1-t2>5 || t2-t1 > 5) { не выполнять то то...}

Условие проще переписать по-другому

float sens1 = <взять температуру с первого датчика>;
float sens2 = <взять температуру со второго датчика>;
float diff = fabs(sens1 - sens2); // это разница

а дальше, как обычно

if (diff > 100500) { делать если больше } else {делать если меньше};

Среднее, тоже как обычно

float srednee = (sens1 + sens2) / 2.0;

---------------

Только это бесполезно. Если Вы задаётет такие вопросы, Вам надо просто взять любой, желательно попроще учебник программирования и внимательно читать, разбирая все примеры. Иначе, проблемы типа "как сравнить два числа" будут возникать снова и снова.

 

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

В космических системах используется троирование ответственных систем в тч сбора информации и мажоритарная обработка.

betka29
Offline
Зарегистрирован: 30.11.2016

ЕвгенийП пишет:

betka29 пишет:

Можно ли просто использовать  в if else конструкции ,

if (t1-t2>5 || t2-t1 > 5) { не выполнять то то...}

Условие проще переписать по-другому

float sens1 = <взять температуру с первого датчика>;
float sens2 = <взять температуру со второго датчика>;
float diff = fabs(sens1 - sens2); // это разница

а дальше, как обычно

if (diff > 100500) { делать если больше } else {делать если меньше};

Среднее, тоже как обычно

float srednee = (sens1 + sens2) / 2.0;

---------------

Только это бесполезно. Если Вы задаётет такие вопросы, Вам надо просто взять любой, желательно попроще учебник программирования и внимательно читать, разбирая все примеры. Иначе, проблемы типа "как сравнить два числа" будут возникать снова и снова.

Я согласен что нужно было бы перечитать для начала теорию...но как всегда всё нужно срочно.
Это то, что я искал.
Спасибо
 

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Вот зачем отвечать на подобные вопросы???

Мое поколение, люди "до интернет", которые днями искали нужную информацию в ГПНТБ и Ленинке, после появления сети и ее развития, считали, что наступил совершенно новый, "золотой век" доступной информации.

Но теперь появляется такое мудло, которое на форуме, не в гребаном поиске, не в миллионе доступных в сети учебников, а на форуме, Карл! - спрашивает, млять, как вычислять среднее!!!!

Вот зачем поощрять размножение таких? Глумеж, троллинг и игнорирование - вот что требуется! Недоумок должен себя чувствовать постоянно униженным.

При наличии минимальной гордости, это должно привести к желанию учиться... ну или удавиться. Меня устроят оба варианта.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:

Вот зачем отвечать на подобные вопросы???

Незачем, Вы правы. Собственно самый первый ответ в этой теме и был моим ответом как раз в правильном стиле.

Последний же ответ - епитимья за грехи (самонаказание за эпический обосрамс в другой теме). Этот пост выиграл в номинации "самый идиотский вопрос дня" - см. подробности вот здесь.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

betka29 пишет:

Числа не будут равными, а с некой ошибкой..

Ошибка может быть абсолютная или относительная. Поэтому варианта тоже два:

(a-b) > Constsnt

и

(a-b)/(a+b)*2 > Constant

Цитата:

Как вычислить среднее значение?

Матеметике известно 3 средних:

- арифметическое: (a+b)/2

- геометрическое: sqrt(a*b)

- гармоническое: 2/(1/a+1/b)

И это еще не все. Существуют, напимер, среднее взвешенное и медиана.