我想检查是否使用 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);
当我只按下一个按钮时工作正常,但在按下其中两个按钮后,我得到一个响应,即按下了四个按钮。例子:
推S1
和S2
。
输出:[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 1]]
。
推S1
和S3
。
输出:[[0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1]]
我已经尝试使用 HIGH 和 LOW 进行检测(在这两种情况下都尝试了反向二极管)。结果相同。对于二极管,我使用的是 1N4148。这与我的连接有关还是我的代码不好?或者有没有更好的解决方案?