[Новичок] Тактовая кнопка, Светодиод и Uno

Тема в разделе "Arduino & Shields", создана пользователем Student2_28, 2 дек 2014.

  1. Student2_28

    Student2_28 Нуб

    Дошел до 10 эксперимента: http://wiki.amperka.ru/конспект-arduino:кнопочный-переключатель
    Столкнувшись до него с экспериментами содержащие кнопки, решил оставить как есть. Но дойдя до 10 не сдержался и хочу узнать почему именно так оно работает. Именно что, сейчас буду вводить в курс дела.

    Когда с пина мы отправляем сигнал для светодиода то пишем:
    digitalWrite(13,HIGH); //шлем максимальный сигнал

    Но почему когда подключена кнопка.
    Когда она не нажата, при чтении пина:
    digitalRead(7); //выдает HIGH - высокий сигнал, с чего это он высокий если нет контакта с землей.
    Когда нажата выдает LOW - низкий сигнал.

    Для понятного примера:
    http://arduino.ru/Reference/DigitalRead этот код при практике выдает такие результаты:
    кнопка отпущена - светодиод горит
    кнопка зажата - светодиод не горит

    Конечно я могу запомнить и так, но зачем это сделано путая человека что при чтении HIGH и LOW означает одно значение, а при записи другое?
     
    Последнее редактирование: 31 май 2018
  2. Используйте подтягивающий резистор и почитайте про дребезг контактов и библиотеку Bounce:
    [​IMG]
    Код (Text):
    //-------------------------------------------------------------------------------------------------
    //Подключение библиотек
    //-------------------------------------------------------------------------------------------------

    #include <Bounce2.h>

    Bounce debouncer = Bounce(); //Класс для обработки кнопки
    int buttonState;
    unsigned long buttonPressTimeStamp;

    const int ButtonPin=10;

    void setup()
    {
    pinMode(ButtonPin,INPUT);

    debouncer.attach(ButtonPin);
    debouncer.interval(5);
    }

    void loop()
    {

    boolean changed = debouncer.update();
      if (changed)
      {
        int value = debouncer.read();
        if (value == HIGH)
        {
          buttonState = 0;
       
           Serial.println("Кнопка нажата");
           
        }
        else {      
          buttonState = 1;
          Serial.println("Кнопка отжата");
          buttonPressTimeStamp = millis();

        }
    }


    }

     
     
  3. Да bounce как раз и написана для этого. Картинку в инете нашел. Софт есть и причем шикарный называется fritzing