выполнить функцию if во временном цикле
У меня есть школьный проект, в котором мне нужно было заставить часть кода работать в течение 1 минуты, а затем вернуться. Сначала я использовал считыватель RFID, который у меня не работал, поэтому я решил использовать последовательный монитор. Я сделал это с помощью функции переключения, и если это был правильный номер, у вас была 1 минута, чтобы нажать кнопки.
Но теперь проблема для меня заключается в том, что в цикле, который я сделал, он не может искать функции if, и из-за этого я не могу смотреть, нажаты ли кнопки. Я надеюсь, что это был ясное объяснение, и кто-то может мне помочь. Заранее спасибо.
@daan , 👍-1
Обсуждение1 ответ
Лучший ответ:
Как упоминает Крисл, вы должны использовать 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
- Как справиться с rollover millis()?
- Как получить текущее время и дату в Arduino без внешнего источника?
- Преобразование в Unix Timestamp и обратно
- Как запустить цикл на определенное время?
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Разница между «time_t» и «DateTime»
- Точность часов времени Arduino
- Как преобразовать время EPOCH во время и дату на Arduino?
Вставленный код можно правильно отформатировать, выбрав его и нажав кнопку
{}
в редакторе вопросов (или нажав Control+K)., @chrislВаша проблема мне не ясна. Но я думаю, что вы действительно должны читать переключатели через
digitalRead()
внутри цикла., @chrislПочему вы снова удалили свой вставленный код, который я отформатировал для вас?, @chrisl
Потому что в коде не было пробелов или следующих строк, и поэтому его было невозможно прочитать. Я также понятия не имел, как изменить его, чтобы он выглядел читаемым. Но ваш комментарий о digitalRead() был очень полезен, у меня был digitalRead() для моих кнопок, но я поместил его в другой цикл, но теперь, когда я переместил digitalRead() вправо(), теперь он работает. Так что большое спасибо., @daan
Как правило, цикл с временной задержкой — это плохой дизайн в проектах Arduino. Лучше используйте данную функцию void loop() и неблокирующие функции внутри., @DataFiddler