11720浏览
查看: 11720|回复: 3

[入门] “4*4 薄膜数字键盘”使用教程

[复制链接]
本帖最后由 云天 于 2019-9-10 10:56 编辑

    参考屌丝王小明 |用OBLOQ物联网模块做一个防沉迷盒子的帖子。


    可设置“密码”,操作相应引脚。

    “4*4 薄膜数字键盘”,该键盘带有8P杜邦头,间距2.54mm。可插上排针,然后连接到Arduino,使用非常简单。键盘背面白色贴纸可揭去,能牢固粘贴于机箱表面。你可以用它输入数字参数等信息,特别是对于LCD模块,GSM/GPRS模块等需要参数输入的模块。薄膜防水耐用,可经受几万次按压。

内部连线图

“4*4 薄膜数字键盘”使用教程图1

接线图

[mw_shl_code=c,true]#include <Arduino.h>
char adminPassword[5] = "4869";//设置密码
char inputPassword[5] = "     ";//存放输入密码,位数为5,最后一位放置'/0'
unsigned char i = 0;
unsigned char KeyCodeMap[4][4] = {
  {0x31,0x32,0x33,0x41},//1、2、3、A
  {0x34,0x35,0x36,0x42},//4、5、6、B
  {0x37,0x38,0x39,0x43},//7、8、9、C
  {0x2A,0x30,0x23,0x44}//*、0、#、D
  };
unsigned char KeySta[4][4] = {
  {1,1,1,1},
  {1,1,1,1},
  {1,1,1,1},
  {1,1,1,1}
};
boolean matchFlag = 0;//比对标识
void pinmode()//引脚初始化
{
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(4,INPUT_PULLUP);
  pinMode(5,INPUT_PULLUP);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  }
void scanKeyboard() {//扫描按键
    char j=0;
    digitalWrite(i+6,LOW);//引脚6,7,8,9设置低电平,按行扫描
    for(j = 0; j < 4; j++) {
    KeySta[j] = digitalRead(j+2);
    }
    digitalWrite(i+6,HIGH);
    i++;
    if(i==4) {
      i=0;
    }
}

void checkKeySta() {
  static unsigned char KeyStaPrevious[4][4] = {
  {1,1,1,1},
  {1,1,1,1},
  {1,1,1,1},
  {1,1,1,1}
};
  char j = 0;
  for(j = 0; j < 4; j++) {
    if(KeyStaPrevious[j] != KeySta[j]){
      if(KeyStaPrevious[j] == 0){//当相应按键被按下
      digitalWrite(10,HIGH);
      delay(200);
      digitalWrite(10,LOW);
        KeyAction(i,j);
      }
      KeyStaPrevious[j]=KeySta[j];
    }
  }
}

void KeyAction(char i,char j){
  for(char k = 1;k<5;k++ ){//将输入的密码移位存储
       inputPassword[k-1]=inputPassword[k];
   }
  if(KeyCodeMap[j] == 0x23){//以“#”号做为输入结束符
    inputPassword[4]='\0';
    matchFlag = compare();
    clearInput();
  }
  else{
     inputPassword[4] = KeyCodeMap[j];
   }
  
}

boolean compare(){//输入的密码与设定密码比较
  String a,b;
  a=inputPassword;
  b=adminPassword;
  if(a==b){
    return 1;
  }
  else {
    return 0;
  }
}
void clearInput(){//清空输入密码
  for(char j = 0; j < 5; j++){
    inputPassword[j] = ' ';
  }
}
void checkMatchFlag(){
  if(matchFlag){//比对成功设置相应引脚
    digitalWrite(10,HIGH);
    digitalWrite(11,HIGH);
    delay(2000);
    digitalWrite(11,HIGH);
    delay(3000);
    digitalWrite(10,LOW);
    matchFlag = 0;  
  }
}
void setup() {
    pinmode();
}

void loop() {
    scanKeyboard();//扫描键盘
    checkKeySta();//记录按下的键码
    checkMatchFlag();//密码比对
}[/mw_shl_code]


演示视频

设置的密码为:4869



密码箱操作演示视频

请叫我林辰  见习技师

发表于 2019-9-8 18:51:21

可以学习学习
回复

使用道具 举报

gada888  版主

发表于 2019-9-11 10:35:25

支持
回复

使用道具 举报

20060606  高级技匠

发表于 2020-8-7 05:23:24

感谢分享,我正需要这方面的内容
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail