久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3694|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

arduino語法(待更新)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:293442 發(fā)表于 2018-3-18 10:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#Arduino語法
setup()     
初始化函數(shù)
loop()      
循環(huán)體函數(shù)
  
控制語句類似于C
//if       if...else       for    switch case     while      do... while     break      continue        return     goto
  
擴(kuò)展語法類似于C
//;
(分號)     {}(花括號)     //(單行注釋)        /* */(多行注釋)     #define    #include
算數(shù)運算符類似于C
//=
(賦值運算符)      +(加)        -(減)        *(乘)        /(除)        %(模)
  
比較運算符類似于C
//==
(等于)        !=(不等于)     <(小于)       >(大于)        <=(小于等于)    >=(大于等于)
布爾運算符類似于C
//&&
(與)     ||(或)       !(非)
指針運算符類似于C
//*
取消引用運算符     & 引用運算符
  
位運算符類似于C
    & (bitwise and)    | (bitwise or)      ^ (bitwise xor)    ~ (bitwise not)     << (bitshiftleft)        >> (bitshift right)
  
復(fù)合運算符類似于C
    ++ (increment)     -- (decrement)      += (compound addition)     -= (compound subtraction)       *=(compound multiplication)        /= (compounddivision)      &= (compound bitwise and)      |= (compound bitwise or)
常量
constants
預(yù)定義的常量
    BOOL    true false
      
引腳電壓定義,HIGHLOW【當(dāng)讀取(read)或?qū)懭耄?/font>write)數(shù)字引腳時只有兩個可能的值: HIGH LOW
    HIGH
(參考引腳)的含義取決于引腳(pin)的設(shè)置,引腳定義為INPUTOUTPUT時含義有所不同。當(dāng)一個引腳通過pinMode被設(shè)置為INPUT,并通過digitalRead讀取(read)時。如果當(dāng)前引腳的電壓大于等于3V,微控制器將會返回為HIGH 引腳也可以通過pinMode被設(shè)置為INPUT,并通過digitalWrite設(shè)置為HIGH。輸入引腳的值將被一個內(nèi)在的20K上拉電阻 控制 HIGH上,除非一個外部電路將其拉低到LOW 當(dāng)一個引腳通過pinMode被設(shè)置為OUTPUT,并digitalWrite設(shè)置為HIGH時,引腳的電壓應(yīng)在5V。在這種狀態(tài)下,它可以 輸出電流 。例如,點亮一個通過一串電阻接地或設(shè)置為LOWOUTPUT屬性引腳的LED
    LOW
的含義同樣取決于引腳設(shè)置,引腳定義為INPUTOUTPUT時含義有所不同。當(dāng)一個引腳通過pinMode配置為INPUT,通過digitalRead設(shè)置為讀取(read)時,如果當(dāng)前引腳的電壓小于等于2V,微控制器將返回為LOW 當(dāng)一個引腳通過pinMode配置為OUTPUT,并通過digitalWrite設(shè)置為LOW時,引腳為0V。在這種狀態(tài)下,它可以 倒灌 電流。例如,點亮一個通過串聯(lián)電阻連接到+5V,或到另一個引腳配置為OUTPUTHIGH的的LED   
數(shù)字引腳(Digital pins)定義,INPUTOUTPUT【數(shù)字引腳當(dāng)作 INPUT OUTPUT都可以 。用pinMode()方法使一個數(shù)字引腳從INPUTOUTPUT變化】
    Arduino
