Làm cách nào để đọc một nút thông qua GPIO?


15

Tôi đã xem xét bản thân mình từ loại công cụ cấp độ mới bắt đầu này từ lâu, nhưng tôi đoán tôi không thông minh như tôi nghĩ bởi vì tôi dường như gặp rắc rối đặc biệt với nó!

Vì vậy, cuối cùng tôi đã hoàn thành bài kiểm tra và có thể chơi với đồ chơi mới của mình, vì vậy điều đầu tiên tôi làm là có một màn hình hiển thị ký tự LCD được dựng lên trên UART. Tôi đã làm việc mà không có vấn đề gì, vì vậy tôi đang rất khó khăn để tìm ra lý do tại sao tôi gặp khó khăn như vậy với nút này!

Vì vậy, tôi đã thiết lập một nút tương tự như cách người ta làm với arduino; với điện trở 1k kết nối với mặt đất. Tôi đã sử dụng đồng hồ vạn năng của mình để đảm bảo rằng nút này đang hoạt động và đưa ra mức năng lượng phù hợp. Tôi SSH vào vỏ của mình, cắm nút vào pin GPIO 7 và đi vào python. Đây là những gì tôi đã thử:

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

Điều này mang lại cho tôi một vòng lặp vô tận Falsebất kể tôi nhấn nút như thế nào. Tôi cũng đã thử nó GPIO.PUD_UPvà có một vòng lặp vô tận Truethay thế. Tôi cũng đã thử nó với GPIO.PUD_OFFvà nhận được nhiều hơn False.

Am i thiếu cái gì ở đây?


Vậy bạn có công tắc nối tiếp với điện trở 1k sang GND không? Điều đó nên làm việc với GPIO.PUD_UP. Điện áp nào bạn thấy với GPIO.PUD_UPbật và nhấn nút?
John La Rooy

Hơi bối rối; công tắc được kết nối với cái gì?
Alex Chamberlain

Xin chào Michael và chào mừng bạn đến với Raspberry Pi ! Tôi đã tự do hợp nhất hai tài khoản của bạn. Cảm ơn!

Câu trả lời:


6

GPIO của tôi không có pinout, tôi phải đổi nó thànhsetmode

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)

Vì bạn đang sử dụng GPIO.BOARDpin 7 là cái có nhãn GPIO 4(GPCLK0). Nếu bạn có ý định sử dụng GPIO 7(CE1), bạn nên sử dụng GPIO.setmode(GPIO.BCM)thay thế

nhập mô tả hình ảnh ở đây

Tôi đã kiểm tra mã bằng cách chạm vào điện trở 1k từ 3V3 PowerđếnGPIO 4(GPCLK0)


Tôi gần như chắc chắn chính xác của bạn về lý do tại sao nó không hoạt động. Tôi đã có ấn tượng GPIO.BOARDlà cho sơ đồ chân của bảng như trong hình, không phải là sơ đồ đánh số pin vật lý. Khi tôi đi làm về, tôi sẽ thử và tôi chắc chắn nó sẽ hoạt động.
Michael

1

Tôi không bao giờ sử dụng "pull_up_down = GPIO.PUD_DOWN" trong quá trình thiết lập mã pin. Thử đi:

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

Như gnibbler đã nói, hãy đảm bảo PinNum dành cho BCM GPIO.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.