Как установить параметры данных датчика?

Добрый день! Как установить параметры данных датчика?

Как и данные, установленные только, например, они начинаются с минимального значения 3 и заканчиваются максимальным значением 6, и он включит светодиод 1, а если минимальное значение 1 и максимальное значение 2 включит светодиод 2 просто так?

Мой фактический код для этого:

float basa = scale.get_units();
if( basa >= 4 )
{ 
  digitalWrite(led1, HIGH);
}
else if( basa >= 2 )
{ 
  digitalWrite(led2, HIGH);
}

Этот код показывает, что если когда-либо он достигнет значения 4, значение 2 также будет реагировать, поэтому мой вопрос заключается в том, как установить значение данных датчика, как оно будет реагировать только на Value1 - Value2 таким образом.

спасибо

, 👍-1

Обсуждение

2 не будет реагировать, @jsotola

Я не понимаю, в чем твоя проблема. Пожалуйста, опишите это подробнее, @chrisl

Вы действительно видите, что оба светодиода включаются, когда basa >= 4? Логика ваших операторов if кажется правильной. Если basa >= 4, будет выполнено первое условие и загорится LED1. Второе условие не будет выполнено, потому что оно находится в операторе else, где оператор if уже оценивается как истинное. Вы сбрасываете светодиоды где-то еще в своем коде? Если нет, вы можете увидеть, что значения вашей шкалы просто увеличиваются и проходят оба интервала. Если только первое измерение находится в промежутке между 2 и 4, а второе больше 4, код загорится обоими светодиодами, @chrisl


1 ответ


Лучший ответ:

1

Например:

float basa = scale.get_units();

digitalWrite(led1, LOW);
digitalWrite(led2, LOW);

if( basa >= 2 && basa < 4 )
{ 
  digitalWrite(led2, HIGH);
}

if( basa >= 4 )
{ 
  digitalWrite(led1, HIGH);
}

EDIT: предложено @chrisl (см. комментарии)

Если вы правильно понимаете вашу проблему, вы пытаетесь зажечь 2 светодиода в соответствии со значением, которое вы читаете со шкалы. ИМХО, вы хотите назначить три интервала (диапазона) следующим образом:

(-INF, 2) : none of the LEDs is switched on
[2, 4)    : only LED 2 is switched on
[4, +INF) : only LED 1 is switched on
  • [x или x] означает, что x принадлежит интервалу.
  • (x или x) означает, что x не принадлежит интервалу.
  • +INF и -INF — положительная или отрицательная бесконечность.

Мой код делает следующее:

Я использую наблюдение, что интервалы не пересекаются, а объединение интервалов представляет собой полное действительное числовое пространство. (Хотя ваши весы имеют более узкий диапазон: (0-?кг). Программа может работать с более широким диапазоном по сравнению с весами, так что это не проблема.)

Если первое условие (-INF, 2) равно true, ни одно из других не выполняется, и мы можем быть уверены, что светодиоды, которые я выключил с помощью цифровая запись (ledX, LOW); Операторы останутся отключенными. Если значение находится в диапазоне [2, 4), я включаю светодиод 2 и могу быть уверен, что другой светодиод остается выключенным, потому что условие basa >= 4 может не быть true. И если значение находится в диапазоне [4, +INF), я включаю LED1 и могу быть уверен, что LED 2 не был включен, потому что условие basa >= 2 & ;&амп; основа < 4 не может быть true.

,

Я бы сказал, что это делает то же самое, что и код OP, за исключением вызовов digitalWrite(ledX, LOW). Пожалуйста, объясните подробнее, как это решает проблему OP (какой бы эта проблема ни была на самом деле), @chrisl

@chrisl OP хочет, чтобы при значении 2 включался светодиод, а при значении 4 — другой. но в коде OP, когда это 4, также применяется условие 2. так что подход Питера правильный. если он больше 2 и меньше 4, это то, что именно хочет ОП., @ElectronSurf

@chrisl Вы правы, я должен был объяснить решение, но вчера было поздно ;-). Я отредактирую ответ и добавлю свое понимание проблемы. Кстати, мой код отличается не только операторами digitalWrite(ledX, LOW). Я удалил else, поэтому я разделил два случая и использовал диапазон [2,4) для первого случая. Случай < 2 неявно обрабатывается операторами digitalWrite(ledX, LOW)., @Peter Paul Kiefer

@ElectronSurf Нет, в коде OP, когда basa >= 4 применяется только первое условие, и, таким образом, включается только led1. Второе условие в этом случае не выполняется, потому что оно находится в операторе else. Код приходит к этому состоянию только тогда, когда basa < 4. Питер Пол Кифер добавил случай для basa < 2 и разделил операторы if (что можно рассматривать как улучшение)., @chrisl

@chrisl «если когда-либо оно достигнет значения 4, значение 2 будет реагировать», то, что я сказал, было основано на объяснении ОП., @ElectronSurf

@PeterPaulKiefer, вы пропустили «еще» во фрагменте OP?, @Juraj

@Juraj Я не пропустил «еще»; Я удалил его. Для меня это было одним из способов добиться того, о чем, как я думал, просил ОП. Правильно ли я интерпретировал вопрос ОП? Только ОП может сказать нам. Но я боюсь, что он прекратил сотрудничество ;-)., @Peter Paul Kiefer

спасибо дружище оценил, @Reiniel Cirujano Antonio