iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 5
1
IoT

來與IoT譜寫一首戀愛樂章吧系列 第 5

op.05 《感知層》-初探 Arduino Code

op.5 與IoT的秘密暗號

對你訴說的情話,我希望只有我們懂
只屬於我們倆的天地
細細傾訴,用暗號表示我對妳的愛......

今天來到了第五天,昨晚在轟炸完成後,難得睡不著覺,於是徹夜改編一首曲子XDD ( 這人有病吧??

今日主題:基礎的 Arduino 語法

今天需要動手寫點東西,就讓我們來看看各個語(暗)法(號)的功用是甚麼吧!
但在那之前,先和各位說個程式碼區塊普遍人都怎麼排吧~

/*
    這裡是普遍人宣告、定義、引入標頭檔的地方
*/

// Arduino 主要的設定區塊,可以在這裡設定與初始化,執行的順序優先於loop,沒有特地呼叫只會執行一次
void setup() {  
  Serial.begin(115200);
}

// Arduino 主要的無窮迴圈,放在這裡就會一直執行
void loop() {  
  Serial.println("Hello NodeMCU"); 
  delay(1000);
}

/*
    這裡是普遍人放置副程式的地方
*/

所以可以了解程式碼基本上會分成3大區塊,那麼先來說說第一個區塊常出現的東西好了。

#include

用來引入函式庫,比如常見的 SPI.h 、 SD.h ,通常在許多比較複雜的感測器上,都會有大神寫成函式庫,大幅降低自己在開發過程的門檻XD (強烈建議還是要讀過Datasheet,並且看過別人的程式碼,確認是否正確等...)

宣告 (資料型態)

常使用的有 int (整數) 、boolean (布林)、char (字元) 、float (單精浮點數)、String (字串),當然這裡沒有將所有的都列舉出來,詳細的在最後會放上連結供大家可以去補充XD,使用方法如下:

int num = 10;              //宣告一個 int 型態,變數名稱為 num ,並且初始化值為 10 
boolean LED_State = true;  //宣告一個 boolean型態,變數名稱為 LED_State ,並且初始化值為 true 

接下來來說說第二個區塊,第二個區塊內必要的函式有 setup() 和 loop() 。

setup()

只會在通電或是重置時執行一次,通常使用在設定初始值、設定 pin 的模式等......。

loop()

執行完 setup() 函式後,會連續且不斷反覆的執行,為主要需反覆做的事情都會寫在這,比如數據收集。

注意!這兩個無論你是否有用到,這兩個都必須存在於程式碼之中,不然就會編譯不成功。
就像這樣~https://ithelp.ithome.com.tw/upload/images/20200920/20129084ICGJSe6ICW.png


最後第三個區塊,用來放置自己寫的副程式,比如今天寫了一個收集溫度的程式,那我便可以像寫 loop() 一樣,寫成一個副程式,供後續維護功能方便,也可以讓程式碼變得可以重複利用。


有的以上概念,我們就來再更進階的深入暗號吧!
點選上方 檔案 > 範例 > 01.Basics > Blink ,開啟最初的程式 Blink。

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

可以看到天啊程式好像很複雜,但其實真正有在運作的只有下面短短這幾行

void setup(){
    pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

其他通通都是註解,註解有兩種,第一種是單行註解,另一種是區段註解,所以在註解內的東西最後編譯時都會被忽略,但是註解的好處可以讓你更快速的了解程式碼,所以隨手註解是一個良好的習慣,尤其當成式碼越來越多時,註解就更重要!

/*
   我是區段註解
*/

// 我是單行註解

再來看到setup與loop裡面,出現許多奇怪的暗號,接下來會一一說明。

pinMode()

pinMode() 是用來設置 pin 腳的模式,可設定為輸入或是輸出,並且傳入 pin 腳的值,來指定是設定哪一個腳位。

pinMode(13,OUTPUT);      //設定 pin 13為輸出

digitalWrite()

digitalWrite()會將指定的腳位設定輸出狀態,可以有 HIGH/LOW 兩種選擇。

digitalWrite(13,HIGH);  //設定 pin 13為 高態(HIGH)

delay()

delay() 顧名思義就是等待,可以給入一個值,單位是毫秒,注意這個等待就是真的等待,NodeMCU會直接自己放假妳給的時間,甚麼都不做,使用時要注意XD。

delay(1000);    //等待1000 ms

最後把這段程式碼燒錄進去,應該會看到 NodeMCU 上的LED燈會開始每隔一秒進行閃爍,可以試著更改不同的數值來改變並嘗試。
https://ithelp.ithome.com.tw/upload/images/20200920/20129084RUOvK0TAc6.jpg

今天就先到這裡啦,有人一定會想說怎麼沒有其他的,別擔心,之後的實作有用到就會在介紹的,就這樣啦~
星期日愉快!!

今天的曲子<<時光下的福爾摩沙>>曾翊玹

就用這首來給今天畫下句點吧 !


上一篇
op.04 《感知層》-初探 NodeMcu 與環境安裝
下一篇
op.06 《感知層》-數位 v.s 類比感測器
系列文
來與IoT譜寫一首戀愛樂章吧30

尚未有邦友留言

立即登入留言