电子说
第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步:下载草图
哪!复杂。
总的来说,考虑到“人工”和缺少键盘库,这实际上是一个简短的草图。对我来说,这绝对是一次学习的经历,因为我必须反复试验才能做到这一点。如果我有更多按钮,我会尽力制造键盘,就像在其他任何按键面板上看到的一样。
全部0条评论
快来发表一下你的评论吧 !