как написать следуюший код? Если показания с аналогово датчика равно показаниям от 200 до 300 включить лампочку.
Миша! "перечесление" - это что за слово? Корень у него какой? Код (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; } }
Легких путей не ищем? Код (Text): int sensor_reading = analogRead(A0); bool lamp_state = (sensor_reading>200 && sensor_reading<300); digitalWrite(13, lamp_state);
Код понятен, но к такой логике надо привыкнуть Ясный пень, что analogRead(A0) надо делать как можно реже. А вот собирать булеву переменную таким образом - дело практики, как и писать ее в порт.
Любое условие по сути своей и есть булева переменная. Часто использование условия в виде переменной позволяет избавиться от if..else, но код иногда от этого становится менее читаемым.
Трудно мозги перестроить! Я когда первый код увидел, тоже стал думать над его оптимизацией, но от конструкции if..else не подумал избавляться.
для фанатов оптимизации: Код (Text): digitalWrite(13,(analogRead(A0)>200&&analogRead(A0)<300)?1:0); Но, как отметили выше, чем жестче оптимизация, тем менее дружелюбный код. К тому же, ни в одном из примеров не учтен "дребезг" измерений, поэтому лампочка иногда будет подмаргивать, что нежелательно для больших нагрузок.
Оптимизация бывает па размеру кода и по скорости выполнения. Обычно оптимизация по скорости приводит к большему размеру кода, а оптимизация по размеру кода к меньшей производительности.