<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

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

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

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2023/11/6

      arduino語言基礎

      arduino是用什么語言寫的?
      Arduino使用的編程語言主要是基于C++語言的一種簡化版本,稱為Arduino語言或Wiring語言。Arduino語言在C++的基礎上進行了一些簡化和封裝,使得用戶可以更加輕松地進行硬件編程。Arduino語言的編程方式類似于C++,包括變量、控制結構、函數等基本語法,同時還有許多庫函數可以方便用戶進行各種操作,如控制GPIO口、讀取傳感器數據、進行串口通訊等。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、數據類型

      3.1 基本數據類型

      數據類型 日常寫法 C/C++中寫法 C/C++中類型標識符 數值范圍
      整數 1,100, 1,100 int -32768~32767
      小數 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 基本數據類型轉換函數

      char(value)

      int(value)

      float(value)

      String(value)

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

      atoi(const char *nptr)

      3.3 整型數不同進制表示

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

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

      3.4 數組 array

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

      創建數組

      語法格式:

      datatype arrayname[ 數組元素個數];

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

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

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

      數組初始化

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

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

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

      數組賦初值需要注意以下幾點:

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

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

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

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

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

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

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

      使用數組

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

      arrayName[index]

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

      實例:

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

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

      4、變量

      4.1 什么是變量

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

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

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

      4.2 變量的作用

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

      4.3 變量的定義和應用

      定義變量語法格式

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

      int length,width;

      float square;

      char ch;

      string name ="arduino"

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

      變量的應用

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

      length =10;

      width = 5;

      square = length * width

      printf(square)

      變量命名規則:

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

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

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

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

      變量命名規范建議

      1、見名知義;

      2、小駝峰格式;

      3、下劃線分段格式;

      5、數據運算符

      5.1 算術運算符

      加 +

      減 -

      乘 *

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

      取余 %

      自增 ++

      自減 --

      5.2 賦值符

      =

      復合賦值運算符

      +=

      -=

      *=

      /=

      %=

      5.3 關系運算符

      等于 ==

      不等于 !=

      大于 >

      小于 <

      大于等于 >=

      小于等于 <=

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

      邏輯與 &&

      邏輯或 ||

      邏輯非 !

      5.5 位運算符

      位與 &

      位或 |

      位異或 ^

      位非 ~

      左移 <<

      右移 >>

      6、程序三大流程控制

      6.1 順序結構

      6.2 分支結構(選擇結構)

      if 語句 (單分支結構)

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

      if語句語法格式:

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

      代碼執行邏輯:

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


       


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

      語法格式:

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

      代碼執行邏輯:

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


       


      實例:

      void setup() {
        Serial.begin(9600);   //開始串口通訊
        pinMode(2, INPUT_PULLUP);    //將引腳2設置為輸入上拉模式
        pinMode(13, OUTPUT);
      }
      void loop() {
        int sensorVal = digitalRead(2);  //將開關狀態數值讀取到變量中
        Serial.println(sensorVal);  //輸出開關狀態數值
        //按鈕被按下后,引腳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
      }
      

      代碼執行邏輯:

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

      switch case語句

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

      語法格式:

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

      switch case語句使用注意事項:

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

      實例

      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 循環結構

      while 循環語句

      語法格式:

      while(表達式){
       循環體
      }
      

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


       


      實例:

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

      do while循環語句

      語法格式:

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

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

      for 循環

      語法格式:

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

      for循環的執行過程如下:

      1) 先執行表達式1。

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

      3) 執行完循環體中的語句塊,再執行表達式3。

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

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


       


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

      使用for語句應該注意

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

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

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

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

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

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

      實例:

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

      break語句

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

      例如:

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

      continue語句

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

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

      return

      7、函數

      7.1 什么是函數

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

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

      7.2 函數的定義

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

      形式參數概念:

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

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

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

      return語句

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

      7.3 函數的調用

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

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

      實際參數概念:

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

      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),就是變量的有效使用范圍。變量都有自己的作用域。決定變量作用域的是變量的定義位置。

      局部變量

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

      全局變量

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

      8、arduino內置常用函數

      8.1 數字 I/O函數

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

      8.2 模擬 I/O函數

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

      8.3 時間函數

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

      8.4 產生隨機數函數

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

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

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

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

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

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

      8.5 數學運算函數

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

      8.6 串口通訊函數

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

      實例:

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

      Tags:Arduino,編程  
      責任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 五月天激情综合网丁香婷婷| 色欲老女人人妻综合网| 伊人久久亚洲综合影院首页| 亚洲综合av一区二区三区不卡| 亚洲狠狠婷婷综合久久蜜芽| 人人婷婷色综合五月第四人色阁| 五月天婷亚洲天综合网精品偷| 婷婷成人丁香五月综合激情| 色综合热无码热国产| 色综合中文综合网| 久久综合给合综合久久| 亚洲私人无码综合久久网| 中文自拍日本综合| 国产亚洲综合久久| 丁香婷婷激情综合俺也去 | 狠狠激情五月综合婷婷俺| 中文字幕亚洲综合久久菠萝蜜 | 色婷婷久久综合中文久久蜜桃av| 本道久久综合无码中文字幕| 亚洲AV综合色一区二区三区| 日日狠狠久久偷偷色综合0| 天天综合天天综合| 亚洲一区综合在线播放| 综合国产在线观看无码| 丁香狠狠色婷婷久久综合| 国产色产综合色产在线观看视频| 亚洲综合无码一区二区三区| 综合在线视频精品专区| 国产AV综合影院| 亚洲AV综合色一区二区三区| 国产亚洲综合网曝门系列| 国产综合免费精品久久久| 亚洲中文字幕无码久久综合网| 91精品国产综合久久久久久| 久久久久久久尹人综合网亚洲| 综合无码一区二区三区| 亚洲人成伊人成综合网久久久| 亚洲精品二区国产综合野狼| 91色综合综合热五月激情| 婷婷国产天堂久久综合五月| 色视频综合无码一区二区三区|