Для проверки условий в коде используйте &&, || и !. Например, если нужно включить светодиод только при одновременном нажатии двух кнопок, подойдет конструкция: if (digitalRead(btn1) == HIGH && digitalRead(btn2) == HIGH) { digitalWrite(led, HIGH); }.
Конструкция || срабатывает при выполнении хотя бы одного условия. Это полезно для систем с дублированием ввода: if (sensor1 > threshold || sensor2 > threshold) { activateAlarm(); }. Такой подход повышает отказоустойчивость.
Инверсия ! меняет состояние сигнала на противоположное. Например, if (!digitalRead(switchPin)) выполнится, когда контакт разомкнут. Это сокращает код и устраняет лишние сравнения.
Комбинируйте эти элементы для сложных условий. Проверка диапазона: if (value >= minVal && value <= maxVal). Исключение ложных срабатываний: if (x != 0 && y != 0). Избегайте вложенных проверок – упрощайте логику.
Сравнение и комбинирование условий в микроконтроллерах
Для проверки нескольких условий одновременно используйте символы && (И), || (ИЛИ) и ! (НЕ). Например, если нужно включить светодиод только при нажатой кнопке и достаточном уровне освещенности:
if (digitalRead(buttonPin) == HIGH && analogRead(lightSensor) < 500) {
digitalWrite(ledPin, HIGH);
}
Сочетание || сработает при выполнении хотя бы одного из условий. Этот вариант подходит для систем сигнализации:
if (motionDetected || doorOpened) {
triggerAlarm();
}
Инвертирование результата через ! полезно для обратной логики. В этом случае реле активируется, когда температура не превышает порог:
if (!(temp > 30)) {
relayOn();
}
Для сложных сценариев комбинируйте конструкции. Такой код управляет вентилятором в зависимости от трех параметров:
if ((humidity > 70 && temp > 25) || manualOverride) {
startFan();
}
Управление выходами с помощью условий
Для включения светодиода при одновременном нажатии двух кнопок используйте конструкцию с &&:
if (digitalRead(button1) == HIGH && digitalRead(button2) == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
Схема с тумблером и датчиком
Активируйте реле, если хотя бы один из источников сигнализирует:
bool switchState = digitalRead(togglePin);
bool sensorState = digitalRead(sensorPin);
if (switchState || sensorState) {
digitalWrite(relayPin, HIGH);
}
Инверсия сигналов
Используйте ! для изменения поведения кнопки с активным низким уровнем:
if (!digitalRead(btnPin)) {
// Действие при нажатии
}
Использование условий и циклов с комбинациями &&, ||, !
Для проверки двух условий одновременно используйте &&. Например, если нужно включить светодиод только при нажатой кнопке и уровне освещенности ниже порога:
if (digitalRead(buttonPin) == HIGH && analogRead(lightSensor) < 500) {
digitalWrite(ledPin, HIGH);
}
Оператор || срабатывает при выполнении хотя бы одного условия. В этом примере мотор активируется при превышении температуры или ручном переключении:
if (temp > 30 || digitalRead(switchPin) == HIGH) {
motor.start();
}
Инвертировать результат помогает !. Датчик движения часто возвращает HIGH при отсутствии активности, поэтому инверсия упрощает проверку:
while (!digitalRead(motionSensor)) {
delay(100); // Ждем срабатывания
}
В циклах while комбинируйте проверки для сложных сценариев. Этот код ожидает либо нажатия кнопки, либо таймаута:
unsigned long start = millis();
while (!buttonPressed && millis() - start < 10000) {
// Ожидание 10 секунд или нажатия
}
Для обработки исключений добавьте вложенные условия. Здесь система проверяет наличие ошибки перед основным действием:
if (x >= 0 && x <= 1023) {
if (!errorFlag) {
analogWrite(pwmPin, x);
}
}


