Невозможно сделать действительно основную работу скетча

button input pull-up

Я учился инкапсулировать свой код в функции, и один из примеров, над которым я работал, - это простая кнопка INPUT_PULLUP. Когда я загружаю скетч с сайта arduino, все работает, поэтому я знаю, что это не аппаратная проблема. Однако с кодом ниже кнопка просто не опустится низко.

Я просто не вижу, в чем проблема, и я чувствую себя действительно безнадежно, что я даже не могу сделать простую вещь. Буду благодарен за любой совет.

int button_pin = 2;
int button_state = 0;

void setup() {
  Serial.begin(9600);
  pinMode(button_pin, INPUT_PULLUP);
}

void loop() {
  Button();
}

void Button() {
  // Read button(s)
  button_state = digitalRead(button_pin);
  if (button_state = LOW) {
    Serial.println(button_state);
  };
};

, 👍1

Обсуждение

У вас есть ошибка в операторе if. Для проверки равенства вам нужно использовать == (двойной знак равенства). Единственное = " - это присвоение. Таким образом, вы фактически присваиваете НИЗКОЕ значение " button_state. И присвоение вернет значение, которое вы присвоили, в данном случае НИЗКОЕ, оно же 0, оно же ложь. Таким образом, оператор if никогда не будет введен, @chrisl

Спасибо, Крис, я попробую это сделать и сообщу. Я не знаю, что бы я делал без вас, люди. Вчера я потратил на это несколько часов, перепробовав все, что мог придумать, но безуспешно., @Zhelyazko Grudov


1 ответ


Лучший ответ:

1
#define button_pin 2  //определение контакта кнопки как pin 2
bool button_state = 0; //состояние кнопки равно либо 0/1, поэтому используйте bool
void Button();
void setup()
{
    Serial.begin(9600);
    pinMode(button_pin, INPUT_PULLUP); //Настройка ввода в качестве подтягивания ввода
}

void loop()
{
    Button();
}

void Button()
{
    
    button_state = digitalRead(button_pin); //Считывает состояние кнопки
    if (button_state == LOW)
    {
        Serial.println(button_state); //состояние кнопки печати при ее низком уровне
    }
}

В своем коде вы использовали оператор = вместо == в цикле if. Просто, если вы измените его, он начнет работать, также вы можете использовать мой приведенный выше код, он такой же, как и ваш, просто я внес некоторые незначительные изменения, такие как использование bool вместо int и использование #define вместо объявления ПИН, где вы использовали int

,

Большое вам спасибо, что нашли время ответить. Это действительно полезно, и я ценю это., @Zhelyazko Grudov

@Желязкогрудов Я рад, что это тебе помогло. Удачи :), @Maaz Sk