Arduino學習筆記② Arduino語言基礎

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

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

  • 如何和博主一起學習:

博主建立了ESP8266開發之旅學習羣,需要的同學請加 869920142

1.前言

    在初步認識什麼是Arduino之後,我們就開始講解一下Arduino語言基礎,我們需要知道到底Arduino提供了什麼平臺以及什麼語言來讓我們做開發(技術基本上都是先學習開發語言)。

2.Arduino語言以及程序結構

    Arduino使用C/C++語言編寫程序(絕大部分的程序員大學都學了這個)。C語言是一種面向過程的編程語言,C++是一種面向對象的編程語言(雖然樓主已經忘光了這個)。早期Arduino核心庫使用C語言編寫,後來引進了面向對象的思想,目前最新核心庫採用C與C++混合編程。
    通常所說的Arduino語言,就是指Arduino核心庫提供的各種API的集合。這些API是對更底層的單片機支持庫進行二次封裝所形成的(玩過單片機的人估計都是經常和各種寄存器打交道)。Arduino提供的API可以讓初學者不用理會單片機複雜寄存器配置,然後就能直觀控制Arduino,提高開發效率。
    Arduino程序的基本結構如下:

void setup() {
  // put your setup code here, to run once(這裏代碼只運行一次):
 
}
 
void loop() {
  // put your main code here, to run repeatedly(這裏代碼不斷運行):
 
}

    這個模型可以這樣理解(估計學過c語言的都知道main):

int main() {
    setup()while(1) {
        loop()}
}

3.語言基礎

    對於學過C語言的人,可以直接大概掃描一下。

3.1 數據類型

3.1.1 常量

    程序運行中,值不能改變,常量可以是字符,也可以是數字,語句:

#define 常量名  常量值

    例子:一般人都要用到調試功能(這裏我個人是用串口),但是在真正最終代碼的時候又想關閉調試功能,那麼就可以這麼用:

#define MyDebugSerial Serial
 
//該條語句用於使能DEBUG輸出信息,屏蔽掉就不會輸出debug調試信息
#define DEBUG
 
#ifdef DEBUG
#define DBGLN(message)    MyDebugSerial.println(message)
#else
#define DBGLN(message)
#endif
 
void setup() {
  MyDebugSerial.begin(9600);
  DBGLN("setup end");
}
 
void loop() {
  
}

3.1.2 變量

    程序中可變的值稱爲變量。

3.1.2.1 整型

    Arduino可使用的整數類型以及取值範圍如下:

image

    而在Arduino Due中,int型以及unsigned int型佔用4字節(32位Arm處理器)。

3.1.2.2 浮點型

    float double 實數,兩者精度一樣,都佔有4字節(32位)內存空間,在Arduino Due中,double類型佔用8字節(64位)內存空間。

3.1.2.3 字符型

    char類型,佔用1字節,字符需用單引號引用,如:char data = ‘c’;

3.1.2.4 布爾型

    boolean類型,只有兩個:false和true,佔用1字節內存空間。

3.1.2.5 數組

    int a[5],char b[6],注意不要數組溢出,數組下標從0開始編號。

3.1.2.6 字符串

    char 字符串名稱[字符個數]或者 String 字符串名稱,我個人是喜歡String。

3.1.3 常見運算符

image

image

3.1.4 三大組織結構

3.1.4.1 順序結構

    程序語句按先後順序依次執行。

image

3.1.4.2 選擇結構

    根據判斷以決定下一步操作。

image

形式1(單分支):

if(表達式){
    語句;
}

形式2(雙分支):

if(表達式1){
    語句1;
}else{
    語句2;
}

形式3(多分支):

if(表達式1){
    語句1;
}else if(表達式2){
    語句2;
}else if(表達式3){
    語句3;
}

形式4(超多分支,一般超過4個):

switch(){
   case 常量表達式1:
          語句1;
          break;
   case 常量表達式2:
          語句2;
          break;
   case 常量表達式3:
          語句3;
          break;
     ......
     default:
          語句n;
          break;
}

注意
switch後的表達式的結果只能是整型或字符型,如果使用其他類型,則必須使用if語句。switch結構會將switch語句後的表達式與case後的常量表達式比較,如果相符就運行常量表達式所對應的語句;如果都不相符,則會運行default後的語句;如果不存在default部分,程序就直接退出switch結構。一般要使用break語句退出switch結構,如果沒有使用break語句,則程序一直執行到有break的位置才退出或者運行完該switch結構退出。

image

3.1.4.3 循環結構

    重複結構,反覆執行某一部分代碼,while(當)循環和until(直到)循環。

image

    while型循環結構會先判斷給定條件,當給定條件不成立,則退出該結構,當給定條件成立,繼續執行A,如此反覆;
    until型循環結構會先執行A,然後判斷給定條件是否成立,若成立立即退出循環,不成立則繼續執行A,如此反覆;

    while循環形式:

while(表達式){
   語句;
}

    until循環形式:

do{
  語句;
}while(表達式);

    for循環形式:

for(表達式1;表達式2;表達式3){
   語句;
}

image

    循環結構中都有一個表達式用於判斷是否進入循環,但有時候需要提前結束循環或者跳過某次循環,則使用break和continue實現;

  • break 終止當前選擇結構或者循環結構
  • continue 跳過本次循環中剩下的語句

4.總結

    大概Arduino語法基礎就講到這裏(有c語言基礎的人直接掃描一下就可以了,畢竟語言是相通的),接下來我準備開始講解實戰,敬請期待。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章