Кнопки а Ардуино

EBR105

✩✩✩✩✩✩✩
4 Апр 2021
3
0
Хочу сделать так что если нажать на одну кнопку, то в мониторе показывалось 1, если нажато 2 кнопки, то цифра 2, а если 3 кнопки, то цифра 3. Помогите пожалуйста. Мне нужно именно знать какие функции там нужны, а остальное я попробую сам, но если не получиться, обращусь
 

andyparker

✩✩✩✩✩✩✩
14 Окт 2020
18
1
C++:
const int button_1_pin = 5;  // пины
const int button_2_pin = 6;  // к которым
const int button_3_pin = 7;  // подключены кнопки

void setup() {
  pinMode(button_1_pin, INPUT);
  pinMode(button_2_pin, INPUT); // кнопки подтянуть к земле 10кОм резисторами
  pinMode(button_3_pin, INPUT);
  digitalWrite(button_1_pin, LOW);
  digitalWrite(button_2_pin, LOW);
  digitalWrite(button_3_pin, LOW);
  Serial.begin(9600);
}

void loop() {
  int sum = digitalRead(button_1_pin) + digitalRead(button_2_pin) + digitalRead(button_3_pin);
  if (sum == 1) {
    Serial.println("1");
  }
  else if (sum == 2) {
    Serial.println("2");
  }
  else if (sum == 3) {
    Serial.println("3");
  }
}
 
Изменено:

poty

★★★★★★✩
19 Фев 2020
3,237
942
@andyparker, а нафига здесь класс? И функция click_button? digitalRead ставите вместо click_button в строку 44 и получаете идентично работающий код.
Но! Антидребезга нет!
Меня также впечатлило то, что Вы задаёте подтяжку к +5В, в комментариях пишете о подтяжке к земле и тут же отменяете подтяжку к +5В. Зачем?
Короче, вся эта штука превращается в одну строку в команде loop().
 
  • Лойс +1
Реакции: andyparker

andyparker

✩✩✩✩✩✩✩
14 Окт 2020
18
1
Избыточное цитирование
@andyparker, а нафига здесь класс? И функция click_button? digitalRead ставите вместо click_button в строку 44 и получаете идентично работающий код.
Но! Антидребезга нет!
Меня также впечатлило то, что Вы задаёте подтяжку к +5В, в комментариях пишете о подтяжке к земле и тут же отменяете подтяжку к +5В. Зачем?
Короче, вся эта штука превращается в одну строку в команде loop().
Недавно проснулся и написал лишнего, спасибо за замечания :). А антидребезг тут не нужен, кнопки остаются нажатыми непрерывно, не думаю, что флуктуации в несколько миллисекунд (а то и меньше) непосредственно при нажатии сыграю роль.
 

poty

★★★★★★✩
19 Фев 2020
3,237
942
@andyparker, для упрощённой задачи из первого сообщения - нет, не нужен. Но если для вывода будет использоваться что-то более-менее скоростное, то этот дребезг наделает много проблем. Вывод в монитор порта даже в первично поставленной задаче может выглядеть странно (скорость вывода ничем не ограничена), я думаю, ТС хотел выводить в порт только при смене статуса, а вот здесь уже антидребезг будет нужен.
 

М__

✩✩✩✩✩✩✩
27 Апр 2021
5
0
:) для andyparker:
можно ведь так:

/// skipped
void loop()
{
Serial.println( digitalRead(button_1_pin) + digitalRead(button_2_pin) + digitalRead(button_3_pin)):
}