выполнить функцию if во временном цикле

У меня есть школьный проект, в котором мне нужно было заставить часть кода работать в течение 1 минуты, а затем вернуться. Сначала я использовал считыватель RFID, который у меня не работал, поэтому я решил использовать последовательный монитор. Я сделал это с помощью функции переключения, и если это был правильный номер, у вас была 1 минута, чтобы нажать кнопки.

Но теперь проблема для меня заключается в том, что в цикле, который я сделал, он не может искать функции if, и из-за этого я не могу смотреть, нажаты ли кнопки. Я надеюсь, что это был ясное объяснение, и кто-то может мне помочь. Заранее спасибо.

, 👍-1

Обсуждение

Вставленный код можно правильно отформатировать, выбрав его и нажав кнопку {} в редакторе вопросов (или нажав Control+K)., @chrisl

Ваша проблема мне не ясна. Но я думаю, что вы действительно должны читать переключатели через digitalRead() внутри цикла., @chrisl

Почему вы снова удалили свой вставленный код, который я отформатировал для вас?, @chrisl

Потому что в коде не было пробелов или следующих строк, и поэтому его было невозможно прочитать. Я также понятия не имел, как изменить его, чтобы он выглядел читаемым. Но ваш комментарий о digitalRead() был очень полезен, у меня был digitalRead() для моих кнопок, но я поместил его в другой цикл, но теперь, когда я переместил digitalRead() вправо(), теперь он работает. Так что большое спасибо., @daan

Как правило, цикл с временной задержкой — это плохой дизайн в проектах Arduino. Лучше используйте данную функцию void loop() и неблокирующие функции внутри., @DataFiddler


1 ответ


Лучший ответ:

0

Как упоминает Крисл, вы должны использовать digitalRead. Назначьте это правильным переменным:

switchState1 = digitalRead(…) // Введите здесь правильный вывод
switchState2 = digitalRead(…) // Введите здесь правильный вывод

Кроме того, вы можете отделить первую часть if, чтобы получить:

if (switchState1 == HIGH)
{
    if (switchState2 == HIGH)
    { 
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
        digitalWrite(4, HIGH);
    }
    else if (switchState2 == LOW)
    {
        digitalWrite(2, LOW);
        digitalWrite(3, LOW);
        digitalWrite(4, LOW);
    }
}

Поскольку внутреннее условие зависит только от switchState2, а контакты равны, вы можете написать:

if (switchState1 == HIGH)
{
    digitalWrite(2, switchState2 == HIGH);
    digitalWrite(3, switchState2 == HIGH);
    digitalWrite(4, switchState2 == HIGH);
}

И вы можете использовать вместо switchState2 switchState2High (логическое значение) и проверять его, только когда switchState 1 == HIGH.

if (switchState1 == HIGH)
{
    switchState2High = (digitalReadState(…) == HIGH);
    digitalWrite(2, switchState2High);
    digitalWrite(3, switchState2High);
    digitalWrite(4, switchState2High);
}

Вы также можете использовать цикл for для последней части, чтобы получить:

if (switchState1 == HIGH)
{
    switchState2High = (digitalReadState(…) == HIGH);
    for (int pin = 2; pin < 5; pin++)
    {
        digitalWrite(pin, switchState2High);
    }
}
,

Теперь код работает, большое спасибо за ваше время и помощь., @daan

Добро пожаловать / удачи в вашем проекте, @Michel Keijzers