перечисление

Тема в разделе "Проводная и беспроводная связь", создана пользователем Беженарь Миша, 11 авг 2015.

  1. как написать следуюший код?
    Если показания с аналогово датчика равно показаниям от 200 до 300 включить лампочку.
     
  2. ИгорьК

    ИгорьК Гуру

    Миша! "перечесление" - это что за слово?
    Корень у него какой?

    Код (C):
    bool lampIsSwitchedOn = false;
    if ((analogRead(A0) > 200) && (analogRead(A0) < 300) && !lampIsSwitchedOn)
    {
        digitalWrite(13,1);
        lampIsSwitchedOn = true;
    }

    else {
        if (lampIsSwitchedOn == true)
        {
            digitalWrite(13,0);
            lampIsSwitchedOn = false;
        }
    }
     
    Беженарь Миша нравится это.
  3. Unixon

    Unixon Оракул Модератор

    Легких путей не ищем?
    Код (Text):

    int sensor_reading = analogRead(A0);
    bool lamp_state = (sensor_reading>200 && sensor_reading<300);
    digitalWrite(13, lamp_state);
     
     
    Tomasina, ИгорьК и Беженарь Миша нравится это.
  4. Спасибо. Перчислить.:oops::)
     
  5. ИгорьК

    ИгорьК Гуру

    Код понятен, но к такой логике надо привыкнуть :)
    Ясный пень, что analogRead(A0) надо делать как можно реже. А вот собирать булеву переменную таким образом - дело практики, как и писать ее в порт.
     
    Беженарь Миша нравится это.
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    Любое условие по сути своей и есть булева переменная. Часто использование условия в виде переменной позволяет избавиться от if..else, но код иногда от этого становится менее читаемым.
     
    Беженарь Миша и ИгорьК нравится это.
  7. KamAdm

    KamAdm Нерд

    Трудно мозги перестроить! Я когда первый код увидел, тоже стал думать над его оптимизацией, но от конструкции if..else не подумал избавляться.
     
    Беженарь Миша нравится это.
  8. Tomasina

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

    для фанатов оптимизации:
    Код (Text):
    digitalWrite(13,(analogRead(A0)>200&&analogRead(A0)<300)?1:0);
    Но, как отметили выше, чем жестче оптимизация, тем менее дружелюбный код.

    К тому же, ни в одном из примеров не учтен "дребезг" измерений, поэтому лампочка иногда будет подмаргивать, что нежелательно для больших нагрузок.
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Это ни разу не оптимизация. Дважды вызывать функцию не нужно, условие не нужно.
     
  10. bool = boolean ?
     
  11. Тоже самое.
     
  12. DrProg

    DrProg Вечный нерд

    Оптимизация это когда HEX короче, а не лишь бы мозг сломать.
     
  13. Megakoteyka

    Megakoteyka Оракул Модератор

    Оптимизация бывает па размеру кода и по скорости выполнения. Обычно оптимизация по скорости приводит к большему размеру кода, а оптимизация по размеру кода к меньшей производительности.
     
  14. DrProg

    DrProg Вечный нерд

    Не так давно меня здесь уверяли, что чем меньше тактов тем быстрее код.
     
  15. Unixon

    Unixon Оракул Модератор

    Меньше размер кода != меньше тактов. См. циклы.
     
  16. ребят bool = boolean ?
     
  17. Megakoteyka

    Megakoteyka Оракул Модератор

    Да.
     
    Беженарь Миша нравится это.
  18. спасибо огромное !!!