Arduino digitalBaca salah membaca


10

Saya telah mengatur UNO Arduino saya dengan 4 kabel input, mereka terhubung ke port 10, 11, 12, 13, mereka terhubung ke papan tempat memotong roti saya dengan apa pun kecuali kabel.

Kode saya hanyalah:

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

Masalahnya adalah, setelah saya menyambungkan pin ke 5V atau 3V3 sebentar, bacaan akan mulai gila seperti: 1 0 0 1 0 1 1 1 0 1 0 1 1 0 0 Tanpa rasa! Tanpa kabel yang terhubung langsung ke VCC saya (5V atau 3V3) bacaannya terus berubah, padahal seharusnya nol!

Apakah Arduino saya mati? Bagaimana saya bisa memperbaikinya?


Cukup sambungkan pin pemicu Anda ke ground saat tidak terpicu!

Jawaban:


18

Apa yang Anda miliki disebut Floatingpin. Pin Input Digital sangat sensitif terhadap perubahan, dan kecuali didorong secara positif ke satu kondisi (Tinggi atau Rendah), akan mengambil kapasitansi liar dari sumber terdekat, seperti papan tempat memotong roti, jari manusia, atau bahkan udara. Setiap kabel yang terhubung akan bertindak seperti antena kecil dan menyebabkan kondisi input berubah. Dan maksud saya setiap kawat, jejak di papan, kawat ke papan tempat memotong roti, pin papan tempat memotong roti, bahkan pin logam dari IC itu sendiri.

Ini menjadi referensi di halaman referensi Arduino:

Jika pin tidak terhubung ke apa pun, digitalRead () dapat mengembalikan TINGGI atau RENDAH (dan ini dapat berubah secara acak).

Jika Anda melihat Tutorial Pin Digital Arduino :

Ini juga berarti, bahwa pin input dengan tidak ada yang terhubung ke mereka, atau dengan kabel yang terhubung ke mereka yang tidak terhubung ke sirkuit lain, akan melaporkan perubahan acak dalam keadaan pin, mengambil suara listrik dari lingkungan, atau secara kapasitif menghubungkan keadaan dari pin terdekat.

Seringkali berguna untuk mengarahkan pin input ke kondisi yang diketahui jika tidak ada input. Ini dapat dilakukan dengan menambahkan resistor pullup (ke + 5V), atau resistor pull-down (resistor ke ground) pada input, dengan 10K menjadi nilai umum. Ada juga resistor pullup 20K yang nyaman dibangun ke dalam chip Atmega yang dapat diakses dari perangkat lunak. Resistor penarik bawaan ini diakses dengan cara berikut.

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

Resistor tarikan yang lemah ini memaksa keadaan pin input ke kondisi yang diketahui, dan mudah ditimpa oleh tegangan input yang lebih kuat, seperti koneksi langsung ke ground atau + 5v.


2
Bagaimana dengan menyebutkan pinMode(pin, INPUT_PULLUP)? Mudah diingat, dan sangat sulit untuk dikacaukan.
piojo

6

Ini normal. Kecuali jika input terhubung ke sesuatu, itu akan menunjukkan TINGGI atau RENDAH atau terus berubah. Ini dijelaskan oleh halaman referensi digitalRead di situs web Arduino.

Pin input berperilaku dengan beberapa kapasitansi kecil, jadi menghubungkan secara singkat ke 3V3 atau 5V akan mengisi daya kapasitansi. Anda mungkin menemukan efek yang sama menggunakan jari telanjang.

Anda dapat menghindari masalah dengan menambahkan resistor nilai besar antara pin dan GND.

Tanyakan pada diri sendiri mengapa Anda mengharapkan nol?


1
pinMode (pin, INPUT_PULLUP);
jippie
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.