Switch и String

Тема в разделе "Arduino & Shields", создана пользователем alexxx86, 25 мар 2014.

  1. Unixon

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

    Незначащих бит больше одного, да и один то уже все портит.
     
  2. mcureenab

    mcureenab Гуру

    Если я правильно понял, Q4 совсем ни на что не влияет.
    Но switch коряво будет выглядеть. Лучше все Qx упаковать в байт и битовой арифметикой пользоваться.
     
  3. Unixon

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

    Ну я собственно это и сделал.
     
  4. thesatellite

    thesatellite Нерд

    За ответы Благо Дарю. Теперь вот в чём вопрос:
    Имеется полный скетч:

    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 народ?! Полтергейст?
     
  5. Unixon

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

    @thesatellite , используйте тэг [ code ] для скетчей. Отредактируйте свои сообщения.
     
  6. Tomasina

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

    вот фрагмент из моего древнего скетча, читает 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"