чтение цифрового пина

Тема в разделе "Arduino & Shields", создана пользователем user999, 29 апр 2017.

  1. user999

    user999 Гик

    Сходит с ума ардуино. При подключении к цифровому пину датчика уровня жидкости или джойстика, читаю цифровой пин. Ничего не нажимая и ничего не трогая, на ардуино мега наз в 1,5 сек. цифровой пин самостоятельно меняет 0 на 1 и обратно. На уно происходит тоже самое, но раз в 10 сек.
    Вот скетч
    Код (C++):
    #define BUTTON 3
    #define KRAN   4
    #define ON     LOW
    #define OFF    HIGH

    void setup() {
       Serial.begin(9600);
       pinMode(BUTTON, INPUT);
       pinMode(KRAN, OUTPUT);
       digitalWrite(KRAN, OFF);
    }

    void loop() {
      Serial.println(digitalRead(BUTTON));
      if(digitalRead(BUTTON) == 0) {
        digitalWrite(KRAN, ON);
      } else {
        digitalWrite(KRAN, OFF);
      }
      delay(100);
    }
    В чем может быть дело? Платы разные, пины тоже менял, подключаемые устройства тоже разные
     
  2. AlexU

    AlexU Гуру

    Третий пин, к которому кнопка подключена, имеет внешнюю подтяжку или нет?
     
    user999 нравится это.
  3. user999

    user999 Гик

    В случае с датчиком уровня: один провод к земле, другой к пину. Больше ничего
    В случае с кнопкой: один провод на землю, другой на +5, третий на 3-й пин.
     
  4. user999

    user999 Гик

    погуглил "внешнюю подтяжку" и проблему решил добавление в код в setup строчки
    Код (C++):
    digitalWrite(BUTTON, HIGH);
     
  5. mcureenab

    mcureenab Гуру

    У вас кнопка переключатель?

    Для простых кнопок с двумя контактами испольщуют режим пина INPUT_PULLUP.
    Кнопку включают между GNDи пином.
     
  6. AlexU

    AlexU Гуру

    Вместо двух строчек:
    Код (C++):
    pinMode(BUTTON, INPUT);
    digitalWrite(BUTTON, HIGH);
     
    можно использовать одну:
    Код (C++):
    pinMode(BUTTON, INPUT_PULLUP);
     
     
    user999 нравится это.
  7. Airbus

    Airbus Радиохулиган Модератор

    А если из прерывания?Атачинтеррапт всмысле?
     
  8. mcureenab

    mcureenab Гуру

    Да. Только это не внешняя подтяжка, а встроенная в МК.
    Одно другому не мешает. Точнее не помогает. Если пин ловит помехи, то прерывания так же спонтанно будут происходить.