Arduino學習筆記③ 經典LED

  • 版權聲明:本文爲博主 **單片機菜鳥** 一心一血敲出來的原創作品,未經博主允許不得轉載,多謝支持。

  • 本系列博客僅僅做個人技術交流分享,不做任何商業用途。如有不對之處,請留言,本人及時更改。

  • 如何和博主一起學習:

博主建立了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爲指定的配置模式。

image

    而我們接下來的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模塊)

image

  • 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
  • 延時函數的使用
  • 經典流水燈
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章