電子開發(fā)網

電子開發(fā)網電子設計 | 電子開發(fā)網Rss 2.0 會員中心 會員注冊
搜索: 您現(xiàn)在的位置: 電子開發(fā)網 >> 基礎入門 >> Arduino開發(fā)學習 >> 正文

Arduino開發(fā)語言基礎_Arduino語言基礎_arduino是用什么語言寫的?

作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2023/11/6

arduino語言基礎

arduino是用什么語言寫的?
Arduino使用的編程語言主要是基于C++語言的一種簡化版本,稱為Arduino語言或Wiring語言。Arduino語言在C++的基礎上進行了一些簡化和封裝,使得用戶可以更加輕松地進行硬件編程。Arduino語言的編程方式類似于C++,包括變量、控制結構、函數(shù)等基本語法,同時還有許多庫函數(shù)可以方便用戶進行各種操作,如控制GPIO口、讀取傳感器數(shù)據、進行串口通訊等。Arduino語言的代碼可以在Arduino IDE中編寫和調試,然后上傳到Arduino板上運行。

1、arduino程序框架

/*
 1、此程序通過按鍵開關來控制LED燈的亮滅,當按鍵按下時LED燈點亮,松開是LED燈熄滅;
 2、LED接13引腳
 3、按鍵開關接4引腳
 */
#include <stdio.h>
#define LED_PIN 13
#define BUTTON_PIN 4
float temp = 0;
bool  button_state = false;
int power = 0;
void setup() {
  // put your setup code here, to run once:
  pinMode(LED_pin,OUTPUT);
  pinMode(BUTTON_pin,INPUT);
  Serial.begin(9600);
}
void loop() {
  // put your main code here, to run repeatedly:
  button_satte = digitalRead(BUTTON_pin);
  Serial.println(button_satte);
  if (button_satte) {
    digitalWrite(LED_pin,HIGH);
    }
}

2、基本語法

2.1 注釋符

//

/ *

*/

2.2 語句結束符

;

2.3 代碼塊分界符

{ }

2.4 宏定義符

#define

2.5 頭文件引用符

#include

3、數(shù)據類型

3.1 基本數(shù)據類型

數(shù)據類型 日常寫法 C/C++中寫法 C/C++中類型標識符 數(shù)值范圍
整數(shù) 1,100, 1,100 int -32768~32767
小數(shù) 3.14,2.7345 3.14,2.7345 float -3.4028235E+38~3.4028235E+38
字符 a,b,我 'a','b','我' char -128~127
文本 遇見你真高興! “遇見你真高興!” string
邏輯判斷 對、錯 true,false bool true,false

3.2 基本數(shù)據類型轉換函數(shù)

char(value)

int(value)

float(value)

String(value)

itoa(int value,char*string,int radix)

atoi(const char *nptr)

3.3 整型數(shù)不同進制表示

整數(shù)常量默認為十進制,但在前面加上特殊前綴表示為其他進制數(shù)。

進制 例子 格式 備注
十進制 123
二進制 0b1111011 前綴0b或0B 只適用于8位的值(0到255)字符0-1有效
八進制 0173 前綴0 字符0-7有效
十六進制 0x7B 前綴0x或0X 字符0-9,A-F,A-F有效

3.4 數(shù)組 array

數(shù)組是相同類型的數(shù)據組成的集合,數(shù)組中的每個元素都被默認分配一個索引(下標),我們可以通過數(shù)組名[ 索引 ]的方式訪問數(shù)組中的元素。

創(chuàng)建數(shù)組

語法格式:

datatype arrayname[ 數(shù)組元素個數(shù)];

int Ints[6];
int P[] = {2, 4, 8, 3, 6};
int SensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";

datatype:聲明數(shù)組中存放元素的數(shù)據類型;

arrayname:數(shù)組名稱,像給變量命名一樣給數(shù)組起一個名字;

數(shù)組初始化

我們可以在定義數(shù)組的同時進行初始化,即給數(shù)組賦值:

