Python - Принятие строки и передача в виде шестнадцатеричного значения для отображения в GPIO. - PullRequest
0 голосов
/ 30 апреля 2018

Я работаю над проектом Raspberry Pi, где я хочу получить информацию от пользователя, а затем отобразить ее на 8-сегментном светодиодном дисплее. ниже код:


pins = [11,12,13,15,16,18,22,7]
dats = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80]

def setup():
        GPIO.setmode(GPIO.BOARD)
        for pin in pins:
                GPIO.setup(pin, GPIO.OUT)   # Set pin mode as output
                GPIO.output(pin, GPIO.LOW)


def writeOneByte(val):
        print val
        GPIO.output(11, val & (0x01 << 0))
        print (val & (0x01 << 0))
        GPIO.output(12, val & (0x01 << 1))
        print (val & (0x01 << 1))
        GPIO.output(13, val & (0x01 << 2))
        print (val & (0x01 << 2))
        GPIO.output(15, val & (0x01 << 3))
        print (val & (0x01 << 3))
        GPIO.output(16, val & (0x01 << 4))
        print (val & (0x01 << 4))
        GPIO.output(18, val & (0x01 << 5))
        print (val & (0x01 << 5))
        GPIO.output(22, val & (0x01 << 6))
        print (val & (0x01 << 6))
        GPIO.output(7,  val & (0x01 << 7))
        print (val & (0x01 << 7))

def loop():  # ignore this loop fo now
        while True:
                for dat in dats:
                        writeOneByte(dat)
                        time.sleep(0.5)

def destroy():
        for pin in pins:
                GPIO.output(pin, GPIO.LOW)
        GPIO.cleanup()             # Release resource

if __name__ == '__main__':     # Program start from here
        setup()
        try:
            usernumber = input('Enter a number [0-9] to be displayed: ')
            usernumber = format(usernumber,'#04x')
            usernumber = str(usernumber)
            print 'The hex format is:',usernumber.strip()
            usernnumber = usernumber.strip()
            writeOneByte(usernumber)
            #writeOneByte(0xff)
            time.sleep(10)
            destroy()
        except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the child program destroy() will be executed.
                destroy()

когда я запускаю код и после того, как я ввожу его, я получаю сообщение об ошибке:

Enter a number [0-9] to be displayed: 3
The hex format is: 0x03
0x03
Traceback (most recent call last):
  File "9.segment_try.py", line 53, in <module>
    writeOneByte(usernumber)
  File "9.segment_try.py", line 17, in writeOneByte
    GPIO.output(11, val & (0x01 << 0))
TypeError: unsupported operand type(s) for &: 'str' and 'int'

Я пробовал много вещей, но я не уверен, что я делаю неправильно.

1 Ответ

0 голосов
/ 30 апреля 2018

Вам необходимо привести значение входной строки к типу int. Можно сделать это через:

int(val, 0)

Ex:

val = "0x03"
int(val, 0)  # will return 3
...