Как сравнивать данные снятые с датчиков?
- Войдите на сайт для отправки комментариев
Ср, 12/04/2017 - 09:22
Например, данные снятые с двух датчиков температуры:
#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); }
Как лучше их сравнивать?
Нужно для самодиагностики, чтобы вдруг один датчик не накрылся?
Может у кого то есть идеи как это лучше осуществить?
Нужно сравнить их значения и выполнить действие.
Если их значения очень сильно разняться, то не выполнять действие.
Хотя бы на словах скажите
Может у кого то есть идеи как это лучше осуществить?
Господи, какие нах идеи? Как сравнить два числа? Я охреневаю, дорогая редакция!
Пошёл посыпать голову пеплом и рожать идеи по сравнению двух чисел ....
Может у кого то есть идеи как это лучше осуществить?
Господи, какие нах идеи? Как сравнить два числа? Я охреневаю, дорогая редакция!
Пошёл посыпать голову пеплом и рожать идеи по сравнению двух чисел ....
Осторожно предложу использовать то, что предназначается для проверки : читаем про "if...else"
Осторожно предложу использовать то, что предназначается для проверки : читаем про "if...else"
Ну, как-то не наш метод!
Я думаю так, для начала числа надо преобразовать в String и добавить в начало 0x (они (новички) зачем-то всегда так делают). Потом, организовать цикл поразрядного сравнения, начиная со старших разрядов. Но при этом не забыть, что числа-то, float потому длина дробной части может быть разной, т.е. перед циклом надо найти точки в строках и выровнять, чтобы правильные разряды сравнивались. Как-то так в общих словах.
Числа не будут равными, а с некой ошибкой..
И стоять они будут не в одном месте.
Например значение с одного - 27
Со второго - 30
Нужно чтобы разница их значений не превышала 5гр.
И еще нужно вычичслить среднее значение с двух датчиков, и используя это значение выполнить действие.
Как вычислить среднее значение?
И если разница превышает 5гр, то как использовать значения с "более правдивого" датчика?
Числа не будут равными, а с некой ошибкой..
И стоять они будут не в одном месте.
Например значение с одного - 27
Со второго - 30
Нужно чтобы разница их значений не превышала 5гр.
И еще нужно вычичслить среднее значение с двух датчиков, и используя это значение выполнить действие.
Как вычислить среднее значение?
И если разница превышает 5гр, то как использовать значения с "более правдивого" датчика?
Можно ли просто использовать в if else конструкции ,
if (t1-t2>5 || t2-t1 > 5) { не выполнять то то...}
И если разница превышает 5гр, то как использовать значения с "более правдивого" датчика?
А какой из двух "более правдивый"?
И если разница превышает 5гр, то как использовать значения с "более правдивого" датчика?
тю. элементарно - берёшь значения с более лучше правдивого датчика.
*смотрите, сейчас спросит: как узнать, какой из двух датчиков врёт? :D
А какой из двух "более правдивый"?
зачем ты это спросил?
А какой из двух "более правдивый"?
зачем ты это спросил?
меня всегда интересовал вопрос выбора "более правдивого" из двух. И потом - я раньше тебя спросил :)
Можно ли просто использовать в if else конструкции ,
if (t1-t2>5 || t2-t1 > 5) { не выполнять то то...}
В общем случае так:
Если условие выполняется - то выполниять, иначе - выполнять другое.
А какой из двух "более правдивый"?
зачем ты это спросил?
меня всегда интересовал вопрос выбора "более правдивого" из двух.
нужен третий датчик, точность которого проверяешь ещё двумя, точность которых проверяешь четырьмя и т.д.
и, вообще, пусть ТС запостит фотку трупа хотя бы одного датчика - для личного музея электронных редкостей хочу.
какие там у него? ага - Dallas
Можно ли просто использовать в 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;
---------------
Только это бесполезно. Если Вы задаётет такие вопросы, Вам надо просто взять любой, желательно попроще учебник программирования и внимательно читать, разбирая все примеры. Иначе, проблемы типа "как сравнить два числа" будут возникать снова и снова.
В космических системах используется троирование ответственных систем в тч сбора информации и мажоритарная обработка.
Можно ли просто использовать в 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;
---------------
Только это бесполезно. Если Вы задаётет такие вопросы, Вам надо просто взять любой, желательно попроще учебник программирования и внимательно читать, разбирая все примеры. Иначе, проблемы типа "как сравнить два числа" будут возникать снова и снова.
Вот зачем отвечать на подобные вопросы???
Мое поколение, люди "до интернет", которые днями искали нужную информацию в ГПНТБ и Ленинке, после появления сети и ее развития, считали, что наступил совершенно новый, "золотой век" доступной информации.
Но теперь появляется такое мудло, которое на форуме, не в гребаном поиске, не в миллионе доступных в сети учебников, а на форуме, Карл! - спрашивает, млять, как вычислять среднее!!!!
Вот зачем поощрять размножение таких? Глумеж, троллинг и игнорирование - вот что требуется! Недоумок должен себя чувствовать постоянно униженным.
При наличии минимальной гордости, это должно привести к желанию учиться... ну или удавиться. Меня устроят оба варианта.
Вот зачем отвечать на подобные вопросы???
Незачем, Вы правы. Собственно самый первый ответ в этой теме и был моим ответом как раз в правильном стиле.
Последний же ответ - епитимья за грехи (самонаказание за эпический обосрамс в другой теме). Этот пост выиграл в номинации "самый идиотский вопрос дня" - см. подробности вот здесь.
Числа не будут равными, а с некой ошибкой..
Ошибка может быть абсолютная или относительная. Поэтому варианта тоже два:
(a-b) > Constsnt
и
(a-b)/(a+b)*2 > Constant
Как вычислить среднее значение?
Матеметике известно 3 средних:
- арифметическое: (a+b)/2
- геометрическое: sqrt(a*b)
- гармоническое: 2/(1/a+1/b)
И это еще не все. Существуют, напимер, среднее взвешенное и медиана.