Подключение кнопки

Тема в разделе "Arduino & Shields", создана пользователем filay23, 11 май 2015.

  1. filay23

    filay23 Нерд

    Почему в void setup() не работает данный код
    Код (Text):
    int button = 2;
    int led = 8;

    void setup() {

      Serial.begin(9600);
      pinMode(led, OUTPUT);
      pinMode(button, INPUT);
    if (digitalRead(button) == HIGH) {

    digitalWrite(led, HIGH);

    }
    }
    void loop(){
    }


     
    Светодиод не горит
     
  2. ANV

    ANV Гуру

    Как кнопка и светодиод подключены?
    И вы ведь понимаете что функция setup выполняется один раз при включении питания?
     
  3. geher

    geher Гуру

    В теории диод будет гореть только при определенном подключении кнопки и при зажатой в момент включения или перезапуска ардуины кнопке.
     
  4. Salk

    Salk Гик

    Ошибки:
    1. Не указана переменная, где будет храниться состояние, считанное с кнопки.
    2. Перед if необходимо это состояние считать.
    Должно быть вот так:
    PHP:
    int button = 2;
    int led = 13;
    int a;

    void setup()
    {
      pinMode(led, OUTPUT);
      pinMode(button, INPUT);

      a = digitalRead(button);
      if (a == HIGH)
      {
        digitalWrite(led, HIGH);
      }
      else
      {
        digitalWrite(led, LOW);
      }
    }

    void loop()
    {
    }
    Да, диод будет гореть, если кнопка зажата при старте arduino. Но проблема в коде :)
     
  5. ANV

    ANV Гуру

    И зачем загромождать программу этими конструкциями, если значение кнопки больше не используется?
    Не путайте человека, все правильно.
     
  6. Salk

    Salk Гик

    Не большая переплата за наглядность... Да все верно, проверил.
    Значит проблема в подключении кнопки...
     
  7. filay23

    filay23 Нерд

    у меня просто программа написана в setup. И необходимо нажать на кнопку,что бы программа запустилась.
     
  8. filay23

    filay23 Нерд

    я понимаю, что только один раз.
    [​IMG]
     
  9. ANV

    ANV Гуру

    Тогда надо не один раз считать, а считывать до тех пор, пока кнопку не нажмут.
    Т.е. написать так:
    Код (Text):
    while(digitalRead(button) == LOW);
    digitalWrite(led, HIGH);
     
  10. filay23

    filay23 Нерд

    тогда if (digitalRead(button) == HIGH) { } не нужен?
     
  11. ANV

    ANV Гуру

    if не нужен.
    while будет работать как пустой цикл и постоянно считывать значение кнопки. Как только кнопка перестанет быть в LOW программа перейдет к следующей строчке
     
  12. filay23

    filay23 Нерд

    Спасибо огромное, буду пробовать!