Struggling with if's, variables and returns

Hi All!

So my below code is me trying to grab individual number inputs from a membrane keypad and pass them into a variable. Obviously I need to keep adding the new character to the variable ‘finalPW’ until it is 4 digits long and then of course I need to return it to be used in a function that compares it to a list of other strings.

My issue is that the variable is either reset each time, so I only ever get one digit, or it simply states that the ‘finalPW’ variable is referenced before its assigned. Been working on it like 3 weeks now to no avail!

Help me Oracles!

import RPi.GPIO as GPIO
import time 

GPIO.setmode(GPIO.BCM)

MATRIX = [['D', '#', '0', '*'],
          ['C', '9', '8', '7'],
          ['B', '6', '5', '4'],
          ['A', '3', '2', '1']]

COL = [21, 20, 16, 26]
ROW = [19, 13, 6, 5]


def passwordinit():
    finalPW = ""
    return finalPW



for j in range(4):
    GPIO.setup(COL[j], GPIO.OUT)
    GPIO.output(COL[j], 1)

for i in range(4):
    GPIO.setup(ROW[i],GPIO.IN,pull_up_down=GPIO.PUD_UP)



def keypadcharacter():
    finalPW = ""
    if len(finalPW) < 4:
        try:
                while (True):
                    for j in range(4):
                        GPIO.output(COL[j] ,0)
                        for i in range (4):
                            if GPIO.input(ROW[i]) ==0:
                                pwS = MATRIX[i][j]
                                time.sleep(0.5)
                                finalPW += pwS
                                print finalPW
                                while(GPIO.input(ROW[i]) ==0):
                                    pass
                        GPIO.output(COL[j],1)
        except KeyboardInterrupt:
             GPIO.cleanup()
        return finalPW
    else:
        print finalpw

passwordinit()
keypadcharacter()

Many Thanks!
Matt

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.