int a[4] = {20, 345, 700, 22};

{ }中的值即為各元素的初值,各值之間用,(逗號)隔開。

數(shù)組賦初值需要注意以下幾點:

1) 可以只給部分元素賦初值。當{ }中值的個數(shù)少于元素個數(shù)時,只給前面部分元素賦值。例如:

int a[10]={12, 19, 22 , 993, 344};

表示只給 a[0] ~ a[4] 這5個元素賦值,而后面5個元素自動賦0值。

當賦值的元素少于數(shù)組總體元素的時候,剩余的元素自動初始化為 0:對于int類型數(shù)據,就是整數(shù)0;對于char類型數(shù)據,就是字符 ‘\0’(空字符);對于float類型數(shù)據,就是小數(shù)0.0。

我們可以通過下面的形式將數(shù)組的所有元素初始化為 0:

int a[10] = {0}; char c[10] = {0}; float f[10] = {0};

由于剩余的元素會自動初始化為0,所以只需要給第0個元素賦0值即可。

使用數(shù)組

數(shù)組中的每個元素都有一個序號,這個序號從0開始,而不是從我們熟悉的1開始,稱為下標(Index)。使用數(shù)組元素時,指明下標即可,形式為:

arrayName[index]

arrayName 為數(shù)組名稱,index 為下標。例如,a[0] 表示第0個元素,a[3] 表示第3個元素

實例:

void setup() {
  Serial.begin(9600);
  int a[6] = {299, 34, 92, 100}; // 定義數(shù)組
  for(int i=0; i<6; i++){ //串口監(jiān)視器輸出數(shù)組元素
    Serial.print("a[");
    Serial.print(i);
    Serial.print("] =");
    Serial.println(a[i]);
    Serial.println("");
  }  
}
void loop() {
  while(1){continue;}
}

我們還可以根據需要定義二維、三維等多維數(shù)組,此處忽略。

4、變量

4.1 什么是變量

數(shù)學課中我們是不是這樣寫 長 = 10,寬 = 5,

在程序中我們也經常需要用一個名稱來代表某個數(shù)據,

如 length = 10,width = 5, 這里的length、width就是變量,我們把數(shù)據放到變量中,后面要用到這個數(shù)據時我們直接用變量名就可以了。

4.2 變量的作用

變量是用來存儲程序運行過程中用到的數(shù)據,使用變量可以增加程序的簡潔性、易讀性和易維護性。

4.3 變量的定義和應用

定義變量語法格式

變量是用來存儲數(shù)據的,數(shù)據有整型、小數(shù)、文本等多種類型,因此在C/C++中定義變量必須先聲明變量類型,變量定義語法如下:

int length,width;

float square;

char ch;

string name ="arduino"

c/c++中變量的值可以變化,但變量的類型不能變化。

變量的應用

定義完變量,我們在代碼中就可以對變量進行賦值、引用

length =10;

width = 5;

square = length * width

printf(square)

變量命名規(guī)則:

變量名可以是字母、數(shù)字和下劃線的組合,但必須遵守以下規(guī)則:

1、變量名必須以字母或下劃線開頭,不能是數(shù)字;

2、變量名中的字母是區(qū)分大小寫的。比如 a 和 A 是不同的變量名,num 和 Num 也是不同的變量名。

3、變量名不能是關鍵字;

變量命名規(guī)范建議

1、見名知義;

2、小駝峰格式;

3、下劃線分段格式;

5、數(shù)據運算符

5.1 算術運算符

加 +

減 -

乘 *

除 / 注意:被除數(shù)和除數(shù)都為整數(shù),結果只保留整數(shù),舍去小數(shù)部分,想得到小數(shù)需把被除數(shù)或除數(shù)任意一個轉換為小數(shù)

取余 %

自增 ++

自減 --

5.2 賦值符

=

復合賦值運算符

+=

-=

*=

/=

%=

5.3 關系運算符

等于 ==

不等于 !=

