Как мне прочитать кнопку через GPIO?

15

Я считал себя из такого рода вещей начального уровня давным-давно, но я полагаю, что я не настолько умен, как я думал, потому что у меня, похоже, исключительный уровень проблем с этим!

Итак, я наконец-то закончил экзамены и могу поиграть со своей новой игрушкой, поэтому первым делом я настроил ЖК-дисплей персонажа над UART. У меня это работает без проблем, поэтому мне очень трудно понять, почему мне так тяжело с этой кнопкой!

Итак, я установил кнопку, аналогичную той, которую можно сделать с Arduino; с резистором 1 кОм, подключенным к земле. Я использовал свой мультиметр, чтобы убедиться, что кнопка работает, и выдает правильное количество энергии, которое есть. Я подключаю SSH к своей оболочке, вставляю кнопку в контакт 7 GPIO и захожу в python. Вот что я попробовал:

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_OFFи получил больше False.

Я что-то здесь упускаю?

Майкл
источник
Таким образом, у вас есть переключатель последовательно с резистором 1 к GND? Это должно работать с GPIO.PUD_UP. Какое напряжение вы видите при GPIO.PUD_UPвключенной и нажатой кнопке?
Джон Ла Рой
Немного смущен; к чему подключен переключатель?
Алекс Чемберлен
Привет Майкл и добро пожаловать в Raspberry 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)вместо

введите описание изображения здесь

Я проверил код, коснувшись резистора 1 кОм от 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"

Как сказал Гнибблер, убедитесь, что PinNum предназначен для BCM GPIO.

Мэтью
источник