-
版權聲明:本文爲博主 **單片機菜鳥** 一心一血敲出來的原創作品,未經博主允許不得轉載,多謝支持。
-
本系列博客僅僅做個人技術交流分享,不做任何商業用途。如有不對之處,請留言,本人及時更改。
-
如何和博主一起學習:
博主建立了ESP8266開發之旅學習羣,需要的同學請加 869920142
目錄
1.前言
今天我們開始同時講解理論以及實踐。對於絕大部分有過單片機編程經歷的人來說,第一個接觸的大多數就是LED燈(忽然想起博主大一那個懵懂的時代,當時大三的師兄給我們展現了一把流水燈功力,當時真是炫了一把,心中無比激動)。
2.數字IO 介紹
第三課主要用到數字IO口,所以在開始實驗之前,我們先來認識一下Arduino的數字IO口。
數字信號是以0、1表示的不連續信號,也就是以二進制形式表示的信號。在Arduino中數字信號用高低電平來表示,高電平爲數字信號1,低電平爲數字信號0。Arduino上每一個帶有數字編號的引腳都是數字引腳,包括寫有"A"編號的模擬輸入引腳。使用這些引腳可以完成輸入/輸出數字信號的功能。
在使用輸入或者輸出功能前,需要先通過pinMode()函數配置引腳的模式爲輸入或者輸出模式:
2.1 pinMode(pin,mode)
方法:pinMode(pin,mode)
參數:pin爲指定配置的引腳編號,參數mode爲指定的配置模式。
而我們接下來的LED主要需要用輸出模式,所以我們需要配置成 pinMode(pin,OUTPUT);配置爲輸出模式以後,還需要使用digitalWrite()函數使該引腳輸出高電平或低電平。
2.2 digitalWrite(pin,value)
方法:digitalWrite(pin,value)
參數:pin爲指定輸出的引腳編號。參數value爲要指定的輸出電平,使用HIGH指定輸出高電平,使用LOW指定輸出低電平。
- Arduino中輸出的低電平爲0V
- 輸出的高電平爲當前Arduino的工作電壓。
數字引腳除了用於輸出信號外,還可用digitalRead()函數讀取外部輸入的數字信號。
2.3 digitalRead(pin)
方法:digitalRead(pin)
參數:pin爲指定讀取狀態的引腳編號。
注意:
- 當Arduino以5v供電時,會將範圍爲-0.5v-1.5v的輸入電壓作爲低電壓識別,將範圍在3-5.5v的輸入電壓作爲高電平識別。
- 過高的輸入電壓會損壞Arduino。在Arduino核心庫中,OUTPUT被定義爲1,INPUT被定義爲0,HIGH被定義爲1,LOW被定義0。
3.時間控制函數
由於我們接下來的實驗程序很多都用到延時函數,那麼這裏就介紹幾個:
- delay() ----- 毫秒級延時
- delayMicroseconds() ----- 微秒級延時
4.點亮LED
4.1 實驗器材
- LED模塊(這裏屬於共陽極LED模塊)
- Mega2560板子
4.2 實驗內容
4.2.1 點亮熄滅單個LED
實驗代碼:
/**
* @Desc 點亮熄滅單個LED
* @author 單片機菜鳥
* @Date 2016/12/2
* 注意:LED的一端接到5V,另外一端接到輸出引腳,低電平亮
*/
#define LED 2 //定義2號引腳爲LED
void setup() {
// 將2號引腳設置爲輸出狀態
pinMode(LED,OUTPUT);
}
void loop() {
digitalWrite(LED,LOW);//點亮LED
delay(1000);//延時1s
digitalWrite(LED,HIGH);//關閉LED
delay(1000);//延時1s
}
燒寫到mega2560板子,連接LED引腳到2端口,正常現象會看到LED閃爍。
4.2.2 經典流水燈
實驗代碼:
/**
* @Desc 流水燈(8個LED依次亮滅)
* @author 單片機菜鳥
* @Date 2016/12/2
* 注意:LED的一端接到5V,另外一端接到輸出引腳,低電平亮
*/
#define LED_START 2
#define LED_END 9
#define DELAY_TIME 500 //延時時間,可以調節然後就可以看到亮滅頻率
void setup() {
// 將2-9號引腳設置爲輸出狀態
for(int i=LED_START;i<=LED_END;i++){
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);//滅掉LED
}
}
void loop() {
//從引腳2到9引腳,逐個點亮LED,等待1S再熄滅LED
for(int i=LED_START;i<=LED_END;i++){
digitalWrite(i,LOW);//LED亮
delay(DELAY_TIME);
digitalWrite(i,HIGH);//LED滅
}
//從引腳9到2引腳,逐個點亮LED,等待1S再熄滅LED
for(int i=LED_END;i>=LED_START;i--){
digitalWrite(i,LOW);//LED亮
delay(DELAY_TIME);
digitalWrite(i,HIGH);//LED滅
}
}
不出意外,應該會看到LED燈流水亮滅.
5.總結
這一節我們主要學到:
- 數字IO
- 延時函數的使用
- 經典流水燈