Arduino digitalЧітання читати неправильно


10

Я встановив свою Arduino UNO з 4 вхідними проводами, вони підключаються до портів 10, 11, 12, 13, вони підключені до моєї дошки, не маючи на ній нічого, крім дроту.

Мій код був би просто:

Serial.println(digitalRead(13));
Serial.println(digitalRead(12));
Serial.println(digitalRead(11));
Serial.println(digitalRead(10));

Справа в тому, що після того, як я коротко підключую штифт до 5V або 3V3, зчитування почне починати гайки на зразок: 1 0 0 1 0 1 1 1 0 1 0 1 1 0 Без жодного сенсу! Не маючи жодного проводу, підключеного безпосередньо до мого VCC (5V або 3V3), показник постійно змінюється, коли він повинен бути нульовим!

Мій Ардуїно мертвий? Як я можу це виправити?


Просто підключіть контактний штифт до землі, коли він не спрацьовує!

Відповіді:


18

Те, що у вас є, називається Floatingшпилькою. Цифрові штифти введення дуже чутливі до змін, і, якщо вони не будуть приведені до того чи іншого стану (високий або низький), вони підберуть заблоковану ємність з сусідніх джерел, наприклад, дощок, людських пальців або навіть повітря. Будь-який провід, підключений до нього, буде діяти як маленька антена і призведе до зміни стану входу. І я маю на увазі будь-який дріт, слід на дошці, дріт до макетної дошки, штифтову дошку, навіть металевий штифт самої СК.

Про це йдеться на довідковій сторінці Arduino:

Якщо штифт не підключений ні до чого, digitalRead () може повернути або ВИСОК, або НИЗКО (і це може змінитися випадковим чином).

Якщо ви подивитесь на підручник з цифрових контактів Arduino :

Це також означає, що вхідні штифти, що не підключаються до них, або з проводами, підключеними до них, які не підключені до інших мікросхем, повідомлять, здавалося б, про випадкові зміни в стані штифта, піднімаючи електричний шум від навколишнього середовища або ємнісно з'єднуючи стан шпильки поблизу.

Часто корисно керувати вхідним штифтом до відомого стану, якщо немає вводу. Це можна зробити, додавши на вході резистор підтягування (до + 5 В) або резистор, що випадає (резистор на землю), при цьому 10 К є загальним значенням. Також є зручні 20K підтягувальні резистори, вбудовані в мікросхему Atmega, до яких можна отримати доступ із програмного забезпечення. До таких вбудованих резисторів, що вбудовуються, доступний наступним чином.

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

Ці слабкі витяжні резистори змушують стан вхідного штифта у відомий стан і легко перезаписуються більш сильними вхідними напругами, як-от пряме з'єднання із землею або + 5В.


2
Як щодо згадки pinMode(pin, INPUT_PULLUP)? Це легко запам’ятати і насправді важко викрутити.
piojo

6

Це нормально. Якщо вхід не підключено до чогось, він відображатиметься ВИСОКИЙ або НИЗЬКИЙ або постійно змінюється. Це описано на довідковій сторінці DigitalRead на веб-сайті Arduino.

Вхідний штифт поводиться з невеликою ємністю, тому короткочасне підключення до 3V3 або 5V зарядить ємність. Ви можете виявити подібний ефект за допомогою голого пальця.

Ви можете уникнути проблеми, додавши резистор великого значення між штифтом та GND.

Запитайте себе, чому ви очікуєте нуля?


1
pinMode (контактний, INPUT_PULLUP);
jippie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.