Arduino键盘的制作教程

第1步:
对于此项目,我们将使用以下-
〜硬件〜
-arduino uno
-伺服电机(180 *)
-瞬时按钮x5
-10k电阻x5
-led x2(redx1,greenx1)
-16x2字符lcd
-10k电位器
-各种跳线
-面包板(一个大的可以容纳整个项目,或者几个小的)
-不要忘记您的计算机或笔记本电脑,还有用于arduino
〜软件〜
-arduino的usb电缆(当然是:3)
〜fritzing(http://www.fritzing。 org)。很酷的东西。它具有三种可视化电路的方式-面包板,原理图和pcb。加!您可以发送设计并让他们制作您的pcb,这样您就可以完成产品!我还没有尝试过,但是触手可及的可能性真棒!我使用fritzing制作原理图和更整洁,更有条理的面包板视图:)最重要的是,它是一个免费软件。
第2步:连接起来-按钮
为arduino的analog pin区域a0-a4上的按钮留出空间。
按钮的一侧将绑在5v上,另一侧绑在5v上。将被接地和模拟引脚之一。它也将以另一种方式工作-一侧连接到5v和模拟引脚,另一侧接地。这实际上是一个优先选择的问题,具体取决于您要寻找的是high信号还是low信号。
我更喜欢寻找high信号,因为我担心5v恒定电压会馈入引脚。而且我也是一个乐观主义者-等待好的事情发生,而不是等待好的事情消失:p
第3步:接线-伺服
我必须说,我爱我一些伺服器!
无论如何。..如果您注意到,伺服器发出了三行信号-特别是在我的身上,有红色,棕色和橙色。显而易见,红色是5v。棕色的引线为接地,橙色的为信号。我们将其连接起来,将橙色引线连接到arduino的digital pin 9,将另外两个引线分别连接到5v和ground。
我不确定较旧的版本,但最新版本的arduino ide装有伺服库和一些启动示例。 #在项目中包含一个伺服器很简单!
第4步:将其接线-16x2字符lcd
lcd是一个有趣的小物件。像伺服系统一样,应该有一个使用和控制lcd屏幕的库和示例,以及在线教程以帮助您入门。我将在这里详细说明,因为lcd比伺服器要复杂一些。
首先,我们将其连接到arduino。
lcd上的针脚从左到右,如下所示-
-1:vss(接地)
-2:vdd(+ 5v)
-3:对比度(将此与10k电位计抽头相连-中间引脚)
-4 :寄存器选择
-5:读/写
-6:启用
-7:数据0
-8:数据1
-9:数据2
-10:数据3
-11:数据4
-12:数据5
-13:数据6
-14:数据7
-15:背光+ 5v
-16:背光地
分别将电源和地线连接到。..电源和地线(如果您的lcd仅具有14针,则很可能没有背光,因此,请省略背光连接)。引脚3(对比电压)将到达10k电位计的抽头引脚。您可以将针脚4、6、11、12、13和14连接到arduino上任何未使用的数字针脚,只要它在代码中按顺序排列即可,例如-
lcd针脚arduino针脚
4 6
6 2
11 5
12 11
13 7
14 3
虽然有点。..奇怪的。..在arduino草图中仍然可以正常工作,您可以按此顺序进行操作。
这是它的样子-
liquidcrystal lcd(6,2,5,11,11,7)
库的方式根据我的收集工作,它将按顺序将那些arduino引脚指定为lcd引脚。引脚6将被指定为寄存器选择,引脚2将被启用,依此类推。因此,如果在进行连接和编码时顺序不对,那么效果就不会很好。
那不是很复杂吗?对我们来说幸运的是,其他才华横溢的人写了图书馆,为我们做了繁重的工作。对那些家伙表示敬意!因此,我们要做的就是正确地将所有东西绑在一起,这将是顺风顺水。
对于此特定项目,将把针脚4、6、11、12、13和14分配给数字针脚2 ,3、4、5、6和7。
您可能会想,“但是其他4个数据引脚呢?”。仅使用这四个引脚,我们就可以很好地摆脱困境。使用所有8个引脚的速度据说是以前的两倍,但是对于我们现在正在做的事情,这4个引脚将为我们提供很好的服务:)
哦,将lcd的引脚5接地。将其接地将lcd设置为write-因为我们正在对其进行写入。
步骤5:将其接线-leds
这肯定是一小步。我们将数字引脚8和10用于led。绿色代表8,红色代表10。只需确保记住是哪一个即可。
长引线为正,短引线为地,以免我们忘记了!
步骤6:将其编码。..现在就好玩了
这将变得有点。..具有挑战性。..
我尽最大努力不只是遵循别人的教程,而是使用我知道的。弄清楚什么有效,什么无效。像往常一样,您可以在github(底部的链接)上下载我的草图,在这里,我将逐段详细描述草图的每个部分。
//在这里,我们包括我们的库
#include
#include
//初始化库并设置lcd的引脚
liquidcrystal lcd(2,3, 4,5,6,7);
servo myservo;
//const int表示常量整数。常数不变。因为我们正在使用按钮,所以很合适。
//不想让我们的arduino感到困惑!
const int button1 = a0;
const int button2 = a1;
const int button3 = a2;
const int button4 = a3;
const int button5 = a4;
//我们将使用“ countx”来跟踪一次按下按钮
int count1 = 0;
int计数2 = 0;
int计数3 = 0;
int计数4 = 0;
int计数5 = 0;
//“ statex”将跟踪状态按钮。
int state1 = 0;
int state2 = 0;
int state3 = 0;
int state4 = 0;
int state5 = 0;
//这些将选项卡保留在按钮的先前状态。高吗低吗?
int prev1 = 0;
int prev2 = 0;
int prev3 = 0;
int prev4 = 0;
int prev5 = 0;
//totalcount是每个按钮被按下的次数。 。.就像一个组合。
int totalcount = 0;
//这适用于lcd。输入组合时,它将显示一个星号。
int rows = 0;
//并声明led:)
int red = 8;
int green = 10;
第7步:对其进行编码-设置和循环
//在这里,我们设置引脚的功能(输入/输出),启动lcd并指定与伺服器相连的
//引脚。我们还将以0度的舵机开始。
void setup(){
pinmode(button1,input);
pinmode(按钮2,输入);
pinmode(按钮3,输入);
pinmode(按钮4,输入);
pinmode(按钮5,输入);
pinmode(红色,输出);
pinmode(绿色,输出);
lcd.begin(16,2);
lcd.setcursor(0,0);
lcd.print(“:enter code:”);
serial.begin(9600); //用于调试。
myservo.attach(9);
myservo.write(0);
}
//从读取状态开始。
void loop(){
state1 = digitalread(button1);
state2 = digitalread(button2);
state3 = digitalread(button3);
state4 = digitalread (button4);
state5 = digitalread(button5);
//如果按钮的状态不等于它的先前状态(1 = high,0 = low),基本上是
//意思是它刚被按下或释放?如果按钮的状态为high(1)
//,我们将增加该按钮的计数。
if(state1!= prev1){
delay(10);
if(state1 == high){
count1 ++;
}
//注意延迟(10)。这个很重要。它有助于消除抖动。按钮有一个
//跳动性。您感觉不到,但是当您按下一个按钮时,它有时会多次接触,并且arduino将多次按下它。延迟
//将程序暂停10毫秒,使按钮“稳定”,然后
//恢复。 10毫秒应该足够长,但是可以根据需要调整更长的时间。
else {}
}
//我们为每个按钮执行此操作。
if(state2!= prev2){
delay(10);
if(state2 == high){
count2 ++;
}
else {}
}
if(state3!= prev3){
delay(10);
if(state3 == high){
count3 ++;
}
else {}
}
if(state4!= prev4){
delay(10);
if(state4 == high){
count4 ++;
}
else { }
}
如果(state5!= prev5){
delay(10);
如果(state5 == high){
count5 ++;
}
else {}
}
//这将有助于跟踪使用
//按钮进行的操作。按下按钮时,其状态与
//之前的状态不匹配,表示已更改。在这里,我们将先前的
//状态设置为当前状态,以便您按下或释放arduino的那一刻就知道并采取相应的措施。
prev1 = state1;
prev2 = state2;
prev3 = state3;
prev4 = state4;
prev5 = state5;
//然后计算每个按钮的按下次数。
totalcount = count1 + count2 + count3 + count4 + count5;
//这是每次按下按钮时在lcd上写入星号(“ *”)的地方。
表示(行= 0;行 lcd.setcursor(rows,1);
lcd.print(“ *”);
行++;
}
//“行”是lcd上光标从左到右的位置。
//每按一次按钮,我们将递增“行”加1,然后将其设置为光标位置。我们这样做直到某个点(5),因为这是我们组合中的位数。
//现在,如果我们的总数达到5,我们将开始查看每个按钮被按下了多少次。如果与预定组合相符。..
if(totalcount == 5){
if(count1 == 2 && count2 == 0 && count3 == 1 && count4 == 2 && count5 == 0){
lcd.clear();
lcd.print(“接受代码”); //接受代码!
myservo.write(90); //伺服器移动了90度,就好像打开门一样。。
digitalwrite(绿色,高); //绿色等于良好,因此绿色led亮起
//如果第一次未正确输入代码,请确保红色led保持熄灭
digitalwrite(red,low);
count1 = 0; //将我们所有的计数器重置为0,再次开始该过程。
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
totalcount = 0;
delay(10000);
lcd.clear();
lcd.setcursor(0,0);
lcd.print(“:enter code:”) ;//我们又回到了开头。
myservo.write(0);
digitalwrite(green,low);
}
否则if(count1!= 2 && count2!= 0 && count3!= 1 && count4!= 2 && count5!= 0 && totalcount == 5){
lcd.clear();
lcd.setcursor(0,0);
lcd.print( “拒绝代码”); //和下面的部分是每个按钮的计数
digitalwrite(red,high); //不等于预定计数,或者大于计数,
digitalwrite(绿色,低); //且总按下次数等于5(表示5位数
count1 = 0;输入了//组合,但错误),然后代码被拒绝。
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
totalcount = 0;
delay(5000);
lcd.clear();
lcd.setcursor(0,0);
lcd.print(“:enter code:”);
digitalwrite(red,low);
}
else if(count1》 2 && count2》 0 && count3》 1 && count4》 2 && count5》 0 || totalcount == 5){
lcd.clear();
lcd.setcursor(0, 0);
lcd.print(“ code rejected”);
digitalwrite(red,high);
digitalwrite(green,low);
count1 = 0;
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
totalcount = 0;
delay(5000);
lcd.clear();
lcd。 setcursor(0,0);
lcd.print(“:enter code:”);
digitalwrite(red,low);
}
}
}
第8步:下载草图
哪!复杂。
总的来说,考虑到“人工”和缺少键盘库,这实际上是一个简短的草图。对我来说,这绝对是一次学习的经历,因为我必须反复试验才能做到这一点。如果我有更多按钮,我会尽力制造键盘,就像在其他任何按键面板上看到的一样。

百思买与美国运营商终止了所有华为手机的销售
MQTT的概述与MQTT的代码编程理解
MAX3710限幅放大器/突发模式激光驱动器
三种串行接口标准的性能对比和应用研究
PNI磁传感器的精度为什么会这么高
Arduino键盘的制作教程
迅为IMX8MM开发板Andaoid9 获取root 权限
OLED 屏笔记本今年有望迎来普及:120% DCI-P3 色域,10 倍 LCD 响应速度
布线测试中的几个关键步骤
链路状态路由协议的基本概念和原理解析
移动电源市场水有多深?一看你便知
自动驾驶系统ISP接口/连接
美菱M鲜生冰箱凭借领先的嵌入科技和保鲜技术 实力得到行业权威认证
尼吉康:持续用电容书写辉煌
APS排程软件推进生产企业精益化
仪器分析的最新发展趋势
大国重器中国工业互联网2.0新征程 技术立根 行业立范 发展立本
5G与城市的规划发展密不可分 智慧城市新时代或将到来
三星正式进入智能音箱市场 Galaxy Home将面临困境
pcb板和陶瓷金属化产品对比分析