Есть три кнопки, где только одна может быть нажата одновременно. Я хочу установить переменную для этого. Как?
В принципе, у меня есть три кнопки, которые соответствуют контактам с 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 - Кнопка для запуска/остановки цикла
- Одновременное чтение кнопки?
- Объектно-ориентированное программирование Arduino
- Как запустить функцию каждый 10-й раз через цикл?
- Реализация циклического буфера и Serial.print()
"Эффективность" очень субъективна. Использование цикла for уменьшит размер кода, но увеличит время выполнения. Использование дискретных ifs, подобных этому, увеличит размер кода, но уменьшит время выполнения., @Majenko
Какова именно роль " Переменной` в вашем коде? Могут ли значения быть произвольными, или это номера контактов, или это индексы нажатых кнопок? Вы можете использовать цикл for, чтобы перейти к массиву контактов и назначить переменную с элементом второго массива. Я не уверен, какова реальная цель здесь, поэтому трудно предложить хороший способ., @chrisl
И чем этот вопрос отличается от вашего предыдущего?, @chrisl
Ладно, это было почти то же самое, но этот вопрос можно закрыть, так как вы дали хороший ответ на первоначальный вопрос., @AndroidV11