Есть три кнопки, где только одна может быть нажата одновременно. Я хочу установить переменную для этого. Как?
В принципе, у меня есть три кнопки, которые соответствуют контактам с 1 по 3, и я хочу установить эффективный код, который устанавливает определенную переменную в индекс, чей цифровой поток равен единице. Предположим, что одновременно можно нажать только одну кнопку.
void loop()
{
if(digitalRead(1) == 1)
{
Variable = 1;
}
if(digitalRead(2) == 1)
{
Variable = 2;
}
if(digitalRead(3) == 1)
{
Variable = 3;
}
}
Есть ли более эффективный способ сделать это, например, с помощью других циклов?
Я не могу обернуть вокруг своей головы эту концепцию, используя другие циклы, такие как for, do while, while и switch, потому что природа этой идеи кажется мне настолько нетрадиционной для их использования.
@AndroidV11, 👍0
Обсуждение1 ответ
Если вы можете одновременно нажимать только одну кнопку, то в итоге получите не более одного оператора if, оцениваемого как true. В вашем коде вы проверяете кнопки 2 и 3, даже если кнопка 1 нажата. Ваш код может быть немного быстрее, если вы сделаете это:
if(digitalRead(1) == 1)
{
Variable = 1;
}
else if(digitalRead(2) == 1)
{
Variable = 2;
}
else if(digitalRead(3) == 1)
{
Variable = 3;
}
- Мигните светодиодом 5 раз с помощью цикла for
- Чтение нескольких аналоговых входных контактов
- Как остановить цикл в последовательном мониторе?
- Одновременное чтение кнопки?
- Объектно-ориентированное программирование Arduino
- Как запустить функцию каждый 10-й раз через цикл?
- Реализация циклического буфера и Serial.print()
- Почему циклы Do While не останавливаются?
"Эффективность" очень субъективна. Использование цикла for уменьшит размер кода, но увеличит время выполнения. Использование дискретных ifs, подобных этому, увеличит размер кода, но уменьшит время выполнения., @Majenko
Какова именно роль " Переменной` в вашем коде? Могут ли значения быть произвольными, или это номера контактов, или это индексы нажатых кнопок? Вы можете использовать цикл for, чтобы перейти к массиву контактов и назначить переменную с элементом второго массива. Я не уверен, какова реальная цель здесь, поэтому трудно предложить хороший способ., @chrisl
И чем этот вопрос отличается от вашего предыдущего?, @chrisl
Ладно, это было почти то же самое, но этот вопрос можно закрыть, так как вы дали хороший ответ на первоначальный вопрос., @AndroidV11