极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9838|回复: 3

工坊里边有没有人会矩阵键盘?

[复制链接]
发表于 2014-8-12 16:27:46 | 显示全部楼层 |阅读模式
本帖最后由 49741933o 于 2014-8-12 16:32 编辑

我看了看,工坊里边只有一个帖子是关于矩阵键盘的。于是我又百度,又谷歌,又是arduino官网看英文的,还是没找到像要的结果。所以我发了这个求助帖,一方面希望弥补工坊里关于冷门器件的帖子,另一方面也希望大神能帮我解决这个问题。

==========================问题描述==============================
问题描述:最近在玩电子秤,需要键盘的输入,退格,确认这三个功能。但是在实现的过程中遇到了很多的问题,着实解决不了啊。首先遇到的问题就是把字符数组转化为整形数字,因为我定义的是一个二维的字符数组。我需要通过键盘输入单价(但是单价这个不是数字,是字符,故而不能和一个数相乘,见:http://www.geek-workshop.com/thread-9268-1-1.html),然后用单价乘以已知的重量得出总价。于是我在工坊里找到了atof函数,见:http://www.geek-workshop.com/thread-10488-1-1.html。在我下面的代码运行好像不行,不知道为什么。

=========================我也来分割分割,代码及我的操作===============
[pre lang="arduino" line="1" file="稍微修改下的键盘输入代码"]/*这是我稍微修改example的来的*/
#include <Keypad.h>
char a[16];//4*4的矩阵键盘,用来存储字符
int i,count=0;//count用来计算字符串的长度
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'.','0','#','D'}     // ← ←不知道字符形式的小数点和整数形式的小数点有什么区别?
};
byte rowPins[ROWS] = {4,5,6,7}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8,9,10,11}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
}
  
void loop(){
  char key = keypad.getKey();
  while(key != '#'){
   for(i=0;i<16;i++)
    a=key;
    count++;
    key = keypad.getKey();
  }
  if (key == '#'){  //这个’#‘相当于确认键。
   for(i=0;i<count;i++)
   Serial.println(a);
  }
}[/code]这段函数我是想通过从keypad.getKey()得到数字形式的字符,即”3“,等等(我使劲按键盘,但是串口监视器没反应,无解了......)。然后储存在字符数组a[]里面,最后通过atof函数将字符转化为数字(这个函数没写),从而实现单价的输入。


附带照片两张:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-8-13 23:46:22 | 显示全部楼层
这个实现很简单,你没有去看库底层的内容。实现数字很简单。个人觉得Arduino用这个方案不可取,占用IO口太多了,用电阻键盘,一个io口搞定
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-14 15:18:45 | 显示全部楼层
lm4766 发表于 2014-8-13 23:46
这个实现很简单,你没有去看库底层的内容。实现数字很简单。个人觉得Arduino用这个方案不可取,占用IO口太多 ...

有没有详细介绍啊?给个实物看看
回复 支持 反对

使用道具 举报

发表于 2014-8-14 20:09:15 | 显示全部楼层
用你原来8个IO口的话,把数组里面引号直接去掉就可以
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 20:11 , Processed in 0.038264 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表