大于 >

小于 <

大于等于 >=

小于等于 <=

5.4 邏輯運算符(布爾運算符)

邏輯與 &&

邏輯或 ||

邏輯非 !

5.5 位運算符

位與 &

位或 |

位異或 ^

位非 ~

左移 <<

右移 >>

6、程序三大流程控制

6.1 順序結構

6.2 分支結構(選擇結構)

if 語句 (單分支結構)

通過 if 語句,可以讓程序判斷某一個條件是否達到,并且根據判斷結果執(zhí)行相應的程序。

if語句語法格式:

if(判斷條件) {
語句塊
}

代碼執(zhí)行邏輯:

如果 “判斷條件” 為真則執(zhí)行語句塊,否則將不執(zhí)行該語句塊,if語句流程圖:


 


if ...else 語句 (雙分支結構)

語法格式:

if( 判斷條件 ) {
    語句塊1
} 
else {
    語句塊2
}

代碼執(zhí)行邏輯:

如果 “判斷條件” 為真則執(zhí)行”語句塊1″。為假將執(zhí)行”語句塊2″,if...else語句流程圖:


 


實例:

void setup() {
  Serial.begin(9600);   //開始串口通訊
  pinMode(2, INPUT_PULLUP);    //將引腳2設置為輸入上拉模式
  pinMode(13, OUTPUT);
}
void loop() {
  int sensorVal = digitalRead(2);  //將開關狀態(tài)數(shù)值讀取到變量中
  Serial.println(sensorVal);  //輸出開關狀態(tài)數(shù)值
  //按鈕被按下后,引腳13連接的LED將被點亮。按鈕沒有按下時,LED熄滅。
  //如果按鈕沒有按下,熄滅LED。否則,點亮LED
  if (sensorVal == HIGH) {  //按鈕沒有按下
    digitalWrite(13, LOW);  //熄滅LED
  } else {                  //否則
    digitalWrite(13, HIGH); //點亮LED
  }
}

多個if ...else 語句 (多分支結構)

語法格式:

if(判斷條件1){
    語句塊1
} else  if(判斷條件2){
    語句塊2
}else  if(判斷條件3){
    語句塊3
}else  if(判斷條件m){
    語句塊m
}else{
     語句塊n
}

代碼執(zhí)行邏輯:

從上到下依次檢測判斷條件,當某個判斷條件成立時,則執(zhí)行其對應的語句塊。如果所有判斷條件都不成立,則執(zhí)行語句塊n。

switch case語句

switch語句通過對一個變量的值與case語句中指定的值進行比較。當一個case語句中的指定值與switch語句中的變量相匹配,就會運行這個case語句下的代碼。通過switch case語句,實現(xiàn)多分支功能。

語法格式:

switch (var) {
    case 1:    
        //當var等于1時執(zhí)行這里的程序
        代碼塊1
        break;
    case 2:
        代碼塊2
        //當var等于2時執(zhí)行這里的程序
        break;
    default:
        // 如果var的值與以上case中的值都不匹配
        // 則執(zhí)行這里的程序
        代碼塊3
        break;
}

switch case語句使用注意事項:

1) 當變量var和某個case后面的數(shù)值匹配成功后,如果沒有break, 程序會執(zhí)行該分支以及后面所有分支的語句。
2) case 后面必須是一個整數(shù),或者是結果為整數(shù)的表達式,但不能包含任何變量。
3) case 后面不能使用字符串,但可以使用字符,使用字符時需要用單引號把字符括起來,如: case: 'b'。
4) default 不是必須的。當沒有 default 時,如果所有 case 都匹配失敗,那么就什么都不執(zhí)行。

實例

