USB 键盘计算器
userHead Zoologist 2020-10-09 15:23:04

去年的时候,阿米洛推出一款名为“计算器”的机械键盘,键盘右侧的显示屏和小键盘区域可以组成计算器来使用。这次,我通过 Arduino 制作一个设备来实现将普通USB键盘变成带有计算器功能的键盘。

projectImage

先来看下视频吧!

硬件清单
1x
Arduino Pro Micro 3.3V
1x
USB Host Shield Mini
1x
SYN6288 语音模块
1x
1602 LCD

我们的目标是通过设计一个设备,让普通键盘也有计算器的功能,此外我们还额外加入语音播报。设计思路是在键盘和PC之间插入我们的计算器设备,将所有的按键信息原封不动的发送给主机,另外如果发现有小键盘按下时将按键信息解析给计算9器使用。

projectImage

PCB 设计如下:

projectImage

3D 预览如下:

projectImage

硬件设计完成后就要开始软件设计了。 

1.  因为计算机计算范围可能超过 Arduino 的整数范围,所以需要选择一个“大数库”,最终实验确定使用 nickgammon编写的BigNumber Library【参考1】; 

2. 我们使用 USB Host Shield Library 来完成 USB 键盘按键信息的解析;通过实验确定的小键盘区键值如下:

projectImage

3. 有了上面两步,就可以进行计算的设计了。 设计上使用状态机的描述,这是一种程序设计的常用方法,能够让帮助代码设计结构清晰,封装性好(多说一句,很多年前我差点改行去做软件。有一段时间,我所在的工厂传说要把主板生产线搬迁到广东东莞,当时的东莞号称“十大暴力城市”之首,坊间也充满各种砍手抢手机的新闻。为了提前做准备,我和另外一个同事联系了软件组,希望转过去写软件不用跟着搬迁。面试的一道题目是如何用一个按键设计自动控制电动门。最终的面试结果是对方的老板没收我们,不过他在讲解面试题目解析的时候顺便给我们讲了一下状态机的设计方法,让我茅塞顿开受益匪浅。所以,开卷有益,多多跳槽也是很有益处的)。

下面这个图的意思是这样的:上电之后,程序处于 Status0,收到 NUM (数字) 按键后会转移到 Status1 中(这也意味着只接收数字键);之后如果再收到 NUM,那么仍然维持在 Status1 (第一个运算数变大),如果收到 DOT (小数点),那么转移到 Status2;如果收到 OP(运算符),那么转移到 Status3…… 下面 NUM 表示 0-9 的数字;DOT 表示 “.” 这个小数点;OP 表示“+-*/”运算符; ENTER 作为 “=”。从这里也能看出来,如果没有对应文档的话,直接查看代码简直是一场噩梦。

projectImage

4. 为了更加接近普通计算器,特别加入了语音功能。播放语音是通过 SYN6288 语音模块来实现的。Arduino 将命令和文字的 Unicode 编码后发送到模块的串口即可【参考2】


本网站对原文有所删改,查看原文请点击此处

附件
icon Project_USBKBCalc_2020-08-31_14-06-51.zip 28KB 下载
附件
icon LiquidCrystal_I2C.zip 20KB 下载
附件
icon KBCalculator.zip 4KB 下载
附件
icon BigNumber-master.zip 31KB 下载


关于作者

Zoologist 来自 Arduino 中文社区,爱好使用 Arduino 制作各种有趣的东西。

联系我们
联系邮箱:makercarnival@hotmail.com
官方微信公众号:创客嘉年华
官方微博:上海创客嘉年华
© Copyright Zhiwei Robotics Corp. All Rights Reserved
code 上海创客嘉年华