Синтаксис логических функций

Тема в разделе "Arduino & Shields", создана пользователем yden, 8 май 2016.

  1. yden

    yden Гик

    Здравствуйте
    Подскажите пожалуйста в написании логических функций.
    Нужно включать реле в промежутке между 18-00 и 19-00:

    if (chasA >= 18 && minA >= 00 )&&
    (chasA <= 19 && minA < 00)
    {
    digitalWrite(outPin, HIGH);
    }
    else
    {
    digitalWrite(outPin, LOW);
    }

    Ошибка в скобках.

    Спасибо
     
  2. ostrov

    ostrov Гуру

    Код (C++):
    if (chasA == 18 ) {
    ....
    } else {
    ...
    }
    Минуты вообще непричем в данном случае.

    У вас ошибка - все выражение за if надо брать еще в общие скобки.
     
    Последнее редактирование: 8 май 2016
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    digitalWrite(outPin, chasA >= 18 && chasA <= 19 ? HIGH : LOW);
     
  4. ostrov

    ostrov Гуру

    - вырубится в 20:00
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    да, тогда так: chasA >= 18 && chasA < 19
    а когда всего один час, то нагляднее твой способ.
     
  6. yden

    yden Гик

    А как с минутами сделать, например, включать с 19-00 до 20-10?

    Спасибо
     
  7. alp69

    alp69 Форумчанин

    В 19.00 включить реле и запустить таймер. Когда значение таймера превысит 10 минут - выключить реле и обнулить таймер.
     
  8. ostrov

    ostrov Гуру

    Сделать расписание, редактируемое на экране 16х2, и по нему включать и выключать. ;)
     
  9. ostrov

    ostrov Гуру

    Как вариант:
    Код (C++):
    digitalWrite(outPin, (chasA >= 18 and chasA <= 19));
     
  10. Tomasina

    Tomasina Сушитель лампочек Модератор

    Логика верная, но оператора "and" в Си нету.
     
  11. ostrov

    ostrov Гуру

    Может быть и нет, но он работает, это так называемый "диграф", то есть синоним. Мне они иногда кажутся удобнее:

    Диграф Эквивалентная строка
    and &&
    bitand &
    and_eq &=
    or ||
    bitor |
    or_eq |=
    xor ^
    xor_eq ^=
    not !
    not_eq !=
    compl ~