3x4 matrix keyboard

  • Hallo, ich habe ein 3 x4 (3 Columns und 4 Rows) Keyboard von https://www.raspiprojekt.de/kaufen/shop/ba…0212103233.html#

    Frei nach dem Link habe ich versucht den SouceCode angepasst. Ich gehe davon aus das ich einen Denkfehler drin habe. Aber ich finde ihn nicht bzw verstehe nicht die Fehlerausgabe.


    Fehlermeldung:

    Code
    matrixkey.py:15: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
     GPIO.setup(COL[j], GPIO.OUT)
    Traceback (most recent call last):
     File "matrixkey.py", line 15, in <module>
       GPIO.setup(COL[j], GPIO.OUT)
    IndexError: tuple index out of range

    PS: habe ich es richtig verstanden das von Links nach rechts die ersten 4 Pins Rows sind und die restlichen Colums?

    Wäre supi wenn ihr Licht ins dunkle bringen würdet

  • Hallo Tutter,

    bedenke bitte, dass in Python offensichtlich das erste Element den Index 0 trägt. Deine [font="Courier New"]range(x)[/font] sind entsprechend anzupassen.

    In einem Fall müsste es heißen

    Code
    for j in range(3)

    Noch besser ist es, wenn Du den Wert in [font="Courier New"]range(x)[/font] noch berechnen lässt. Dies schließt den Fehler, auf den Du hereingefallen bist, aus.
    Statt [font="Courier New"]range(3)[/font] oder [font="Courier New"]range(4)[/font] sollte es eleganter heißen [font="Courier New"]range(len(ROW))[/font] oder [font="Courier New"]range(len(COL))[/font].


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (14. Oktober 2015 um 23:42)

  • Hallo,

    der Fehler ist: da sind Kommas in der falschen Stelle, nämlich hinter der Liste für ROW und COL.

    Dadurch ist ROW und COL keine Liste, sondern ein 1-elementiges Tuple mit einer Liste an der 0-ten Position:

    Code
    >>> ROW = [7,11,13,15],
    >>> ROW
    ([7, 11, 13, 15],)
    >>> type(ROW)
    <class 'tuple'>

    Also: Komma hinter der schließenden Klammer weg, fast alles gut.

    Das `range` ist auch überfllüssig, weil zu umständlich. Iteriere direkt über die Liste:

    Code
    for j in COL:
           GPIO.setup(j, GPIO.OUT)
           GPIO.output(j, 1)

    Und natürlich an den anderen Stellen auch korrigieren.

    Gruß, noisefloor

  • Danke erstmal für eure Hilfe. Das Skript sieht nun wie folgt aus:

    Leider scheint mit der Verkabelung etwas nicht zu passen da ich beim drücken keine Eingabe sehe.
    an der 3x4 Matrix (siehe Link oben) gehe ich mit Pin 7 am Pi auf den Pin ganz Link außen vom Keyboard. Danach folgt 11 13 und 15
    Anschließend folgen die Pins 12 16 und 18

    auch die 1kohm habe ich jeweils zwischen den Pins 7,11,13,15 gesetzt

    Leider alles ohne Erfolg. Die Leitungen habe ich gemessen die sind nicht unterbrochen!

  • Die Spalten und Zeilen der Tastatur hast Du richtig angeschlossen, oder? Von Links nach Rechts auf die Tastatur geschaut ist (Ich bezeichne mal die Lötlöcher als TPins)
    TPin 1 = Spalte2
    TPin 2 = Zeile1
    TPin 3 = Spalte1
    TPin 4 = Zeile4
    TPin 5 = Spalte3
    TPin 6 = Zeile3
    TPin7 = Zeile2

    Um z.B. die "1" zu erkennen musst Du also feststellen, ob Spalte1 = TPin3 und Zeile1 = TPin2 durchgang haben. Ich nenne jetzt mal die Pins des Raspberry RPins, sonst tippe ich mich tot.
    Wenn ich den Code anschaue müssten also folgendes verkabelt sein:

    Zeilen (row)
    RPin7 an TPin2
    RPin11 an TPin7
    RPin13 an TPin6
    RPin15 an TPin4
    Spalten (col)
    RPin12 an TPin3
    RPin16 an TPin1
    RPin18 an TPin5

    Die Grafik auf https://www.raspiprojekt.de/kaufen/shop/ba…0212103233.html zeigt die Anschlüsse.

    full_tast1.gif

  • Hallo an alle ich muss das Thema noch mal aufwärmen.
    anbei mein Source Code.
    import RPi.GPIO as GPIO

    GPIO.setmode(GPIO.BOARD)

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

    ROW = [7,11,13,15]
    COL = [12,16,18]

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

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

    try:
    while(True):
    ###Put CODE HERE###
    for j in range(3):
    GPIO.output(COL[j],0)

    for i in range(4):
    if GPIO.input(ROW[i]) == 0:
    print MATRIX[i][j]
    while(GPIO.input(ROW[i]) == 0):
    pass
    GPIO.output(COL[j],0)
    except KeyboardInterrupt:
    GPIO.cleanup()

    leider musste ich feststellen das der Source wie russisch Rollet ist. Das heißt ich treffe zwar immer eine Zahl aus einer Zeile aber das muss nicht immer stimmen. Ein Beispiel: ich drücke eine 8 die Zeile 3 Treffe ich immer mit meinem Skript aber die Spalte leider nicht. So kann es sein das ich durchaus mal eine 7 mal eine 8 und auch wieder mal eine 9 als Ergebnis bekomme.
    Finde leider keinen Fehler und deswegen wollte ich euch bitten mal darüber zu schauen vielleicht seht ihr was.

  • Hallo Gemeinde.

    Ich habe bei einer 4x4 Matrix Nagel neu das problem das ich nur ausgaben auf der zweiten reihe bekomme. Aber nicht etwa 4 5 6 und B sondern 1 2 3 A

    Können die GPIO´s defekt sein? Ich weis das das mal Funktioniert hat.


    Probleme gefunden hatte Fehler im code.

    Einmal editiert, zuletzt von Elvodia (24. März 2016 um 20:36)

  • Ich hatte auch Probleme mit dem selben Programm. Mir ist bei dir aber etwas aufgefallen.

    änder das:
    for j in range(3): auf for j in range(COL[j])):

    for i in range(4): auf for i in range(len(ROW)):

    GPIO.output(COL[j],0) um auf GPIO.output(COL[j],1)

    dan starte es mit python <dateiname>.py
    sollte es nicht gehen probier python3 <dateiname>.py

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!