Есть три кнопки, где только одна может быть нажата одновременно. Я хочу установить переменную для этого. Как?

loop

В принципе, у меня есть три кнопки, которые соответствуют контактам с 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, потому что природа этой идеи кажется мне настолько нетрадиционной для их использования.

, 👍0

Обсуждение

"Эффективность" очень субъективна. Использование цикла for уменьшит размер кода, но увеличит время выполнения. Использование дискретных ifs, подобных этому, увеличит размер кода, но уменьшит время выполнения., @Majenko

Какова именно роль " Переменной` в вашем коде? Могут ли значения быть произвольными, или это номера контактов, или это индексы нажатых кнопок? Вы можете использовать цикл for, чтобы перейти к массиву контактов и назначить переменную с элементом второго массива. Я не уверен, какова реальная цель здесь, поэтому трудно предложить хороший способ., @chrisl

И чем этот вопрос отличается от вашего предыдущего?, @chrisl

Ладно, это было почти то же самое, но этот вопрос можно закрыть, так как вы дали хороший ответ на первоначальный вопрос., @AndroidV11


1 ответ


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;  
}
,