ฉันจะอ่านปุ่มผ่าน GPIO ได้อย่างไร


15

ฉันคิดว่าตัวเองไม่อยู่ในระดับเริ่มต้นแล้ว แต่ฉันคิดว่าฉันไม่ฉลาดเท่าที่ฉันคิดเพราะฉันดูเหมือนจะมีปัญหาในระดับพิเศษ!

ในที่สุดฉันก็เลยสอบเสร็จแล้วและสามารถเล่นกับของเล่นใหม่ของฉันได้ดังนั้นสิ่งแรกที่ฉันทำคือแสดงตัวอักษร LCD ขึ้นเหนือ UART ฉันได้รับการทำงานที่ไม่มีปัญหาดังนั้นฉันมีช่วงเวลาที่ยากมากที่หาว่าทำไมฉันมีช่วงเวลาที่ยากลำบากด้วยปุ่มนี้!

ดังนั้นฉันจึงตั้งค่าปุ่มคล้ายกับวิธีที่จะใช้กับ Arduino ด้วยตัวต้านทาน 1k ที่เชื่อมต่อกับกราวด์ ฉันใช้มัลติมิเตอร์ของฉันเพื่อให้แน่ใจว่าปุ่มทำงานและดับปริมาณพลังงานที่เหมาะสมซึ่งเป็น ฉัน SSH เข้าไปในเปลือกของฉันเสียบปุ่มลงใน GPIO พิน 7 แล้วเข้าไปที่หลาม นี่คือสิ่งที่ฉันพยายาม:

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

สิ่งนี้ทำให้ฉันวนรอบไม่รู้จบFalseไม่ว่าฉันจะกดปุ่มอย่างไร ฉันลองด้วยGPIO.PUD_UPและได้วนซ้ำTrueแทน ฉันยังพยายามด้วยและได้มากขึ้นGPIO.PUD_OFFFalse

ฉันทำอะไรบางอย่างหายไปหรือเปล่า


คุณมีสวิตช์ในซีรีย์ที่มีตัวต้านทาน 1k เป็น GND หรือไม่ GPIO.PUD_UPว่าควรจะทำงานกับ แรงดันไฟฟ้าที่คุณเห็นGPIO.PUD_UPเมื่อเปิดและกดปุ่ม?
John La Rooy

สับสนเล็กน้อย สวิตช์เชื่อมต่อกับอะไร
อเล็กซ์แชมเบอร์เลน

สวัสดีไมเคิลและยินดีต้อนรับสู่ราสเบอร์รี่ Pi ! ฉันมีอิสระในการรวมสองบัญชีของคุณ ขอบคุณ!

คำตอบ:


6

GPIO ของฉันไม่มีpinoutฉันต้องเปลี่ยนเป็นsetmode

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)

เนื่องจากคุณกำลังใช้GPIO.BOARDขา 7 GPIO 4(GPCLK0)เป็นหนึ่งที่มีข้อความ หากคุณต้องการใช้GPIO 7(CE1)คุณควรใช้GPIO.setmode(GPIO.BCM)แทน

ป้อนคำอธิบายรูปภาพที่นี่

ฉันทดสอบโค้ดโดยการแตะตัวต้านทาน 1k จาก3V3 PowerถึงGPIO 4(GPCLK0)


ฉันเกือบจะแน่ใจว่าคุณถูกต้องว่าทำไมมันไม่ทำงาน ฉันอยู่ภายใต้ความประทับใจGPIO.BOARDสำหรับพินของคณะกรรมการตัวเองตามที่แสดงในภาพไม่ใช่รูปแบบหมายเลขพินกายภาพ เมื่อฉันกลับถึงบ้านจากที่ทำงานฉันจะลองและฉันก็มั่นใจว่ามันจะใช้ได้
ไมเคิล

1

ฉันไม่เคยใช้ "pull_up_down = GPIO.PUD_DOWN" ในการตั้งค่าพิน ลองสิ่งนี้:

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

ตามที่ gnibbler กล่าวว่าตรวจสอบให้แน่ใจว่า PinNum นั้นเป็น BCM GPIO

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.