Atmega)引腳通過pinMode()配置為 輸入(INPUT 即是將其配置在一個高阻抗的狀態(tài)。配置為INPUT的引腳可以理解為引腳取樣時對電路有極小的需求,即等效于在引腳前串聯(lián)一個100兆歐姆(Megohms)的電阻。這使得它們非常利于讀取傳感器,而不是為LED供電。
   
引腳通過pinMode()配置為 輸出(OUTPUT 即是將其配置在一個低阻抗的狀態(tài)。
   
這意味著它們可以為電路提供充足的電流。Atmega引腳可以向其他設(shè)備/電路提供(提供正電流positive current)或倒灌(提供負(fù)電流negative current)達(dá)40毫安(mA)的電流。這使得它們利于給LED供電,而不是讀取傳感器。輸出(OUTPUT)引腳被短路的接地或5V電路上會受到損壞甚至燒毀。Atmega引腳在為繼電器或電機(jī)供電時,由于電流不足,將需要一些外接電路來實現(xiàn)供電。
      
整數(shù)常量
   
進(jìn)制  例子  格式  備注
    10
(十進(jìn)制) 123    
    2
(二進(jìn)制)  B1111011    前綴'B'   只適用于8位的值(0255)字符0-1有效
    8
(八進(jìn)制)  0173    前綴”0   字符0-7有效
    16
(十六進(jìn)制)    0x7B   前綴”0x  字符0-9A-FA-F有效
      
小數(shù)是十進(jìn)制數(shù)。這是數(shù)學(xué)常識。如果一個數(shù)沒有特定的前綴,則默認(rèn)為十進(jìn)制。
   
二進(jìn)制以2為基底,只有數(shù)字01是有效的。
      'u' or 'U'
指定一個常量為無符號型。(只能表示正數(shù)和0 例如: 33u
    'l' or 'L'
指定一個常量為長整型。(表示數(shù)的范圍更廣) 例如: 100000L
    'ul' or 'UL'
這個你懂的,就是上面兩種類型,稱作無符號長整型。 例如:32767ul
     
浮點常量
   
浮點數(shù) 被轉(zhuǎn)換為    被轉(zhuǎn)換為
    10.0       10
    2.34E5  2.34 * 10^5234000
    67E-12  67.0 *10^-12   0.000000000067
  
數(shù)據(jù)類型類似于C
    void       boolean     char       unsigned char       byte       int     unsigned int       word
    long       unsigned long       float      double      string - char array    String - object     array -
(數(shù)組)
數(shù)據(jù)類型轉(zhuǎn)換類似于C
    char()     byte()      int()      word()      long()      float()
    word()
   
把一個值轉(zhuǎn)換為word數(shù)據(jù)類型的值,或由兩個字節(jié)創(chuàng)建一個字符。
    word(x)
    word(h, l)
   
參數(shù)
    X
:任何類型的值
    H
:高階(最左邊)字節(jié)
    L
:低序(最右邊)字節(jié)
修飾符類似于C
    static     volatile        const
輔助工具
    sizeof()
  
數(shù)字 I/O
    pinMode()
   
將指定的引腳配置成輸出或輸入【pinMode(pin, mode) pin:要設(shè)置模式的引腳  mode:INPUTOUTPUT
   
例子:
    ledPin = 13 // LED
連接到數(shù)字腳13
    void setup()
    {
        pinMode
ledPinOUTPUT; //設(shè)置數(shù)字腳為輸出
    }
    void loop()
    {
       digitalWrite
ledPinHIGH; //點亮LED
       delay(1000);                 //
等待一秒
       digitalWrite(ledPin, LOW);    //
滅掉LED
       delay(1000);  //
等待第二個
    }
     digitalWrite()
   
給一個數(shù)字引腳寫入HIGH或者LOW
   
如果一個引腳已經(jīng)使用pinMode()配置為OUTPUT模式,其電壓將被設(shè)置為相應(yīng)的值,HIGH5V3.3V控制板上為3.3V),LOW0V
   
如果引腳配置為INPUT模式,使用digitalWrite()寫入HIGH值,將使內(nèi)部20K上拉電阻(詳見數(shù)字引腳教程)。寫入LOW將會禁用上拉。上拉電阻可以點亮一個LED讓其微微亮,如果LED工作,但是亮度很低,可能是因為這個原因引起的。補(bǔ)救的辦法是 使用pinMode()函數(shù)設(shè)置為輸出引腳。
   
注意:數(shù)字13號引腳難以作為數(shù)字輸入使用,因為大部分的控制板上使用了一顆LED與一個電阻連接到他。如果啟動了內(nèi)部的20K上拉電阻,他的電壓將在1.7V左右,而不是正常的5V,因為板載LED串聯(lián)的電阻把他使他降了下來,這意味著他返回的值總是LOW。如果必須使用數(shù)字13號引腳的輸入模式,需要使用外部上拉下拉電阻。
     digitalRead()
    digitalRead
PIN)【pin:你想讀取的引腳號(int),返回 HIGH LOW
   
例子:
    ledPin = 13 // LED
連接到13
    int inPin = 7;   //
按鈕連接到數(shù)字引腳7
    int val = 0;  //
定義變量存以儲讀值
    void setup()
    {
       pinMode(ledPin, OUTPUT);      //
13腳設(shè)置為輸出
       pinMode(inPin, INPUT);      //
7腳設(shè)置為輸入
    }
    void loop()
    {
        val =digitalRead(inPin);   //
讀取輸入腳
        digitalWrite(ledPin,val);    //
LED值設(shè)置為按鈕的值
    }
  
模擬 I/O
    analogReference()
    analogReference(type)
   
配置用于模擬輸入的基準(zhǔn)電壓(即輸入范圍的最大值)。選項有:
    DEFAULT
:默認(rèn)5VArduino板為5V)或3.3伏特(Arduino板為3.3V)為基準(zhǔn)電壓。
    INTERNAL
:在ATmega168ATmega328上以1.1V為基準(zhǔn)電壓,以及在ATmega8上以2.56V為基準(zhǔn)電壓(Arduino Mega無此選項)
    INTERNAL1V1
