Если я правильно понял, Q4 совсем ни на что не влияет. Но switch коряво будет выглядеть. Лучше все Qx упаковать в байт и битовой арифметикой пользоваться.
За ответы Благо Дарю. Теперь вот в чём вопрос: Имеется полный скетч: void setup() { pinMode(9, INPUT); pinMode(10, INPUT); pinMode(11, INPUT); pinMode(12, INPUT); pinMode(8, INPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); } void loop() { boolean Q1 = digitalRead(8); boolean Q2 = digitalRead(12); boolean Q3 = digitalRead(11); boolean Q4 = digitalRead(10); boolean Q5 = digitalRead(9); if (Q1 && !Q2 && !Q3 && !Q4 && Q5) { digitalWrite(2, LOW); } if (!Q1 && Q2 && !Q3 && !Q4 && Q5) { digitalWrite(3, LOW); } if (Q1 && Q2 && !Q3 && !Q4 && Q5) { digitalWrite(4, LOW); } if (!Q1 && !Q2 && Q3 && !Q4 && Q5) { digitalWrite(5, LOW); } else { { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); } } } Железка UNO & DTMF декодер mt8870. Хрень такая: Значит делаю только if (Q1 && !Q2 && !Q3 && !Q4 && Q5) { digitalWrite(2, LOW); } else { { digitalWrite(2, HIGH); } } } Реле на 4 группы (первое) срабатывает четко. Подключаю if (!Q1 && Q2 && !Q3 && !Q4 && Q5) { digitalWrite(3, LOW); }.... Первое перестаёт включаться, лишь слабенько загорается светодиод. Подключаю третье if (Q1 && Q2 && !Q3 && !Q4 && Q5) { digitalWrite(4, LOW); }..... И 1 и 2 реле горит слабенько светодиод, 3 включается. И так далее. WTF народ?! Полтергейст?
вот фрагмент из моего древнего скетча, читает Q и формирует соответствующее число: Код (C++): boolean Q1 = (analogRead(PIN_Q1) > analogTreshold) ? 1 : 0; // читаем выходы DTMF декодера и boolean Q2 = (analogRead(PIN_Q2) > analogTreshold) ? 1 : 0; // получаем из аналогового сигнала бинарный boolean Q3 = (analogRead(PIN_Q3) > analogTreshold) ? 1 : 0; boolean Q4 = (analogRead(PIN_Q4) > analogTreshold) ? 1 : 0; Serial.print("DTMF code: "); Serial.print(Q4); Serial.print(Q3); Serial.print(Q2); Serial.print(Q1); phoneKeyCode = (Q4 * 8) + (Q3 * 4) + (Q2 * 2) + (Q1 * 1); // переводим бинарное представление в десятичное if (10 == phoneKeyCode) phoneKeyCode = 0; // т.к. число 10 - это клавиша "0"