void setup() {  
  Serial.begin(9600); // 初始化串口通訊
  for (int thisPin = 2; thisPin < 7; thisPin++) {// 初始化Arduino連接LED的引腳
    pinMode(thisPin, OUTPUT); 
  } 
} 
void loop() { 
  if (Serial.available() > 0) {    
    int inByte = Serial.read();
    // Arduino用switch語句,根據接收到的不同信息進行相應的反應。
    switch (inByte) {
      case 'a':
        digitalWrite(2, HIGH);
        break;
      case 'b':
        digitalWrite(3, HIGH);
        break;
      case 'c':
        digitalWrite(4, HIGH);
        break;
      case 'd':
        digitalWrite(5, HIGH);
        break;
      case 'e':
        digitalWrite(6, HIGH);
        break;
      default:
        // 熄滅所有LED:     
         for (int thisPin = 2; thisPin < 7; thisPin++) {    
           digitalWrite(thisPin, LOW);     
         }      
        break;      
    }
  }
}

6.3 循環(huán)結構

while 循環(huán)語句

語法格式:

while(表達式){
 循環(huán)體
}

while循環(huán)執(zhí)行邏輯:先計算表達式的值,當值為真(非0)時, 執(zhí)行循環(huán)體語句;執(zhí)行完循環(huán)體語句,再次計算表達式的值,如果為真,繼續(xù)執(zhí)行循環(huán)體……這個過程會一直重復,直到表達式的值為假(0)才退出循環(huán)。流程圖:


 


實例:

void setup() {
  // 初始化串口通訊
  Serial.begin(9600);
}
void loop() {
    int i=1, sum=0;
    while(i<=100){   //判斷i是否小于等于零
        sum+=i;  //當i小于等于零時,
        i++;     //執(zhí)行循環(huán)體中的語句。
    }
    Serial.print ("sum = ");  //通過串口監(jiān)視器輸出
    Serial.println (sum);     //while循環(huán)結束后的sum值
    delay (5000); // 延遲5秒鐘
}

do while循環(huán)語句

語法格式:

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

程序執(zhí)行邏輯:先執(zhí)行循環(huán)體代碼塊語句,然后再判斷表達式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while 循環(huán)至少要執(zhí)行一次循環(huán)體。

for 循環(huán)

語法格式:

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

for循環(huán)的執(zhí)行過程如下:

1) 先執(zhí)行表達式1。

2) 再執(zhí)行表達式2,若其值為真(非0),則執(zhí)行括號中的語句塊,否則將結束循環(huán)。

3) 執(zhí)行完循環(huán)體中的語句塊,再執(zhí)行表達式3。

4) 重復執(zhí)行步驟 2) 和 3),直到“表達式2”的值為假,就結束循環(huán)。

注意:表達式1僅在第一次循環(huán)時執(zhí)行,以后都不會再執(zhí)行,可以認為這是一個初始化語句。


 


void setup(){
    int i, sum=0;
    for(i=1; i<=100; i++){
       sum = sum + i;
    }
}
void loop(){
}

使用for語句應該注意

1) for循環(huán)中的“表達式1(循環(huán)變量賦初值)”、“表達式2(循環(huán)條件)”和“表達式3(循環(huán)變量增量)”都是選擇項,即可以缺省,但分號(;)不能缺省。

2) 省略了“表達式1(循環(huán)變量賦初值)”,表示不對循環(huán)控制變量賦初值。

3) 省略了“表達式2(循環(huán)條件)”,如果不做其它處理就會成為死循環(huán)。

4) 省略了“表達式3(循環(huán)變量增量)”,則不對循環(huán)控制變量進行操作,這時可在語句體中加入修改循環(huán)控制變量的語句。如以下示例:

for( i=1; i<=100; ){
    sum=sum+i;
    i++;
}

c語言中,for 循環(huán)使用更加靈活,完全可以取代 while 循環(huán)

實例:

int PWMpin = 9;  //引腳9通過限流電阻連接LED
void setup() {
}
void loop() {
   for (int i=0; i <= 255; i++){  //開始運行for循環(huán)語句
      analogWrite(PWMpin, i);     //對引腳9寫入i的數(shù)值
      delay(10);                  //延遲10毫秒
   } 
}

break語句