:以1.1V為基準(zhǔn)電壓(此選項僅針對Arduino Mega
    INTERNAL2V56
:以2.56V為基準(zhǔn)電壓(此選項僅針對Arduino Mega
    EXTERNAL
:以AREF引腳(05V)的電壓作為基準(zhǔn)電壓。
    type
:使用哪種參考類型(DEFAULT, INTERNAL,INTERNAL1V1, INTERNAL2V56, 或者 EXTERNAL
   
改變基準(zhǔn)電壓后,之前從anal??ogRead()讀取的數(shù)據(jù)可能不準(zhǔn)確。
   
不要在AREF引腳上使用使用任何小于0V或超過5V的外部電壓。如果你使用AREF引腳上的電壓作為基準(zhǔn)電壓,你在調(diào)用analogRead()前必須設(shè)置參考類型為EXTERNAL。否則,你將會削短有效的基準(zhǔn)電壓(內(nèi)部產(chǎn)生)和AREF引腳,這可能會損壞您Arduino板上的單片機(jī)。
   
另外,您可以在外部基準(zhǔn)電壓和AREF引腳之間連接一個5K電阻,使你可以在外部和內(nèi)部基準(zhǔn)電壓之間切換。請注意,總阻值將會發(fā)生改變,因為AREF引腳內(nèi)部有一個32K電阻。這兩個電阻都有分壓作用。所以,例如,如果輸入2.5V的電壓,最終在在AREF引腳上的電壓將為2.5 * 32 /32 + 5= 2.2V
      analogRead()
   
從指定的模擬引腳讀取數(shù)據(jù)值。 Arduino板包含一個6通道(MiniNano8個通道,Mega16個通道),10位模擬數(shù)字轉(zhuǎn)換器。這意味著它將05伏特之間的輸入電壓映射到01023之間的整數(shù)值。這將產(chǎn)生讀數(shù)之間的關(guān)系:5伏特/ 1024單位,或0.0049伏特(4.9 mV)每單位。輸入范圍和精度可以使用analogReference()改變。 它需要大約100微秒(0.0001)來讀取模擬輸入,所以最大的閱讀速度是每秒10000次。
    analogRead
PIN
   
引腳:從輸入引腳(大部分板子從05MiniNano07Mega015)讀取數(shù)值,返回從01023的整數(shù)值
   
例子:
    int analogPin = 3;    //
電位器(中間的引腳)連接到模擬輸入引腳3
                         //
另外兩個引腳分別接地和+5 V
    int val = 0;  //
定義變量來存儲讀取的數(shù)值
    void setup()
    {
       serial.begin
9600; //設(shè)置波特率(9600
    }
    void loop()
    {
        val =analogRead
analogPin; //從輸入引腳讀取數(shù)值
       serial.println
val; //顯示讀取的數(shù)值
    }
      analogWrite() - PWM
    analogWrite
pin,value
   
從一個引腳輸出模擬值(PWM)。可用于讓LED以不同的亮度點亮或驅(qū)動電機(jī)以不同的速度旋轉(zhuǎn)。analogWrite()輸出結(jié)束后,該引腳將產(chǎn)生一個穩(wěn)定的特殊占空比方波,直到下次調(diào)用analogWrite()(或在同一引腳調(diào)用digitalRead()digitalWrite())。PWM信號的頻率大約是490赫茲。
   
在大多數(shù)arduino板(ATmega168ATmega328),只有引腳35691011可以實現(xiàn)該功能。在aduino Mega上,引腳213可以實現(xiàn)該功能。老的Arduino板(ATmega8)的只有引腳91011可以使用analogWrite()。在使用analogWrite()前,你不需要調(diào)用pinMode()來設(shè)置引腳為輸出引腳。
    analogWrite
函數(shù)與模擬引腳、analogRead函數(shù)沒有直接關(guān)系。
    pin
:用于輸入數(shù)值的引腳。
    value
:占空比:0(完全關(guān)閉)到255(完全打開)之間。
   
例子:
    int ledPin = 9;  // LED
連接到數(shù)字引腳9
    int analogPin = 3;  //
電位器連接到模擬引腳3
    int val = 0;  //
定義變量存以儲讀值
    void setup()
    {
        pinMode
ledPin,OUTPUT;  //設(shè)置引腳為輸出引腳
    }
    void loop()
    {
        val =analogRead
analogPin;  //從輸入引腳讀取數(shù)值
       analogWrite
ledPinval / 4;  // val / 4的數(shù)值點亮LED(因為analogRead讀取的數(shù)值從01023,而analogWrite輸出的數(shù)值從0255
    }
高級 I/O
    tone()
   
在一個引腳上產(chǎn)生一個特定頻率的方波(50%占空比)。持續(xù)時間可以設(shè)定,否則波形會一直產(chǎn)生直到調(diào)用noTone()函數(shù)。該引腳可以連接壓電蜂鳴器或其他喇叭播放聲音。
   
在同一時刻只能產(chǎn)生一個聲音。如果一個引腳已經(jīng)在播放音樂,那調(diào)用tone()將不會有任何效果。如果音樂在同一個引腳上播放,它會自動調(diào)整頻率。
   
使用tone()函數(shù)會與3腳和11腳的PWM產(chǎn)生干擾(Mega板除外)。
   
注意:如果你要在多個引腳上產(chǎn)生不同的音調(diào),你要在對下一個引腳使用tone()函數(shù)前對此引腳調(diào)用noTone()函數(shù)。
    tone(pin, frequency)
    tone(pin, frequency, duration)
    pin
:要產(chǎn)生聲音的引腳
    frequency:
產(chǎn)生聲音的頻率,單位Hz,類型unsigned int
    duration
:聲音持續(xù)的時間,單位毫秒(可選),類型unsigned long
      noTone()
   
停止由tone()產(chǎn)生的方波。如果沒有使用tone()將不會有效果。
    noTone(pin)
    pin:
所要停止產(chǎn)生聲音的引腳
      shiftOut()
   
將一個數(shù)據(jù)的一個字節(jié)一位一位的移出。從最高有效位(最左邊)或最低有效位(最右邊)開始。依次向數(shù)據(jù)腳寫入每一位,之后時鐘腳被拉高或拉低,指示剛才的數(shù)據(jù)有效。
   
注意:如果你所連接的設(shè)備時鐘類型為上升沿,你要確定在調(diào)用shiftOut()前時鐘腳為低電平,如調(diào)用digitalWrite(clockPin, LOW)
   
注意:這是一個軟件實現(xiàn);Arduino提供了一個硬件實現(xiàn)的SPI庫,它速度更快但只在特定腳有效。
    shiftOut(dataPin, clockPin,bitOrder, value)
    dataPin
:輸出每一位數(shù)據(jù)的引腳(int)
    clockPin
:時鐘腳,當(dāng)dataPin有值時此引腳電平變化(int)
    bitOrder
:輸出位的順序,最高位優(yōu)先或最低位優(yōu)先
    value:
要移位輸出的數(shù)據(jù)(byte)
    dataPin
clockPin要用pinMode()配置為輸出。 shiftOut目前只能輸出1個字節(jié)(8位),所以如果輸出值大于255需要分兩步。
    //
最高有效位優(yōu)先串行輸出
    int data= 500;
    //
移位輸出高字節(jié)
    shiftOut(dataPin, clock, MSBFIRST,(data >> 8));  
    //
移位輸出低字節(jié)
    shiftOut(data, clock, MSBFIRST,data);
    //
最低有效位優(yōu)先串行輸出
    data = 500;
    //
移位輸出低字節(jié)
    shiftOut(dataPin, clock, LSBFIRST,data);  
    //
移位輸出高字節(jié)
    shiftOut(dataPin, clock, LSBFIRST,(data >> 8));
   
例子:
   
相應(yīng)電路,查看tutorial on controlling a74HC595 shift register
    //
引腳連接到74HC595ST_CP
    int latchPin = 8;
    //
引腳連接到74HC595SH_CP
    int clockPin = 12;
    // //
引腳連接到74HC595DS
    int dataPin = 11;
    void setup() {
    //
設(shè)置引腳為輸出
       pinMode(latchPin, OUTPUT);
       pinMode(clockPin, OUTPUT);
       pinMode(dataPin, OUTPUT);
    }
    void loop() {
        //
向上計數(shù)程序
        for(J = 0;J <256; J + +){
           //
傳輸數(shù)據(jù)的時候?qū)?/font>latchPin拉低
           digitalWrite(latchpin, LOW);
           shiftOut(dataPin,clockPin,LSBFIRST,J);
           //
之后將latchPin拉高以告訴芯片
           //
它不需要再接受信息了
           digitalWrite(latchpin, HIGH);
           delay(1000);
        }
    }
  
    shiftIn()
   
將一個數(shù)據(jù)的一個字節(jié)一位一位的移入。從最高有效位(最左邊)或最低有效位(最右邊)開始。對于每個位,先拉高時鐘電平,再從數(shù)據(jù)傳輸線中讀取一位,再將時鐘線拉低。
   
注意:這是一個軟件實現(xiàn);Arduino提供了一個硬件實現(xiàn)的SPI庫,它速度更快但只在特定腳有效。
    shiftIn(dataPin,clockPin,bitOrder)
    dataPin
:輸出每一位數(shù)據(jù)的引腳(int)
    clockPin
:時鐘腳,當(dāng)dataPin有值時此引腳電平變化(int)
    bitOrder
:輸出位的順序,最高位優(yōu)先或最低位優(yōu)先
  
    pulseIn()
   
讀取一個引腳的脈沖(HIGHLOW)。例如,如果valueHIGHpulseIn()會等待引腳變?yōu)?/font>HIGH,開始計時,再等待引腳變?yōu)?/font>LOW并停止計時。返回脈沖的長度,單位微秒。如果在指定的時間內(nèi)無脈沖函數(shù)返回。
   
