<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. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 基礎(chǔ)入門 >> Arduino開發(fā)學(xué)習(xí) >> 正文

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

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

      arduino語言基礎(chǔ)

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

      1、arduino程序框架

      /*
       1、此程序通過按鍵開關(guān)來控制LED燈的亮滅,當(dāng)按鍵按下時(shí)LED燈點(diǎn)亮,松開是LED燈熄滅;
       2、LED接13引腳
       3、按鍵開關(guān)接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 語句結(jié)束符

      ;

      2.3 代碼塊分界符

      { }

      2.4 宏定義符

      #define

      2.5 頭文件引用符

      #include

      3、數(shù)據(jù)類型

      3.1 基本數(shù)據(jù)類型

      數(shù)據(jù)類型 日常寫法 C/C++中寫法 C/C++中類型標(biāo)識(shí)符 數(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
      邏輯判斷 對(duì)、錯(cuò) true,false bool true,false

      3.2 基本數(shù)據(jù)類型轉(zhuǎn)換函數(shù)

      char(value)

      int(value)

      float(value)

      String(value)

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

      atoi(const char *nptr)

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

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

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

      3.4 數(shù)組 array

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

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

      語法格式:

      datatype arrayname[ 數(shù)組元素個(gè)數(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ù)據(jù)類型;

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

      數(shù)組初始化

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

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

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

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

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

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

      表示只給 a[0] ~ a[4] 這5個(gè)元素賦值,而后面5個(gè)元素自動(dòng)賦0值。

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

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

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

      由于剩余的元素會(huì)自動(dòng)初始化為0,所以只需要給第0個(gè)元素賦0值即可。

      使用數(shù)組

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

      arrayName[index]

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

      實(shí)例:

      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;}
      }
      

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

      4、變量

      4.1 什么是變量

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

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

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

      4.2 變量的作用

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

      4.3 變量的定義和應(yīng)用

      定義變量語法格式

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

      int length,width;

      float square;

      char ch;

      string name ="arduino"

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

      變量的應(yīng)用

      定義完變量,我們?cè)诖a中就可以對(duì)變量進(jìn)行賦值、引用

      length =10;

      width = 5;

      square = length * width

      printf(square)

      變量命名規(guī)則:

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

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

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

      3、變量名不能是關(guān)鍵字;

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

      1、見名知義;

      2、小駝峰格式;

      3、下劃線分段格式;

      5、數(shù)據(jù)運(yùn)算符

      5.1 算術(shù)運(yùn)算符

      加 +

      減 -

      乘 *

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

      取余 %

      自增 ++

      自減 --

      5.2 賦值符

      =

      復(fù)合賦值運(yùn)算符

      +=

      -=

      *=

      /=

      %=

      5.3 關(guān)系運(yùn)算符

      等于 ==

      不等于 !=

      大于 >

      小于 <

      大于等于 >=

      小于等于 <=

      5.4 邏輯運(yùn)算符(布爾運(yùn)算符)

      邏輯與 &&

      邏輯或 ||

      邏輯非 !

      5.5 位運(yùn)算符

      位與 &

      位或 |

      位異或 ^

      位非 ~

      左移 <<

      右移 >>

      6、程序三大流程控制

      6.1 順序結(jié)構(gòu)

      6.2 分支結(jié)構(gòu)(選擇結(jié)構(gòu))

      if 語句 (單分支結(jié)構(gòu))

      通過 if 語句,可以讓程序判斷某一個(gè)條件是否達(dá)到,并且根據(jù)判斷結(jié)果執(zhí)行相應(yīng)的程序。

      if語句語法格式:

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

      代碼執(zhí)行邏輯:

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


       


      if ...else 語句 (雙分支結(jié)構(gòu))

      語法格式:

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

      代碼執(zhí)行邏輯:

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


       


      實(shí)例:

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

      多個(gè)if ...else 語句 (多分支結(jié)構(gòu))

      語法格式:

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

      代碼執(zhí)行邏輯:

      從上到下依次檢測(cè)判斷條件,當(dāng)某個(gè)判斷條件成立時(shí),則執(zhí)行其對(duì)應(yīng)的語句塊。如果所有判斷條件都不成立,則執(zhí)行語句塊n。

      switch case語句

      switch語句通過對(duì)一個(gè)變量的值與case語句中指定的值進(jìn)行比較。當(dāng)一個(gè)case語句中的指定值與switch語句中的變量相匹配,就會(huì)運(yùn)行這個(gè)case語句下的代碼。通過switch case語句,實(shí)現(xiàn)多分支功能。

      語法格式:

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

      switch case語句使用注意事項(xiàng):

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

      實(shí)例

      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語句,根據(jù)接收到的不同信息進(jìn)行相應(yīng)的反應(yīng)。
          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)結(jié)構(gòu)

      while 循環(huán)語句

      語法格式:

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

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


       


      實(shí)例:

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

      do while循環(huán)語句

      語法格式:

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

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

      for 循環(huán)

      語法格式:

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

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

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

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

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

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

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


       


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

      使用for語句應(yīng)該注意

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

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

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

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

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

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

      實(shí)例:

      int PWMpin = 9;  //引腳9通過限流電阻連接LED
      void setup() {
      }
      void loop() {
         for (int i=0; i <= 255; i++){  //開始運(yùn)行for循環(huán)語句
            analogWrite(PWMpin, i);     //對(duì)引腳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)結(jié)束后的sum值
          delay (5000); // 延遲5秒鐘
      }
      

      continue語句

      continue語句的作用是跳過循環(huán)體中剩余的語句而強(qiáng)制進(jì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){ // 當(dāng)x大于40或小于120
                continue;           // 跳過此次循環(huán)
            }
            analogWrite(3, x);  
        }    
      }
      

      return

      7、函數(shù)

      7.1 什么是函數(shù)

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

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

      形式參數(shù)概念:

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

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

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

      return語句

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

      7.3 函數(shù)的調(diào)用

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

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

      實(shí)際參數(shù)概念:

      函數(shù)被調(diào)用時(shí)給出的參數(shù)被賦予了具體的數(shù)據(jù),所以函數(shù)調(diào)用時(shí)的參數(shù)稱為實(shí)際參數(shù),簡(jiǎn)稱實(shí)參。函數(shù)調(diào)用時(shí),實(shí)參的值會(huì)傳遞給形參。

      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ù)內(nèi)部的變量稱為局部變量(Local Variable),它的作用域僅限于函數(shù)內(nèi)部, 離開該函數(shù)后就是無效的,再使用就會(huì)報(bào)錯(cuò)。

      全局變量

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

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

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

      pinMode(pin_num,模式) //設(shè)置引腳的輸入輸出模式
      digitalWrite(pin_num,value)  //對(duì)數(shù)字引腳進(jìn)行高低電平設(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燈亮度、電機(jī)的轉(zhuǎn)速等
      

      8.3 時(shí)間函數(shù)

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

      8.4 產(chǎn)生隨機(jī)數(shù)函數(shù)

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

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

      randomSeed()函數(shù) //用來產(chǎn)生隨機(jī)種子

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

      在實(shí)際應(yīng)用時(shí),可以通過調(diào)用analogRead()函數(shù)讀取一個(gè)空引腳,作為隨機(jī)種子數(shù)值,或用micros()得到一個(gè)時(shí)間作為隨機(jī)數(shù)種子。

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

      8.5 數(shù)學(xué)運(yùn)算函數(shù)

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

      8.6 串口通訊函數(shù)

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

      實(shí)例:

      Serial.begin()、Serial.println()、Serial.parseInt()函數(shù)用法:
      void setup() {
        // 啟動(dòng)串口通訊
        Serial.begin(9600); 
        Serial.println();
      }
      void loop() {
        if (Serial.available()){              // 當(dāng)串口接收到信息后   
          int serialData = Serial.parseInt(); // 使用parseInt查找接收到的信息中的整數(shù)
          Serial.print("serialData = ");      // 然后通過串口監(jiān)視器輸出找到的數(shù)值
          Serial.println(serialData);
        }
      }
      Serial.read()用法:
      void setup() {
        // 啟動(dòng)串口通訊
        Serial.begin(9600); 
        Serial.println();
      }
      void loop() {
        while (Serial.available()){           // 當(dāng)串口接收到信息后 
          char serialData = Serial.read();    // 將接收到的信息使用read讀取
          Serial.println((char)serialData);   // 然后通過串口監(jiān)視器輸出read函數(shù)讀取的信息
        }
      }
      //char terminateChar =  'T';      // 建立終止字符
      const int bufferLength = 10;    // 定義緩存大小為10個(gè)字節(jié)
      char serialBuffer[bufferLength];// 建立字符數(shù)組用于緩存
      void setup() {
        // 啟動(dòng)串口通訊
        Serial.begin(9600); 
        Serial.println();
      }
      void loop() {
        if (Serial.available()){                      // 當(dāng)串口接收到信息后  
          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,編程  
      責(zé)任編輯:admin
      相關(guān)文章列表
      Arduino新手入門詳細(xì)教程系列之【Ⅱ:Arduino編程環(huán)境配置】
      如何設(shè)置Arduino IDE、連接開發(fā)板以及上傳第一個(gè)草圖
      Arduino入門(一)Arduino下載安裝,超級(jí)詳解_Arduino download
      Arduino概述,Arduino開發(fā)板和Arduino IDE
      Arduino 交通燈_arduino紅綠燈代碼 三色LED燈
      Arduino——RGB三色燈
      Arduino控制RGB三色LED燈實(shí)驗(yàn)、程序代碼、連線圖、仿真_程序控制…
      推薦 適用于Arduino平臺(tái)的編程開發(fā)工具(arduino編程軟件下載)
      Arduino開發(fā)——基于HC-SR04測(cè)距的智能垃圾桶,超聲波測(cè)距
      基于 Arduino 的 OLED 菜單顯示_arduino 菜單OLED顯示
      Arduino提高篇06—溫濕度OLED顯示_arduino溫濕度oled顯示
      Arduino入門怎么學(xué)_Arduino開發(fā)課程的教與學(xué)
      總有一款適合你——Arduino開發(fā)板,各種開發(fā)板詳解
      Arduino使用的單片機(jī) ATMEGA328P引腳定義圖
      詳解Arduino Uno開發(fā)板的引腳分配圖及定義 引腳定義
      Arduino 程序結(jié)構(gòu)
      基于ATmega328的微控制器板原理圖 Arduino板UNO原理圖
      Arduino 超詳細(xì)的開發(fā)入門指導(dǎo)
      Arduino簡(jiǎn)介
      怎樣用Arduino編程
      Arduino編程語言教程,Arduino和單片機(jī)的區(qū)別
      Arduino是什么?Arduino有什么優(yōu)勢(shì)
      Arduino光敏電阻調(diào)節(jié)呼吸燈
      Arduino使用光敏電阻實(shí)驗(yàn)
      遠(yuǎn)程控制通訊--基于Arduino + ESP8266控制LED燈
      arduino1602液晶屏電子時(shí)鐘
      arduino是什么_arduino介紹
      使用Arduino播放《星球大戰(zhàn)》音樂 Arduino播放音樂
      Arduino如何監(jiān)測(cè)電池電壓
      如何用Arduino同時(shí)控制多個(gè)舵機(jī)
      請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個(gè)字
      [ 查看全部 ] 網(wǎng)友評(píng)論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 久久久久国产综合AV天堂| 久久五月天综合网| 婷婷六月久久综合丁香可观看| 久久一日本道色综合久| 久久综合香蕉国产蜜臀AV| 久久婷婷五月综合色高清| 狠狠色综合网久久久久久| 激情综合婷婷丁香五月俺来也| 丁香六月婷婷综合| 69国产成人综合久久精品91| 色综合久久综合中文小说| 久久久久综合中文字幕 | 色综合天天综合婷婷伊人| 国产综合久久久久久| 亚洲综合AV在线在线播放| 五月婷婷激情综合| 久久综合给久久狠狠97色| 小说区图片区综合久久88| 亚洲综合在线成人一区| 综合色就爱涩涩涩综合婷婷| 狠狠综合久久久久综合小说网| 狠狠色丁香婷婷综合激情| 青青草原综合久久大伊人导航| 一本色道久久88—综合亚洲精品| 国产成人久久综合二区| 亚洲综合久久精品无码色欲| 亚洲综合综合在线| 久久综合久久自在自线精品自| 一本一道久久综合狠狠老| 婷婷综合缴情亚洲狠狠尤物| 色综合色国产热无码一| 婷婷亚洲综合一区二区 | 亚洲综合激情五月色一区| 91精品国产综合久久青草| 色综合久久综合中文综合网| 狠狠色色综合网站| 久久综合狠狠色综合伊人| 久热综合在线亚洲精品| 亚洲综合伊人制服丝袜美腿| 天天做天天做天天综合网| 国产99久久亚洲综合精品|