break語句用于繞過正常循環(huán)條件并中止do,for,或while循環(huán),也可用于中止switch語句。

例如:

void setup() {
  // 初始化串口通訊
  Serial.begin(9600);
}
void loop() {
    int i; int sum = 0;
    while(1){  //循環(huán)條件為死循環(huán)
       sum+=i;
       i++;
       if(i>100){
          break;
       }
    }
    Serial.print ("sum = ");  //通過串口監(jiān)視器輸出
    Serial.println (sum);     //do-while循環(huán)結束后的sum值
    delay (5000); // 延遲5秒鐘
}

continue語句

continue語句的作用是跳過循環(huán)體中剩余的語句而強制進入下一次循環(huán)。continue語句用于 while、for 循環(huán)中,常與 if 條件語句一起使用,判斷條件是否成立。

void setup() {
  pinMode (3, OUTPUT);
}
void loop() {
for (int x = 0; x < 255; x ++)
  {
      if (x > 40 && x < 120){ // 當x大于40或小于120
          continue;           // 跳過此次循環(huán)
      }
      analogWrite(3, x);  
  }    
}

return

7、函數(shù)

7.1 什么是函數(shù)

封裝在一起,實現(xiàn)一定功能的代碼就是函數(shù)。函數(shù)的使用可以使程序模塊化,增加代碼的復用度。

void delay(int ms)
{
    int start = micros();
    while (ms > 0) {
        yield();
        while ( ms > 0 && (micros() - start) >= 1000) {
            ms--;
            start += 1000;
        }
    }
}

7.2 函數(shù)的定義

dataType  functionName( dataType1 param1, dataType2 param2 ... ){
    //body
}
  • dataType 是返回值類型,它可以是C語言中的任意數(shù)據類型,例如 int、float、char 等。
  • functionName 是函數(shù)名,命名規(guī)則和變量命名規(guī)則相同。函數(shù)名后面的括號( )不能少。
  • body 是函數(shù)體,它是函數(shù)需要執(zhí)行的代碼,是函數(shù)的主體部分。函數(shù)體要用{ }包圍。
  • 如果有返回值,在函數(shù)體中使用 return 語句返回。return 出來的數(shù)據的類型要和 dataType 一樣。
  • dataType1 param1, dataType2 param2 ...是參數(shù)列表。函數(shù)可以沒有參數(shù),也可以有一個或多個參數(shù),多個參數(shù)之間由,分隔。參數(shù)本質上也是變量,定義時要指明類型和名稱。

形式參數(shù)概念:

在定義函數(shù)時的參數(shù)變量沒有具體的數(shù)據,它只能等到函數(shù)被調用時接收傳遞進來的數(shù)據,所以函數(shù)定義時的參數(shù)稱為形式參數(shù),簡稱形參

例如:定義一個計算m到n之間所有整數(shù)的和,并返回結果

int sum(int m, int n){
    int i, sum=0;
    for(i=m; i<=n; i++){
        sum+=i;
    }
    return sum;
}

return語句

終止一個函數(shù),并向調用此函數(shù)的函數(shù)返回一個值

7.3 函數(shù)的調用

functionName(param1, param2, param3 ...);

functionName 是函數(shù)名稱,param1, param2, param3 ...是實參列表。實參的個數(shù)和類型要和函數(shù)定義時的參數(shù)個數(shù)和類型一致。

實際參數(shù)概念:

函數(shù)被調用時給出的參數(shù)被賦予了具體的數(shù)據,所以函數(shù)調用時的參數(shù)稱為實際參數(shù),簡稱實參。函數(shù)調用時,實參的值會傳遞給形參。

int i = 10,j = 1000;
void setup() {
  Serial.begin(9600);
}
void loop() {
   int sum1 = sum(1,100);
   Serial.Println(sum);
   Serial.Println(sum(i,j));
}

7.4 變量的作用域

所謂作用域(Scope),就是變量的有效使用范圍。變量都有自己的作用域。決定變量作用域的是變量的定義位置。