此函數(shù)的計時功能由經(jīng)驗決定,長時間的脈沖計時可能會出錯。計時范圍從10微秒至3分鐘。(1=1000毫秒=1000000微秒)
    pulseIn(pin, value)
    pulseIn(pin, value, timeout)
    pin:
你要進(jìn)行脈沖計時的引腳號(int)。
    value:
要讀取的脈沖類型,HIGHLOWint)。
    timeout (
可選):指定脈沖計數(shù)的等待時間,單位為微秒,默認(rèn)值是1秒(unsigned long
   
返回:脈沖長度(微秒),如果等待超時返回0unsigned long
   
例子:
    int pin = 7;
    unsigned long duration;
    void setup()
    {
       pinMode(pin, INPUT);
    }
    void loop()
    {
        duration =pulseIn(pin, HIGH);;
    }
  
時間
    millis()
   
返回Arduino開發(fā)板從運行當(dāng)前程序開始的毫秒數(shù)。這個數(shù)字將在約50天后溢出(歸零)
   
例子:
    unsigned long time;
    void setup(){
       Serial.begin(9600)

    }
    void loop(){
       serial.print("Time:");
        time =millis();
        //
打印從程序開始到現(xiàn)在的時間
       serial.println(time);
        //
等待一秒鐘,以免發(fā)送大量的數(shù)據(jù)
       delay(1000);
    }
   
參數(shù) millis 是一個無符號長整數(shù),試圖和其他數(shù)據(jù)類型(如整型數(shù))做數(shù)學(xué)運算可能會產(chǎn)生錯誤
  
    micros()
   
返回 Arduino 開發(fā)板從運行當(dāng)前程序開始的微秒數(shù)。這個數(shù)字將在約70分鐘后溢出(歸零)。在 16MHz Arduino 開發(fā)板上(比如 Duemilanove Nano),這個函數(shù)的分辨率為四微秒(即返回值總是四的倍數(shù))。在 8MHz Arduino 開發(fā)板上(比如 LilyPad),這個函數(shù)的分辨率為八微秒。
   
注意 :每毫秒是1,000微秒,每秒是1,000,000微秒。
   
例子:
    unsigned long time;
    void setup(){
       Serial.begin(9600);
    }
    void loop(){
       Serial.print
(“Time:”);
        time =micros();
        //
打印從程序開始的時間
       Serial.println(time);
        //
等待一秒鐘,以免發(fā)送大量的數(shù)據(jù)
       delay(1000);
    }
  
    delay()
   
使程序暫停設(shè)定的時間(單位毫秒)。(一秒等于1000毫秒)
   
參數(shù):ms:暫停的毫秒數(shù)(unsigned long
   
例子:
    ledPin = 13 / / LED
連接到數(shù)字13
    void setup()
    {
       pinMode(ledPin, OUTPUT);      //
設(shè)置引腳為輸出
    }
    void loop()
    {
       digitalWrite(ledPin, HIGH);   //
點亮LED
       delay(1000);                 //
等待1
       digitalWrite(ledPin, LOW);    //
滅掉LED
       delay(1000);                 //
等待一秒
    }
   
雖然創(chuàng)建一個使用delay()的閃爍LED很簡單,并且許多例子將很短的delay用于消除開關(guān)抖動,delay()確實擁有很多顯著的缺點。在delay函數(shù)使用的過程中,讀取傳感器值、計算、引腳操作均無法執(zhí)行,因此,它所帶來的后果就是使其他大多數(shù)活動暫停。其他操作定時的方法請參加millis()函數(shù)和它下面的例子。大多數(shù)熟練的程序員通常避免超過10毫秒的delay(),除非arduino程序非常簡單。
   
但某些操作在delay()執(zhí)行時任然能夠運行,因為delay函數(shù)不會使中斷失效。通信端口RX接收到得數(shù)據(jù)會被記錄,PWM(analogWrite)值和引腳狀態(tài)會保持,中斷也會按設(shè)定的執(zhí)行。
  
    delayMicroseconds()
   
使程序暫停指定的一段時間(單位微秒)。一毫秒等于一千微秒,一秒等于1000000微秒。 目前,能夠產(chǎn)生的最大的延時準(zhǔn)確值是16383。這可能會在未來的Arduino版本中改變。對于超過幾千微秒的延遲,你應(yīng)該使用delay()代替。
   
例子:
    int outPin = 8;                // digital pin 8
    void setup()
    {
        pinMode
outPinOUTPUT; //設(shè)置為輸出的數(shù)字管腳
    }
    void loop()
    {
       digitalWrite
outPinHIGH; //設(shè)置引腳高電平
       delayMicroseconds(50);       //
暫停50微秒
       digitalWrite(outPin, LOW);    //
設(shè)置引腳低電平
       delayMicroseconds(50);       //
暫停50微秒
    }
  
數(shù)學(xué)運算
    min()      max()       abs()
    constrain(x,a,b)
【將一個數(shù)約束在一個范圍內(nèi)】
    map(value, fromLow, fromHigh,toLow, toHigh)
    value:
需要映射的值
    fromLow:
當(dāng)前范圍值的下限
    fromHigh:
當(dāng)前范圍值的上限
    toLow:
目標(biāo)范圍值的下限
    toHigh:
目標(biāo)范圍值的上限
   
例子:
    void setup(){}
    void loop()
    {
        int val =analogRead(0);
        val =map(val, 0, 1023, 0, 255);
       analogWrite(9, val);
    }
   
數(shù)學(xué)實現(xiàn)
    long map(long x, long in_min, longin_max, long out_min, long out_max)
    {
      return (x - in_min) *(out_max - out_min) / (in_max - in_min) + out_min;
    }
  
    pow(base, exponent)    sqrt(x)
  
三角函數(shù)
    sin()      cos()       tan()
  
隨機(jī)數(shù)
    randomSeed()
【隨機(jī)數(shù)種子】    random()random(max),random(min, max)
  
位操作
    lowByte()   
取一個變量(例如一個字)的低位(最右邊)字節(jié)。
    highByte()  
提取一個字節(jié)的高位(最左邊的),或一個更長的字節(jié)的第二低位。
    bitRead()   
讀取一個數(shù)的位。bitRead(x, n) X:想要被讀取的數(shù) N:被讀取的位,0是最重要(最右邊)的位    該位的值(01
    bitWrite()  
在位上寫入數(shù)字變量   bitWrite(x, n,b)   X:要寫入的數(shù)值變量 N:要寫入的數(shù)值變量的位,從0開始是最低(最右邊)的位 B:寫入位的數(shù)值(01
    bitSet()   
為一個數(shù)字變量設(shè)置一個位    bitSet(x,n)    X:想要設(shè)置的數(shù)字變量 N:想要設(shè)置的位,0是最重要(最右邊)的位
    bitClear()  
清除一個數(shù)值型數(shù)值的指定位(將此位設(shè)置成 0) bitClear(x,n)  X:指定要清除位的數(shù)值 N:指定要清除位的位置,從0開始,0 表示最右端位
    bit()   
計算指定位的值(0位是11位是224,以此類推) bit(n)  需要計算的位
  
設(shè)置中斷函數(shù)
    attachInterrupt()
    attachInterrupt(interrupt,function, mode)
   
當(dāng)發(fā)生外部中斷時,調(diào)用一個指定函數(shù)。當(dāng)中斷發(fā)生時,該函數(shù)會取代正在執(zhí)行的程序。大多數(shù)的Arduino板有兩個外部中斷:0(數(shù)字引腳2)和1(數(shù)字引腳3)。
    arduino Mege
有四個外部中斷:數(shù)字2(引腳21),320針),4(引腳19),5(引腳18
  
    interrupt
:中斷引腳數(shù)
    function
:中斷發(fā)生時調(diào)用的函數(shù),此函數(shù)必須不帶參數(shù)和不返回任何值。該函數(shù)有時被稱為中斷服務(wù)程序。
    mode
:定義何時發(fā)生中斷以下四個contstants預(yù)定有效值:
    LOW
當(dāng)引腳為低電平時,觸發(fā)中斷
    CHANGE
當(dāng)引腳電平發(fā)生改變時,觸發(fā)中斷
    RISING
當(dāng)引腳由低電平變?yōu)楦唠娖綍r,觸發(fā)中斷
    FALLING
當(dāng)引腳由高電平變?yōu)榈碗娖綍r,觸發(fā)中斷.
  
   
當(dāng)中斷函數(shù)發(fā)生時,delya()millis()的數(shù)值將不會繼續(xù)變化。當(dāng)中斷發(fā)生時,串口收到的數(shù)據(jù)可能會丟失。你應(yīng)該聲明一個變量來在未發(fā)生中斷時儲存變量。
   
在單片機(jī)自動化程序中當(dāng)突發(fā)事件發(fā)生時,中斷是非常有用的,它可以幫助解決時序問題。一個使用中斷的任務(wù)可能會讀一個旋轉(zhuǎn)編碼器,監(jiān)視用戶的輸入。
   
如果你想以確保程序始終抓住一個旋轉(zhuǎn)編碼器的脈沖,從來不缺少一個脈沖,它將使寫一個程序做任何事情都要非常棘手,因為該計劃將需要不斷輪詢的傳感器線編碼器,為了趕上脈沖發(fā)生時。其他傳感器也是如此,如試圖讀取一個聲音傳感器正試圖趕上一按,或紅外線槽傳感器(照片滅弧室),試圖抓住一個硬幣下降。在所有這些情況下,使用一個中斷可以釋放的微控制器來完成其他一些工作。
  
   
例子:
    int pin = 13;
    volatile int state = LOW;
      
    void setup()
    {
       pinMode(pin, OUTPUT);
       attachInterrupt(0, blink, CHANGE);
    }
    void loop()
    {
       digitalWrite(pin, state);
    }
    void blink()
    {
        state =!state;
    }
  
    detachInterrupt()
   
關(guān)閉給定的中斷
    detachInterrupt(interrupt)
    interrupt:
中斷禁用的數(shù)(0或者1)
  
  
開關(guān)中斷
    interrupts()
   
重新啟用中斷(使用noInterrupts()命令后將被禁用)。中斷允許一些重要任務(wù)在后臺運行,默認(rèn)狀態(tài)是啟用的。禁用中斷后一些函數(shù)可能無法工作,并傳入信息可能會被忽略。中斷會稍微打亂代碼的時間,但是在關(guān)鍵部分可以禁用中斷
    noInterrupts()
   
禁止中斷(重新使能中斷interrupts())。中斷允許在后臺運行一些重要任務(wù),默認(rèn)使能中斷。禁止中斷時部分函數(shù)會無法工作,通信中接收到的信息也可能會丟失。
   
中斷會稍影響計時代碼,在某些特定的代碼中也會失效
   
例子:
    void setup()
    void loop()
    {
       noInterrupts
();
        //
關(guān)鍵的、時間敏感的代碼放在這
       interrupts();
        //
其他代碼放在這
}
  
通訊
Serial
用于Arduino控制板和一臺計算機(jī)或其他設(shè)備之間的通信。所有的Arduino控制板有至少一個串口(又稱作為UARTUSART)。它通過0(RX)1(TX)數(shù)字引腳經(jīng)過串口轉(zhuǎn)換芯片連接計算機(jī)USB端口與計算機(jī)進(jìn)行通信。因此,如果你使用這些功能的同時你不能使用引腳01作為輸入或輸出。
您可以使用Arduino IDE內(nèi)置的串口監(jiān)視器與Arduino板通信。點擊工具欄上的串口監(jiān)視器按鈕,調(diào)用begin()函數(shù)(選擇相同的波特率)。
Arduino Mega
有三個額外的串口:Serial 1使用19(RX)18(TX)Serial 2使用17(RX)16(TX)Serial3使用15(RX)14(TX) 若要使用這三個引腳與您的個人電腦通信,你需要一個額外的USB轉(zhuǎn)串口適配器,因為這三個引腳沒有連接到Mega上的USB轉(zhuǎn)串口適配器。若要用它們來與外部的TTL串口設(shè)備進(jìn)行通信,將TX引腳連接到您的設(shè)備的RX引腳,將RX引腳連接到您的設(shè)備的TX引腳,將GND連接到您的設(shè)備的GND。(不要直接將這些引腳直接連接到RS232串口;他們的工作電壓在+/- 12V,可能會損壞您的Arduino控制板。)Arduino Leonardo板使用Serial 1通過0(RX)1(TX)viaRS-232通信,。Serial預(yù)留給使用Mouse and Keyboard libarariiesUSB CDC通信 。更多信息,請參考Leonardo 開始使用頁和硬件頁。
函數(shù):
    if (Serial)
        
表示指定的串口是否準(zhǔn)備好
        
Leonardo上,if(Serial)表示不論有無USB CDC,串行連接都是開放的。對于所有其他的情況,包括Leonardo上的if(Serial1),將一直返回true 這來自于 Arduino 1.0.1版本的介紹
        
對于所有的arduino:  if (Serial)
        ArduinoLeonardo
特有:    if (Serial1)
        ArduinoMega
特有:
           if (Serial1)
           if (Serial2)
           if (Serial3)
  
    available()
        
獲取從串口讀取有效的字節(jié)數(shù)(字符)。這是已經(jīng)傳輸?shù)剑⒋鎯υ诖薪邮站彌_區(qū)(能夠存儲64個字節(jié))的數(shù)據(jù)。 available()繼承了 Stream
       Serial.available()
        
僅適用于Arduino Mega
       Serial1.available()
       Serial2.available()
       Serial3.available()
        
例子:
       incomingByte = 0; //
傳入的串行數(shù)據(jù)
        voidsetup() {
           Serial.begin(9600);     //
打開串行端口,設(shè)置傳輸波特率為9600 bps
        }
        voidloop() {
           //
只有當(dāng)你接收到數(shù)據(jù)時才會發(fā)送數(shù)據(jù),:
           if (Serial.available() > 0) {
           //
讀取傳入的字節(jié):
               incomingByte = Serial.read();
               //
顯示你得到的數(shù)據(jù):
               Serial.print("I received: ");
               Serial.println(incomingByte, DEC);
           }
        }
         
    begin()
        
將串行數(shù)據(jù)傳輸速率設(shè)置為位/秒(波特)。與計算機(jī)進(jìn)行通信時,可以使用這些波特率:30012002400480096001440019200288003840057600115200。當(dāng)然,您也可以指定其他波特率 - 例如,引腳01和一個元件進(jìn)行通信,它需要一個特定的波特率
       Serial.begin(speed)
僅適用于Arduino Mega : Serial1.begin(speed) Serial2.begin(speed)Serial3.begin(speed)
        speed:
/ (波特) - long
         
    end()
        
停用串行通信,使RXTX引腳用于一般輸入和輸出。要重新使用串行通信, 需要 Serial.begin()語句
       Serial.end()
        
僅適用于Arduino Mega: Serial1.end()Serial2.end() Serial3.end()
  
    find()
       Serial.find()
從串行緩沖器中讀取數(shù)據(jù),直到發(fā)現(xiàn)給定長度的目標(biāo)字符串。如果找到目標(biāo)字符串,該函數(shù)返回true,如果超時則返回false
       Serial.flush()
繼承了 Stream
        Serial.find(target)
        target :
要搜索的字符串(字符)
         
    findUntil()
       Serial.findUntil()
從串行緩沖區(qū)讀取數(shù)據(jù),直到找到一個給定的長度或字符串終止位。
        
如果目標(biāo)字符串被發(fā)現(xiàn),該函數(shù)返回true,如果超時則返回false
       Serial.findUntil()
繼承了Stream類。
       Serial.findUntil(target, terminal)
        target :
要搜索的字符串(char) terminal : 在搜索中的字符串終止位 (char)
         
    flush()
        
等待超出的串行數(shù)據(jù)完成傳輸。(在1.0及以上的版本中,flush()語句的功能不再是丟棄所有進(jìn)入緩存器的串行數(shù)據(jù)。)
        flush()
繼承了Stream
       Serial.flush()
        
Arduino Mega 可以使用的語法:
       Serial1.flush()
       Serial2.flush()
       Serial3.flush()
  
    parseFloat()
        
查找傳入的串行數(shù)據(jù)流中的下一個有效的浮點數(shù)。 parseFloat()繼承了Stream
       Serial.parseFloat()
        
僅適用于Arduino Mega
       Serial1.parseFloat()
       Serial2.parseFloat()
        Serial3.parseFloat()
  
    parseInt()
        
查找傳入的串行數(shù)據(jù)流中的下一個有效的整數(shù)。 parseInt()繼承了Stream
       Serial.parseInt()
        
僅適用于Arduino Mega
       Serial1.parseInt()
       Serial2.parseInt()
       Serial3.parseInt()
         
    peek()
        
返回傳入的串行數(shù)據(jù)的下一個字節(jié)(字符),而不是進(jìn)入內(nèi)部串行緩沖器調(diào)取。也就是說,連續(xù)調(diào)用 peek()將返回相同的字符,與調(diào)用read()方法相同。peek()繼承自 Stream
       Serial.peek()
        
僅適用于Arduino Mega :
       Serial1.peek()
       Serial2.peek()
       Serial3.peek()
  
    print()
        
以人們可讀的ASCII文本形式打印數(shù)據(jù)到串口輸出。此命令可以采取多種形式。每個數(shù)字的打印輸出使用的是ASCII字符。浮點型同樣打印輸出的是ASCII字符,保留到小數(shù)點后兩位。Bytes型則打印輸出單個字符。字符和字符串原樣打印輸出。Serial.print()打印輸出數(shù)據(jù)不換行,Serial.println()打印輸出數(shù)據(jù)自動換行處理。例如
       Serial.print(78)
輸出為“78
       Serial.print(1.23456)
輸出為“1.23
       Serial.print(
N)輸出為“N
        Serial.print(
Hello world.)輸出為“Hello world.
        
也可以自己定義輸出為幾進(jìn)制(格式);可以是BIN(二進(jìn)制,或以2為基數(shù)),OCT(八進(jìn)制,或以8為基數(shù)),DEC(十進(jìn)制,或以10為基數(shù)),HEX(十六進(jìn)制,或以16為基數(shù))。對于浮點型數(shù)字,可以指定輸出的小數(shù)數(shù)位。例如
       Serial.print(78,BIN)
輸出為“1001110
       Serial.print(78,OCT)
輸出為“116
        Serial.print(78,DEC)
輸出為“78
       Serial.print(78,HEX)
輸出為“4E
       Serial.println(1.23456,0)
輸出為“1
       Serial.println(1.23456,2)
輸出為“1.23
       Serial.println(1.23456,4)
輸出為“1.2346
        
你可以通過基于閃存的字符串來進(jìn)行打印輸出,將數(shù)據(jù)放入F()中,再放入Serial.print()。例如 Serial.print(F(Hello world)) 若要發(fā)送一個字節(jié),則使用 Serial.write()
         
       Serial.print(val)
       Serial.print(val
,格式)
        val
:打印輸出的值 - 任何數(shù)據(jù)類型
        
格式:指定進(jìn)制(整數(shù)數(shù)據(jù)類型)或小數(shù)位數(shù)(浮點類型)
        
例子:
        int x =0;    //
定義一個變量并賦值
        voidsetup() {
           Serial.begin(9600);      //
打開串口傳輸,并設(shè)置波特率為9600
        }
        voidloop() {
           //
打印標(biāo)簽
           Serial.print("NO FORMAT");       //
打印一個標(biāo)簽
           Serial.print("\t");             //
打印一個轉(zhuǎn)義字符
           Serial.print("DEC");
           Serial.print("\t");      
           Serial.print("HEX");
           Serial.print("\t");
           Serial.print("OCT");
           Serial.print("\t");
           Serial.print("BIN");
           Serial.print("\t");
           for(x=0; x< 64; x++){    //
打印ASCII碼表的一部分, 修改它的格式得到需要的內(nèi)容
               //
打印多種格式:
               Serial.print(x);       //
以十進(jìn)制格式將x打印輸出 - "DEC"相同
               Serial.print("\t");    //
橫向跳格
               Serial.print(x, DEC);  //
以十進(jìn)制格式將x打印輸出
               Serial.print("\t");    //
橫向跳格
               Serial.print(x, HEX);  //
以十六進(jìn)制格式打印輸出
               Serial.print("\t");    //
橫向跳格
               Serial.print(x, OCT);  //
以八進(jìn)制格式打印輸出
               Serial.print("\t");    //
橫向跳格
               Serial.println(x, BIN);  //
以二進(jìn)制格式打印輸出
               //                           
然后用 "println"打印一個回車
               delay(200);           //
延時200ms
           }
           Serial.println("");      //
打印一個空字符,并自動換行
        }
         
    println()
        
打印數(shù)據(jù)到串行端口,輸出人們可識別的ASCII碼文本并回車 (ASCII 13, '\r') 及換行(ASCII 10, '\n')。此命令采用的形式與Serial.print ()相同
       Serial.println(val)
       Serial.println(val, format)
        val:
打印的內(nèi)容 - 任何數(shù)據(jù)類型都可以
        format:
指定基數(shù)(整數(shù)數(shù)據(jù)類型)或小數(shù)位數(shù)(浮點類型)
        
例子:
        intanalogValue = 0;    //
定義一個變量來保存模擬值
        voidsetup() {
           //
設(shè)置串口波特率為9600 bps
           Serial.begin(9600);
        }
        voidloop() {
           //
讀取引腳0的模擬輸入:
           analogValue = analogRead
0;
           //
打印g各種格式:
           Serial.println(analogValue);       //
打印ASCII編碼的十進(jìn)制
           Serial.println(analogValue, DEC);  //
打印ASCII編碼的十進(jìn)制
           Serial.println(analogValue, HEX);  //
打印ASCII編碼的十六進(jìn)制
           Serial.println(analogValue, OCT);  //
打印ASCII編碼的八進(jìn)制
            Serial.println(analogValue,BIN);  //
打印一個ASCII編碼的二進(jìn)制
           //
延時10毫秒:
           delay(10);
        }
         
    read()
        
讀取傳入的串口的數(shù)據(jù)。read() 繼承自 Stream
       serial.read()
        ArduinoMega
獨有:
       erial1.read()
        serial2.read()
       serial3.read()
        
例子:
        intincomingByte = 0;   //
傳入的串行數(shù)據(jù)
        voidsetup() {
           Serial.begin(9600);     //
打開串口,設(shè)置數(shù)據(jù)傳輸速率9600
        }
        voidloop() {
           //
當(dāng)你接收數(shù)據(jù)時發(fā)送數(shù)據(jù)
           if (Serial.available() > 0) {
               //
讀取傳入的數(shù)據(jù):
               incomingByte = Serial.read();
               //
打印你得到的:
               Serial.print("I received: ");
               Serial.println(incomingByte, DEC);
           }
        }
         
    readBytes()
       Serial.readBytes()
從串口讀字符到一個緩沖區(qū)。如果預(yù)設(shè)的長度讀取完畢或者時間到了 (參見 Serial.setTimeout()),函數(shù)將終止.
       Serial.readBytes()
返回放置在緩沖區(qū)的字符數(shù)。返回0意味著沒有發(fā)現(xiàn)有效的數(shù)據(jù)。
       Serial.readBytes()
繼承自 Stream
       Serial.readBytes(buffer, length)
        buffer
:用來存儲字節(jié)(char[]byte[])的緩沖區(qū)
        length
:讀取的字節(jié)數(shù)(int
  
    readBytesUntil()
       Serial.readBytesUntil()
將字符從串行緩沖區(qū)讀取到一個數(shù)組。如果檢測到終止字符,或預(yù)設(shè)的讀取長度讀取完畢,或者時間到了 (參見 Serial.setTimeout())函數(shù)將終止。
       Serial.readBytesUntil()
返回讀入數(shù)組的字符數(shù)。返回0意味著沒有發(fā)現(xiàn)有效的數(shù)據(jù)。
       Serial.readBytesUntil()
繼承自 Stream
       Serial.readBytesUntil(character, buffer, length)
        character
:要搜索的字符(char
        buffer
:緩沖區(qū)來存儲字節(jié)(char[]byte[]
        length:
讀的字節(jié)數(shù)(int
  
    setTimeout()
       Serial.setTimeout()
設(shè)置使用Serial.readBytesUntil() Serial.readBytes()時等待串口數(shù)據(jù)的最大毫秒值. 默認(rèn)為1000毫秒。
       Serial.setTimeout()
繼承自Stream
       Serial.setTimeout(time)
        time
:以毫秒為單位的超時時間(long
         
    write()
        
寫入二級制數(shù)據(jù)到串口。發(fā)送的數(shù)據(jù)以一個字節(jié)或者一系列的字節(jié)為單位。如果寫入的數(shù)字為字符,需使用print()命令進(jìn)行代替
       Serial.write(val)
       Serial.write(str)
       Serial.write(buf, len)
        ArduinoMega
還支持:Serial1Serial2Serial3 (替代Serial
        val:
以單個字節(jié)形式發(fā)的值
        str:
以一串字節(jié)的形式發(fā)送的字符串
        buf:
以一串字節(jié)的形式發(fā)送的數(shù)組
        len:
數(shù)組的長度
        
返回結(jié)果:
        byte
        write()
將返回寫入的字節(jié)數(shù),但是否使用這個數(shù)字是可選的
  
    SerialEvent()
  
Stream
  
USB
(僅適用于 Leonardo Due
鍵盤
鼠標(biāo)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:312642 發(fā)表于 2018-4-24 18:26 來自手機(jī) | 只看該作者
支持一個,慢慢看
回復(fù)

使用道具 舉報

板凳
ID:310567 發(fā)表于 2018-4-25 22:45 | 只看該作者
寫得很好,對新手很有幫助
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 婷婷色综合 | 国产精品18久久久久久久 | 岛国毛片 | 在线观看av网站 | 久久久做| 91久久精品一区二区二区 | 国产综合视频 | 亚洲 中文 欧美 | 宅男噜噜噜66一区二区 | 午夜小电影 | 久久久久久综合 | 91在线视频国产 | 国产一级特黄aaa大片评分 | av高清毛片| 色综合久久天天综合网 | 日本亚洲一区 | 日韩精品一区二区三区久久 | 狼人伊人影院 | 亚洲成av人片在线观看 | 天天射美女 | 精品久久久久久久久久久久久久 | 亚洲一区二区av | 国产精品视频一区二区三区 | 麻豆视频国产在线观看 | 亚洲毛片在线观看 | 欧美久久视频 | 国产成人精品一区二 | 黄网在线观看 | 欧美一级在线视频 | 国产精品揄拍一区二区久久国内亚洲精 | 三级高清| 精品一区二区久久久久久久网站 | 久久久久亚洲 | 亚洲高清成人在线 | 99精品久久久国产一区二区三 | 久国产视频 | 久久久91精品国产一区二区三区 | 国产一区中文 | 尤物视频在线免费观看 | 在线小视频 | 免费同性女女aaa免费网站 |