406|0

46

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【DigiKey创意大赛】密码锁+矩阵键盘的读取python实现 [复制链接]

 

首先我的想法是充分发挥手中的可以直接上手,最简单的方式使用的,最小方案吧。于是我决定还是弄个矩阵键盘的python程序控制看看。

# Include the library files
import RPi.GPIO as GPIO
from time import sleep
# Enter column pins
C1 = 5
C2 = 6
C3 = 13
C4 = 19
# Enter row pins
R1 = 12
R2 = 16
R3 = 20
R4 = 21

keypadPressed = -1
# Enter your PIN
secretCode = "1111"
input = ""
# Setup GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

# Set column pins as output pins
GPIO.setup(C1, GPIO.OUT)
GPIO.setup(C2, GPIO.OUT)
GPIO.setup(C3, GPIO.OUT)
GPIO.setup(C4, GPIO.OUT)
# Set row pins as input pins
GPIO.setup(R1, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(R2, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(R3, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(R4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
# This callback registers the key that was pressed
# if no other key is currently pressed
def keypadCallback(channel):
    global keypadPressed
    if keypadPressed == -1:
        keypadPressed = channel
# Detect the rising edges
GPIO.add_event_detect(R1, GPIO.RISING, callback=keypadCallback)
GPIO.add_event_detect(R2, GPIO.RISING, callback=keypadCallback)
GPIO.add_event_detect(R3, GPIO.RISING, callback=keypadCallback)
GPIO.add_event_detect(R4, GPIO.RISING, callback=keypadCallback)
# Sets all rows to a specific state. 
def setAllRows(state):
    GPIO.output(C1, state)
    GPIO.output(C2, state)
    GPIO.output(C3, state)
    GPIO.output(C4, state)
# Check or clear PIN
def commands():
    global input
    pressed = False
    GPIO.output(C1, GPIO.HIGH)
    
    # Clear PIN 
    if (GPIO.input(R1) == 1):
        print("Input reset!");
        sleep(1)
        pressed = True
    GPIO.output(C1, GPIO.HIGH)
    # Check PIN
    if (not pressed and GPIO.input(R2) == 1):
        if input == secretCode:
            print("Code correct!")           
        else:
            print("Incorrect code!")         
        pressed = True
    GPIO.output(C1, GPIO.LOW)
    if pressed:
        input = ""
    return pressed
# reads the columns and appends the value, that corresponds
# to the button, to a variable
def read(column, characters):
    global input
    GPIO.output(column, GPIO.HIGH)
    if(GPIO.input(R1) == 1):
        input = input + characters[0]
        print(input)
    if(GPIO.input(R2) == 1):
        input = input + characters[1]
        print(input)
    if(GPIO.input(R3) == 1):
        input = input + characters[2]
        print(input)
    if(GPIO.input(R4) == 1):
        input = input + characters[3]
        print(input)
    GPIO.output(column, GPIO.LOW)
try:
    while True:       
        input = input("Enter your PIN: ")
        
        # If a button was previously pressed,
        # check, whether the user has released it yet
        if keypadPressed != -1:
            setAllRows(GPIO.HIGH)
            if GPIO.input(keypadPressed) == 0:
                keypadPressed = -1
            else:
                sleep(0.1)
        # Otherwise, just read the input
        else:
            if not commands():
                read(C1, ["D","C","B","A"])
                read(C2, ["#","9","6","3"])
                read(C3, ["0","8","5","2"])
                read(C4, ["*","7","4","1"])
                sleep(0.1)
            else:
                sleep(0.1)
except KeyboardInterrupt:
    print("Stopped!")

  

How to make a door lock security system with a Raspberry Pi board _ Raspberry Pi Projects

这个是参考视频

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
争排名很幼稚——台积电工程师写给学弟学妹们的信

争排名很幼稚——台积电工程师写给学弟学妹们的信 都说三十而立,但是回头看看却几乎一事无成。 维护中东和平这种大事咱做 ...

DIY三轴加速度传感器STEP 1:震动报警

基于LPC1343与三轴加速度传感器 的震动报警装置 Author: chenzhufly Email: chenzhufly@126.com 2010-05-18 系统硬件框图: ...

【赛题大汇总】(5.23更新)2011全国各省市、高校“电子设计”选拔赛、校内赛题目汇总

本帖最后由 paulhyde 于 2014-9-15 02:58 编辑

旋转编码器解码

随着电子技术的发展,旋转编码器的应用越来越广泛。下面我们谈谈对旋转编码器的解码。 旋转编码器是用来测量转速的装置 ...

数字示波器的FFT快速傅立叶变换功能及运用

大多数示波器上都有个FFT功能,也叫快速傅立叶变换,但很多人不了解这个功能是做什么用的,百度以后又会遇到各种各样的高数公式 ...

【LAUNCHXL-CC1350-4】- 0:开箱帖

本帖最后由 MianQi 于 2021-6-7 17:27 编辑 被TI这款产品2.4G+433M的双频段搭配吸引,申请参予评测活动。 说到蓝牙,最早 ...

第七篇 UART的使用-轮询与中断方式

GD32L23x的UART有很多实用的功能,比如接收超时中断、接收缓冲区FIFO等。不过首先还是要掌握基本的功能。 一、初始化 初 ...

为了解决网络拥塞,Wi-Fi 6采用了哪些黑科技?

Wi-Fi的真正普及,是从2008年的Wi-Fi 4(802.11n)开始。可以说,从那时起,Wi-Fi真正成为家庭和企业互联网接入最常见的方式。支 ...

关于mos作开关的缺陷

例如nmos 在gs为0时,d向s流的电流可以阻断,但由于寄生二极管的存在,导致电流由s向d极流。简而言之,mos作开关时,只能可靠截 ...

【兆易GD32H759I-EVAL】 外接5寸LCD显示屏测试

本帖最后由 TL-LED 于 2024-6-1 14:20 编辑 测试驱动手上的5寸分辨率800x480显示屏。 一、硬件电路 1.1、开发 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表