局部變量

定義在函數(shù)內部的變量稱為局部變量(Local Variable),它的作用域僅限于函數(shù)內部, 離開該函數(shù)后就是無效的,再使用就會報錯。

全局變量

在所有函數(shù)外部定義的變量稱為全局變量(Global Variable),它的作用域默認是整個程序。

8、arduino內置常用函數(shù)

8.1 數(shù)字 I/O函數(shù)

pinMode(pin_num,模式) //設置引腳的輸入輸出模式
digitalWrite(pin_num,value)  //對數(shù)字引腳進行高低電平設置
digitalRead(pin_num)  //讀取數(shù)字引腳狀態(tài)

8.2 模擬 I/O函數(shù)

analogRead(pin)  //從模擬引腳讀取數(shù)值,范圍0到1023
analogWrite(pin,value) //向模擬引腳寫入數(shù)值,范圍0到255,通過PWM占空比可以控制
              //LED燈亮度、電機的轉速等

8.3 時間函數(shù)

millis()//用來獲取Arduino開機后運行的時間長度,單位是毫秒,
        //最長可記錄接近50天左右的時間。如果超出記錄時間上限,記錄將從0重新開始。
micros()//用來獲取Arduino開機后運行的時間長度,單位是微秒,
        //最長可記錄接近70天左右的時間。如果超出記錄時間上限,記錄將從0重新開始。
delay(x)//用于暫停程序運行。暫停時間可以由delay()函數(shù)的參數(shù)進行控制,
       //單位是毫秒(1秒鐘=1000毫秒)。
delayMicroseconds(x)//與delay()函數(shù)功能一樣,不同的是delayMicroseconds()的
                   //參數(shù)單位是微秒

8.4 產生隨機數(shù)函數(shù)

random()函數(shù) //生成并返回一個隨機數(shù)

long randNumber;
void setup(){
  Serial.begin(9600);
}
void loop(){
  randNumber = random(0, 300);  //產生0-300間的隨機數(shù)
  Serial.println(randNumber);
  delay(50);
}

randomSeed()函數(shù) //用來產生隨機種子

單獨使用random()函數(shù)所產生的隨機數(shù),在每一次程序重新啟動后,總是重復同一組隨機數(shù)字。如果希望程序重新啟動后產生的隨機數(shù)值與上一次程序運行時的隨機數(shù)不同,則需要使用randomSeed()函數(shù)。

在實際應用時,可以通過調用analogRead()函數(shù)讀取一個空引腳,作為隨機種子數(shù)值,或用micros()得到一個時間作為隨機數(shù)種子。

long randNumber;
void setup(){
  Serial.begin(9600);
  randomSeed(analogRead(A0)); 
  //將引腳A0放空,每次程序啟動時所讀取的數(shù)值都是不同的。
  //這么做可以產生真正的隨機種子值,從而產生隨機數(shù)值。
}
void loop(){
  randNumber = random(300);  // 產生隨機數(shù)
  Serial.println(randNumber);
  delay(50);
}

8.5 數(shù)學運算函數(shù)

min(x,y) //求兩個數(shù)之間的最小值
max(x,y)//求兩個數(shù)之間的最大值
abs(x) //求絕對值
pow(base, exponent) //指數(shù)運算函數(shù),返回base數(shù)值的exponent次方
sqrt(value) //開方函數(shù),返回value數(shù)值的平方根
sin(rad) //計算一個角度的正玄值并返回,rad參數(shù)單位為弧度,需要把度數(shù)轉換為弧度
cos(rad) //計算一個角度的余弦值并返回,rad參數(shù)單位為弧度,需要把度數(shù)轉換為弧度
tan(rad) //計算一個角度的正玄值并返回,rad參數(shù)單位為弧度,需要把度數(shù)轉換為弧度

8.6 串口通訊函數(shù)

