第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步:下載草圖
哪!復雜。
總的來說,考慮到“人工”和缺少鍵盤庫,這實際上是一個簡短的草圖。對我來說,這絕對是一次學習的經歷,因為我必須反復試驗才能做到這一點。如果我有更多按鈕,我會盡力制造鍵盤,就像在其他任何按鍵面板上看到的一樣。
-
鍵盤
+關注
關注
4文章
858瀏覽量
39595 -
Arduino
+關注
關注
187文章
6464瀏覽量
186684
發布評論請先 登錄
相關推薦
評論