Подскажите пожалуйста как быть с условием

Тема в разделе "Arduino & Shields", создана пользователем sanik, 24 фев 2014.

  1. sanik

    sanik Гик

    Как правильно записать в скетче такую ситуацию
    допустим у нас есть переменная которой мы регулируем порог срабатывания чего либо

    Код (Text):
    long DISTsetup =0; // переменая для уровня порога
    distVal = analogRead(DIST_PIN); // читаем аналоговый вход и записываем в переменную distVal
    if ((mode == ACTIVEdist) && (distVal > DISTsetup))
    {

    // Здесь условие если режим ACTIVEdist и переменная больше порога,
    // то выполняем действие
    //Мне нужно чтоб у пременой DISTsetup был заданный разброс порога +- 15
    //И условие выполнялось так:
    // если режим ACTIVEdist и переменная больше или меньше порога,
    // то выполняем действие
    // Если установил переменную DISTsetup равную 250 то порог срабатывания станет от 235 до 265
     
     
  2. BAit

    BAit Нерд

  3. sanik

    sanik Гик

  4. rav_75

    rav_75 Гик

    Код (Text):
    if ((mode == ACTIVEdist) && (distVal < (DISTsetup -15) || distVal > (DISTsetup +15))){}
    т.е. переменная не в диапазоне, я так понял из вашего условия. Если нужна переменная в диапазоне, тогда
    Код (Text):
    if ((mode == ACTIVEdist) && (distVal > (DISTsetup -15)) && (distVal < (DISTsetup +15))){}
     
    sanik нравится это.
  5. NR55RU

    NR55RU Гик

    В сущности ответ уже дан.
    Только чтобы сделать читаемость кода лучше и потом самому не сломать себе голову пытаясь понять длинный набор логических операций, лучше сделать что-то в таком духе.
    При большом наборе булевых операций подобный подход часто рекомендуется в литературе для улучшения читаемости кода и исправления ошибок.

    Код (Text):
    // Если должно сработать за пределами некоего диапазона: меньше 10 или больше 20
    isOutOfRange = (value < MIN_VALUE) || (MAX_VALUE < value);
    isInMode = (mode == ACTIVEdist);
    if(isInMode && isOutOfRange){}

    // Если дожно сработать в пределах некоего диапазона: от 10 до 20
    isInRange = (MIN_VALUE < value) && (value < MAX_VALUE);
    isInMode = (mode == ACTIVEdist);
    if(isInMode && isInRange){}
     
  6. sanik

    sanik Гик

    Спасибо огромное! Как раз то что мне нужно!:)
     
  7. sanik

    sanik Гик