Serial.begin() //設置電腦與Arduino進行串口通訊時的數(shù)據傳輸速率(每秒傳輸bit數(shù))
Serial.setTimeout(time)//用于設置設備等待數(shù)據超時時間。單位毫秒,默認為1000毫秒
Serial.print(value) //以字符形式向串口發(fā)送數(shù)據
Serial.println(value)//以字符形式向串口發(fā)送數(shù)據,并換行
Serial.available()//用于檢查串口是否接收到數(shù)據。返回等待讀取的數(shù)據字節(jié)數(shù)。
Serial.parseInt()//用于從設備接收到的數(shù)據中尋找整數(shù)數(shù)值并返回。
Serial.read() //從設備接收到數(shù)據中讀取一個字節(jié)的數(shù)據。
Serial.readBytes(buffer, length)
//用于從設備接收的數(shù)據中讀取信息。讀取到的數(shù)據信息將存放在緩存變量中。
//該函數(shù)在讀取到指定字節(jié)數(shù)的信息或者達到設定時間后都會停止函數(shù)執(zhí)行并返回。
Serial.readBytesUntil(character, buffer, length)
//用于從設備接收到數(shù)據中讀取信息。讀取到的數(shù)據信息將存放在緩存變量中。
//該函數(shù)在滿足以下任一條件后都會停止函數(shù)執(zhí)行并且返回。
//– 讀取到指定終止字符
//– 讀取到指定字節(jié)數(shù)的信息
//– 達到設定時間(可使用setTimeout來設置)
Serial.readString()//用于從設備接收到數(shù)據中讀取數(shù)據信息。
                   //讀取到的信息將以字符串格式返回。
Serial.readStringUntil(terminator)
//用于從設備接收到的數(shù)據中讀取信息。讀取到的數(shù)據信息將以字符串形式返回。
//該函數(shù)在滿足以下任一條件后都會停止函數(shù)執(zhí)行并返回。
//– 讀取到指定終止字符
//– 達到設定時間(可使用setTimeout來設置)
Serial.write(val)
Serial.write(str)
Serial.write(buf, len)
//以二進制數(shù)據向串口發(fā)送數(shù)據,數(shù)據是一個字節(jié)一個字節(jié)地發(fā)送的,
//若以字符形式發(fā)送數(shù)字請使用print()代替。
參數(shù)
//val: 作為單個字節(jié)發(fā)送的數(shù)據
//str: 由一系列字節(jié)組成的字符串
//buf: 同一系列字節(jié)組成的數(shù)組
//len: 要發(fā)送的數(shù)組的長度

實例:

Serial.begin()、Serial.println()、Serial.parseInt()函數(shù)用法:
void setup() {
  // 啟動串口通訊
  Serial.begin(9600); 
  Serial.println();
}
void loop() {
  if (Serial.available()){              // 當串口接收到信息后   
    int serialData = Serial.parseInt(); // 使用parseInt查找接收到的信息中的整數(shù)
    Serial.print("serialData = ");      // 然后通過串口監(jiān)視器輸出找到的數(shù)值
    Serial.println(serialData);
  }
}
Serial.read()用法:
void setup() {
  // 啟動串口通訊
  Serial.begin(9600); 
  Serial.println();
}
void loop() {
  while (Serial.available()){           // 當串口接收到信息后 
    char serialData = Serial.read();    // 將接收到的信息使用read讀取
    Serial.println((char)serialData);   // 然后通過串口監(jiān)視器輸出read函數(shù)讀取的信息
  }
}
//char terminateChar =  'T';      // 建立終止字符
const int bufferLength = 10;    // 定義緩存大小為10個字節(jié)
char serialBuffer[bufferLength];// 建立字符數(shù)組用于緩存
void setup() {
  // 啟動串口通訊
  Serial.begin(9600); 
  Serial.println();
}
void loop() {
  if (Serial.available()){                      // 當串口接收到信息后  
    Serial.println("Received Serial Data:");  
    // 將接收到的信息使用readBytesUntil讀取
    //Serial.readBytesUntil(terminateChar, serialBuffer, bufferLength);   
    //將接收到的信息使用readBytes讀取
    Serial.readBytes(serialBuffer, bufferLength);
    for(int i=0; i<bufferLength; i++){          // 然后通過串口監(jiān)視器輸出readBytes
      Serial.print(serialBuffer[i]);            // 函數(shù)所讀取的信息
    }
    Serial.println("");  
    Serial.println("Finished Printing Recevied Data.");
  }
}

