李英 趙書(shū)銳 姜欣欣
摘要:該文使用Arduino硬件開(kāi)發(fā)平臺(tái),以Arduino UNO電路板為中心,配合使用8乘8矩形點(diǎn)陣完成電路的設(shè)計(jì)。在完成的過(guò)程中,本文采納的Arduino UNO電路板,與此同時(shí)配合應(yīng)用Arduino IDE軟件并利用Arduino語(yǔ)言進(jìn)行編程以實(shí)現(xiàn)8乘8點(diǎn)陣上“心形”的顯示。本文提到的8乘8點(diǎn)陣,Arduino電路板以及使用的語(yǔ)言均可供讀者參考學(xué)習(xí)。
關(guān)鍵詞:Arduino;8乘8“心形”顯示;Arduino語(yǔ)言
中圖分類(lèi)號(hào):TP311 ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)13-0247-02
1 引言
當(dāng)今社會(huì),電子技術(shù)行業(yè)在不斷的發(fā)展,在不斷的學(xué)習(xí)過(guò)程中,硬件開(kāi)發(fā)不僅可以增加學(xué)習(xí)者的開(kāi)拓思維能力,還可以提高開(kāi)發(fā)者的創(chuàng)新能力。Arduino以其簡(jiǎn)單的開(kāi)發(fā)方式和容易操作的特點(diǎn)成了目前流行的開(kāi)源硬件和硬件開(kāi)發(fā)平臺(tái),更是硬件開(kāi)發(fā)的趨向[1]。這使得使用Arduino的開(kāi)發(fā)者們不再需要大量的時(shí)間學(xué)習(xí)類(lèi)似于單片機(jī)等硬件的復(fù)雜機(jī)理,從而可以節(jié)約學(xué)習(xí)成本,也讓開(kāi)發(fā)者們更加關(guān)注開(kāi)發(fā)本身的創(chuàng)意性和可行性,大大減少了開(kāi)發(fā)需要的時(shí)間周期,從而更快地完成項(xiàng)目的開(kāi)發(fā)。
總之由于Arduino的多種優(yōu)勢(shì),越來(lái)越多的人開(kāi)始使用Arduino,其中包括專(zhuān)業(yè)的硬件開(kāi)發(fā)者,甚至包括一些軟件開(kāi)發(fā)者通過(guò)使用Arduino來(lái)進(jìn)入硬件等開(kāi)發(fā)的領(lǐng)域[2]。
本文所提到的8乘8點(diǎn)陣的“心形”顯示實(shí)驗(yàn)就是應(yīng)用Arduino開(kāi)發(fā)板對(duì)8乘8點(diǎn)陣進(jìn)行的控制的一個(gè)實(shí)驗(yàn)。
2 Arduino簡(jiǎn)介
Arduino是一個(gè)在可以不需花費(fèi)過(guò)多時(shí)間學(xué)習(xí)就能使用的硬件和軟件的基礎(chǔ)上的一個(gè)開(kāi)源電子平臺(tái)。它是為任何做互動(dòng)項(xiàng)目的人設(shè)計(jì)的。它包含硬件(各種型號(hào)的Arduino板)和軟件(Arduino IDE)。 它構(gòu)建于開(kāi)放原始碼simple I/O介面版,并且具有使用類(lèi)似Java、C語(yǔ)言的Processing/Wiring開(kāi)發(fā)環(huán)境[3]。Arduino包括兩個(gè)主要的部分:一是硬件部分,就是我們?cè)陔娐愤B接過(guò)程中使用到的Arduino電路板;二是軟件部分,即Arduino IDE,就是我們?cè)谟?jì)算機(jī)中編寫(xiě)程序時(shí)使用到的程序開(kāi)發(fā)環(huán)境。 Arduino能通過(guò)各種各樣的傳感器來(lái)感知環(huán)境,也能通過(guò)許多其他的裝置來(lái)影響環(huán)境。Arduino板能夠讀取輸入-傳感器上的燈,按鈕上的手指,或者推特上的信息-并將其轉(zhuǎn)換成輸出-激活馬達(dá),打開(kāi)LED,在線發(fā)布一些信息。通過(guò)Arduino的編程語(yǔ)言來(lái)編寫(xiě)程序后,編譯生成二進(jìn)制文件,可以燒錄進(jìn)Arduino板子上的微控制器,從而達(dá)到程序控制的目的[4]?;贏rduino的一些項(xiàng)目,也可以通過(guò)Arduino和其他一些在PC上運(yùn)行的軟件之間進(jìn)行通信來(lái)實(shí)現(xiàn)。
總之,Arduino以其靈活性和操作簡(jiǎn)單的特點(diǎn)越來(lái)越受到我們的歡迎,也越來(lái)越受到對(duì)硬件開(kāi)發(fā)有興趣的人的青睞。
3 硬件電路設(shè)計(jì)
3.1硬件介紹
本文使用的硬件主要包括Arduino開(kāi)發(fā)板、面包板兩塊、USB數(shù)據(jù)線、8乘8矩形點(diǎn)陣一個(gè)、連接線若干、220歐姆電阻若干。
本文使用的Arduino開(kāi)發(fā)板類(lèi)型為Arduino Uno;面包板的作用為使8乘8點(diǎn)陣的引腳可以與Arduino開(kāi)發(fā)板之間可以用導(dǎo)線進(jìn)行連接;USB數(shù)據(jù)線的作用為將Arduino開(kāi)發(fā)板與電腦進(jìn)行連接,從而使得Arduino IDE可以對(duì)Arduino開(kāi)發(fā)板的各個(gè)引腳進(jìn)行控制;8乘8點(diǎn)陣共由64個(gè)發(fā)光二極管組成,并且每個(gè)發(fā)光二極管位于行線和列線的交叉點(diǎn)處,如果要點(diǎn)亮其中一個(gè)發(fā)光二極管則將此二極管對(duì)應(yīng)的行置高電平,對(duì)應(yīng)的列置低電平即可;如要將最后一個(gè)發(fā)光二極管點(diǎn)亮,則5腳接高電平16腳接低電平,則最后一個(gè)發(fā)光二極管就被點(diǎn)亮了[5]。
3.2電路設(shè)計(jì)
首先對(duì)8乘8點(diǎn)陣各個(gè)引腳進(jìn)行識(shí)別,點(diǎn)陣共有四個(gè)邊,其中一個(gè)邊上有絲印并且在中間有塑料向下突出,將點(diǎn)陣正向放置,帶有絲印的一邊朝向自己,左側(cè)第一個(gè)引腳為一號(hào)引腳,依次逆時(shí)針排序增加,共有16個(gè)引腳。
然后將各個(gè)引腳與Arduino開(kāi)發(fā)板進(jìn)行相應(yīng)的連接。連接示意圖如圖1所示,實(shí)際連接情況如圖2所示。電阻主要起到限流作用。
3.3實(shí)現(xiàn)功能
在程序驗(yàn)證完成顯示編譯完成后,即可上傳到相應(yīng)的Arduino開(kāi)發(fā)板上,實(shí)現(xiàn)的功能應(yīng)為每隔1秒鐘循環(huán)顯示“心形”。
4 軟件設(shè)計(jì)
4.1軟件設(shè)計(jì)流程
首先需要對(duì)8乘8點(diǎn)陣的各個(gè)與Arduino開(kāi)發(fā)板連接的引腳進(jìn)行行列號(hào)的定義,來(lái)實(shí)現(xiàn)Arduino各個(gè)引腳對(duì)點(diǎn)陣行列的控制,然后將Arduino引腳設(shè)置為輸出模式以控制點(diǎn)陣,并且全部都初始化為低電平,隨后定義了一個(gè)顯示函數(shù),其作用是將點(diǎn)陣的各列依次選通,等待信號(hào)燈被點(diǎn)亮(利用人眼的視覺(jué)暫停作用,選通時(shí)間足夠短的話,會(huì)造成多列同時(shí)點(diǎn)亮的效果),同時(shí)設(shè)置了一個(gè)清除函數(shù)目的是為了減輕信號(hào)燈點(diǎn)亮?xí)r產(chǎn)生的余暉,給出“心形”的數(shù)據(jù)后利用loop()函數(shù)對(duì)“心形”數(shù)據(jù)進(jìn)行顯示。程序流程圖如圖3所示。
4.2 Arduino語(yǔ)言程序
const int row1 = 2; // Arduino Pin2 連接點(diǎn)陣 行號(hào)9
const int row2 = 3; // Arduino Pin3 連接點(diǎn)陣 行號(hào) 14
const int row3 = 4; // Arduino Pin4 連接點(diǎn)陣 行號(hào)8
const int row4 = 5; // Arduino Pin5 連接點(diǎn)陣 行號(hào) 12
const int row5 = 17; // Arduino Pin17 (A3)連接點(diǎn)陣 行號(hào)1
const int row6 = 16; // Arduino Pin16 (A2)連接點(diǎn)陣 行號(hào)7
const int row7 = 15; //Arduino Pin15 (A1)連接點(diǎn)陣 行號(hào) 2
const int row8 = 14; // Arduino Pin14 (A0)連接點(diǎn)陣 行號(hào) 5
const int col1 = 6; //Arduino Pin6 連接點(diǎn)陣 列號(hào)13 ? ?//the pin to control COl
const int col2 = 7; // Arduino Pin7 連接點(diǎn)陣 列號(hào)3
const int col3 = 8; //Arduino Pin8 連接點(diǎn)陣 列號(hào)4
const int col4 = 9; // Arduino Pin9 連接點(diǎn)陣 列號(hào) 10
const int col5 = 10; //Arduino Pin10 連接點(diǎn)陣 列號(hào)6
const int col6 = 11; //Arduino Pin11 連接點(diǎn)陣 列號(hào)11
const int col7 = 12; // Arduino Pin12 連接點(diǎn)陣 列號(hào)15
const int col8 = 13; // Arduino Pin13 連接點(diǎn)陣 列號(hào)16
unsigned char table[8][8] = ? //“心型”的數(shù)據(jù)
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,1,0,0,1,0,0,
0,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,0,
0,0,1,1,1,1,0,0,
0,0,0,1,1,0,0,0,
0,0,0,0,0,0,0,0,
};
void setup()
{
int i = 0 ;
for(i=2;i<18;i++)
{
pinMode(i, OUTPUT); //設(shè)置為輸出(包括模擬口,也設(shè)置為數(shù)字輸出方式)
}
for(i=2;i<18;i++) {
digitalWrite(i, LOW); //拉低
} }
5 實(shí)驗(yàn)結(jié)果
程序?qū)懲旰螅瑢⑵潋?yàn)證,驗(yàn)證無(wú)誤后下載到Arduino的微控制器中后,就會(huì)看到8乘8點(diǎn)陣發(fā)生相應(yīng)的變化,即8乘8點(diǎn)陣每隔1秒鐘循環(huán)顯示“心形”。實(shí)驗(yàn)結(jié)果表明8乘8點(diǎn)陣能夠很好地穩(wěn)定的按照我們?cè)O(shè)計(jì)的程序進(jìn)行“心形”的顯示。實(shí)驗(yàn)結(jié)果如圖4所示。
參考文獻(xiàn):
[1] 陳呂洲.Arduino程序設(shè)計(jì)基礎(chǔ)[M]. 2版.北京:北京航空航天大學(xué)出版社,2015:3
[2] 付久強(qiáng).基于Arduino平臺(tái)的智能硬件設(shè)計(jì)研究[J].包裝工程,2015(10).
[3] 卞云松.基于Arduino單片機(jī)的避障小車(chē)機(jī)器人[J].自動(dòng)化技術(shù)與應(yīng)用,2014 (1).
【通聯(lián)編輯:朱寶貴】