1

charlieplexing を使用してボタンが押されたかどうかを確認したい。テストでは、19 個のボタンを使用しました。この画像とまったく同じように接続しましたが、各セグメントに 4 つのボタンがあり、5 つのセグメント (5 つのダイオード) があります。ここに画像の説明を入力

私はこのコードを作成しました:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
pins = [5, 6, 13, 19, 26]
GPIO.setup(pins, GPIO.IN, pull_up_down=GPIO.PUD_UP)
outputs = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]

while True:
        for pin in pins:
                GPIO.setup(pin, GPIO.OUT)
                GPIO.output(pin, GPIO.LOW)
                segment = pins.index(pin)
                pinsTemp = list(pins)
                pinsTemp.remove(pin)
                for pinTemp in pinsTemp:
                        button = pinsTemp.index(pinTemp)
                        if GPIO.input(pinTemp) == GPIO.LOW:
                                outputs[segment][button] = 1;
                        else:
                                outputs[segment][button] = 0;
                GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
        print outputs;
        time.sleep(0.1);

ボタンを1つだけ押しているときは問題なく動作しますが、2つ押すと、4つのボタンが押されたという応答が得られます。例:

押しS1S2

出力: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 1]].

押しS1S3

出力:[[0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1]]

私はすでに検出に HIGH と LOW を使用してみました (どちらの場合も逆ダイオードを試しました)。同じ結果です。ダイオードは1N4148を使用しています。それは私の接続に関係しているのでしょうか、それとも私のコードが悪いのでしょうか? または、より良い解決策はありますか?

4

1 に答える 1