Tags:Arduino,編程  
責任編輯:admin
相關文章列表
Arduino新手入門詳細教程系列之【Ⅱ:Arduino編程環(huán)境配置】
如何設置Arduino IDE、連接開發(fā)板以及上傳第一個草圖
Arduino入門(一)Arduino下載安裝,超級詳解_Arduino download
Arduino概述,Arduino開發(fā)板和Arduino IDE
Arduino 交通燈_arduino紅綠燈代碼 三色LED燈
Arduino——RGB三色燈
Arduino控制RGB三色LED燈實驗、程序代碼、連線圖、仿真_程序控制…
推薦 適用于Arduino平臺的編程開發(fā)工具(arduino編程軟件下載)
Arduino開發(fā)——基于HC-SR04測距的智能垃圾桶,超聲波測距
基于 Arduino 的 OLED 菜單顯示_arduino 菜單OLED顯示
Arduino提高篇06—溫濕度OLED顯示_arduino溫濕度oled顯示
Arduino入門怎么學_Arduino開發(fā)課程的教與學
總有一款適合你——Arduino開發(fā)板,各種開發(fā)板詳解
Arduino使用的單片機 ATMEGA328P引腳定義圖
詳解Arduino Uno開發(fā)板的引腳分配圖及定義 引腳定義
Arduino 程序結構
基于ATmega328的微控制器板原理圖 Arduino板UNO原理圖
Arduino 超詳細的開發(fā)入門指導
Arduino簡介
怎樣用Arduino編程
Arduino編程語言教程,Arduino和單片機的區(qū)別
Arduino是什么?Arduino有什么優(yōu)勢
Arduino光敏電阻調節(jié)呼吸燈
Arduino使用光敏電阻實驗
遠程控制通訊--基于Arduino + ESP8266控制LED燈
arduino1602液晶屏電子時鐘
arduino是什么_arduino介紹
使用Arduino播放《星球大戰(zhàn)》音樂 Arduino播放音樂
Arduino如何監(jiān)測電池電壓
如何用Arduino同時控制多個舵機
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
關于我們 - 聯(lián)系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
少妇人妻偷人精品视频| 被公连续侵犯中文字幕| 欧美日韩国产专区| 图片区网友自拍另类图区| 免费v片在线观看无遮挡| 三级免费黄色片| 男生和女生一起差差差差| 成人a一级试看片| 免费看电视电影| juliecasha大肥臀hd| 欧美激情一区二区三区四区 | 国产婷婷色综合av蜜臀av| 亚洲av无码专区国产乱码不卡| 韩国伦理电影我妻子的秘密| 日本中文字幕电影| 国产AV国片精品一区二区| 久久午夜夜伦鲁鲁片无码免费| 精品无码国产一区二区三区51安| 快猫官方网站是多少| 国产亚洲欧美日韩俺去了| 久久99精品国产自在现线小黄鸭| 精品人妻伦一二三区久久| 天天干天天拍天天操| 四虎在线视频免费观看| 中文字幕在线日韩| 爆乳女仆高潮在线观看| 国产精品伦一区二区三级视频 | 久久精品视频久久| 精品国产一区二区三区久久狼| 宝宝你里面好烫很软不想出来| 免费日本黄色片| www久久精品| 欧洲美熟女乱又伦免费视频| 国产成人无码专区| 久久久久久久97| 美女毛片一区二区三区四区| 成年网站在线播放| 免费毛片a线观看| 97人伦影院a级毛片| 欧美一级在线免费观看| 国产成人综合在线观看网站|