Bagaimana cara membaca tombol melalui GPIO?

15

Saya menganggap diri saya keluar dari hal-hal tingkat pemula semacam ini sejak lama, tapi saya kira saya tidak secerdas yang saya kira karena saya tampaknya memiliki tingkat masalah yang luar biasa dengan itu!

Jadi saya akhirnya menyelesaikan ujian dan dapat bermain dengan mainan baru saya, jadi hal pertama yang saya lakukan adalah mendapatkan tampilan karakter LCD yang dipasang di atas UART. Saya mendapatkan bahwa tidak ada masalah, jadi saya mengalami kesulitan untuk mencari tahu mengapa saya mengalami kesulitan dengan tombol ini!

Jadi saya sudah menyiapkan tombol yang mirip dengan cara orang dengan Arduino; dengan resistor 1k yang terhubung ke ground. Saya menggunakan multimeter saya untuk memastikan bahwa tombolnya berfungsi dan memadamkan jumlah daya yang tepat. Saya SSH ke shell saya, pasang tombol ke GPIO pin 7 dan masuk ke python. Inilah yang saya coba:

GPIO.pinout(GPIO.BOARD)
GPIO.setup(7,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
while 1==1:
    inputval = GPIO.input(7)
    print inputval

Ini memberi saya loop tanpa akhir Falseterlepas dari bagaimana saya menekan tombol. Saya mencobanya GPIO.PUD_UPjuga dan mendapat loop tak berujung Truesebagai gantinya. Saya juga mencobanya GPIO.PUD_OFFdan mendapat lebih banyak False.

Apakah saya melewatkan sesuatu di sini?

Michael
sumber
Jadi Anda memiliki saklar seri dengan resistor 1k ke GND? Itu harus bekerja dengan GPIO.PUD_UP. Tegangan apa yang Anda lihat dengan GPIO.PUD_UPhidup dan tombol ditekan?
John La Rooy
Sedikit bingung; apa saklar yang terhubung?
Alex Chamberlain
Halo Michael dan selamat datang di Raspberry Pi ! Saya telah mengambil kebebasan untuk menggabungkan kedua akun Anda. Terima kasih!

Jawaban:

6

GPIO saya tidak punya pinout, saya harus mengubahnyasetmode

import time
from RPi import GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
while True:
    inputval = GPIO.input(7)
    print inputval
    time.sleep(1)

Karena Anda menggunakan GPIO.BOARDpin 7 adalah yang berlabel GPIO 4(GPCLK0). Jika Anda bermaksud untuk menggunakan GPIO 7(CE1), Anda harus menggunakan GPIO.setmode(GPIO.BCM)bukan

masukkan deskripsi gambar di sini

Saya menguji kode dengan menyentuh resistor 1k dari 3V3 PowerkeGPIO 4(GPCLK0)

John La Rooy
sumber
Saya hampir yakin benar tentang mengapa itu tidak berhasil. Saya berada di bawah kesan GPIO.BOARDadalah untuk pinout dari papan itu sendiri seperti yang ditunjukkan dalam gambar, bukan skema penomoran pin fisik. Ketika saya pulang kerja, saya akan mencobanya dan saya yakin itu akan berhasil.
Michael
1

Saya tidak pernah menggunakan "pull_up_down = GPIO.PUD_DOWN" dalam pengaturan pin. Coba ini:

GPIO.setmode(GPIO.BCM)
GPIO.setup(PinNum,GPIO.IN)
while 1==1:
    if GPIO.input(PinNum)==1:
        print "True"
    else:
        print "False"

Seperti yang dikatakan gnibbler, pastikan PinNum untuk BCM GPIO.

Matius
sumber