日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【单片机】Arduino(以UNO R3为例)

發(fā)布時(shí)間:2024/3/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【单片机】Arduino(以UNO R3为例) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 單片機(jī)是什么?
  • 如何學(xué)習(xí)單片機(jī)
  • Arduino系列單片機(jī)介紹
    • 官網(wǎng)文件
    • 其他問題匯總 /* 2021.10.24更新 */
  • Arduino語言
    • 1. C語言基礎(chǔ)
    • 2. 數(shù)據(jù)類型
      • (1)各數(shù)據(jù)類型占用字節(jié)數(shù)
      • (2)Arduino中特有的數(shù)據(jù)類型
        • ?? i) boolean ··· 布爾類型
        • ?? ii) byte ··· 字節(jié)類型
        • ?? iii) word ··· 字類型
        • ?? iv) String ··· 特殊的字符串
    • 3. 程序結(jié)構(gòu)
    • 4. 函數(shù)總結(jié)
      • (1)數(shù)字 I/O(GPIO)
        • pinMode()
        • digitalWrite()
        • digitalRead()
      • (2)模擬 I/O(ADC & Timer)
        • analogRead()
        • analogWrite()
      • (3)高級(jí) I/O(Soft USART)
        • shiftOut()
        • shiftIn()
        • pulseIn()
        • tone()
        • noTone()
      • (4)時(shí)間函數(shù)(Timer)
        • millis()
        • micros()
        • delay()
        • delayMicroseconds()
      • (5)數(shù)學(xué)函數(shù)
        • min()
        • max()
        • constrain()
        • map()
        • pow()
        • sqrt()
        • 三角函數(shù)
      • (6)字符判斷函數(shù)
      • (7)隨機(jī)函數(shù)
        • random()
        • randomSeed()
      • (8)字節(jié)函數(shù)
      • (9)外部中斷函數(shù)(GPIO Interrupt)
        • interrupts()
        • noInterrupts()
        • attachInterrupt()
        • detachInterrupt()
  • 串行通訊(Hardware)
    • UART
      • if (Serial)
      • available()
      • availableForWrite()
      • begin()
      • end()
      • write()
      • read()
      • peek()
      • print()
      • println()(ln為"line"的縮寫)
      • readBytes()
      • readBytesUntil()
      • readString()
      • readStringUntil()
      • find()
      • findUntil()
      • flush()
      • setTimeout()
      • parseFloat()
      • parseInt()
    • SPI
    • I2C
  • 高級(jí)應(yīng)用:用AVR開發(fā)Arduino
  • 其他操作
    • 1. Arduino IDE的“高級(jí)用法”——串口繪圖器
    • 2. Arduino IDE的替代編輯器——Visual Studio Code
    • 3. Arduino IDE v2.0 Beta版本
    • 4. 記錄兩個(gè)寫得非常好的教程

單片機(jī)是什么?

??單片機(jī),全稱單片微型計(jì)算機(jī)(英語:Single-chip Microcomputer),又稱微控制器單元(Microcontroller Unit),是把中央處理器存儲(chǔ)器定時(shí)/計(jì)數(shù)器(timer/counter)、各種輸入輸出接口等都集成在一塊集成電路芯片上的微型計(jì)算機(jī)。與應(yīng)用在個(gè)人電腦中的通用型微處理器相比,它更強(qiáng)調(diào)自供應(yīng)(不用外接硬件)和節(jié)約成本。它的最大優(yōu)點(diǎn)是體積小,可放在儀表內(nèi)部,但存儲(chǔ)量小,輸入輸出接口簡單,功能較低。由于其發(fā)展非常迅速,舊的定義已不能滿足,所以在很多應(yīng)用場合被稱為微控制器,中文翻譯為“單片機(jī)”,英文縮寫為MCU

參考: 單片機(jī)-維基百科

如何學(xué)習(xí)單片機(jī)

??在經(jīng)過電賽那段時(shí)間的培訓(xùn)之后,我突然覺得,想要真正掌握一款單片機(jī),首先是要理解單片機(jī)的原理,這也是最重要的,不理解單片機(jī)的工作原理只是不斷地套代碼,確實(shí)也可以做成一些項(xiàng)目,但如果遇到比較底層的問題想要解決可能就會(huì)很困難。
??其次的話,我覺得就是要學(xué)會(huì)看官方手冊(cè),和真正理解示例代碼。很多人包括我,在入門的時(shí)候往往會(huì)被官方手冊(cè)中大段的英文以及示例中幾百行代碼(或注釋)嚇得有點(diǎn)怕,但后來我的老師告訴了我一個(gè)很簡單但卻被忽略的方法:根據(jù)自己學(xué)過的知識(shí)抓住關(guān)鍵,不求全部看懂,先理解框架。所以:先求完成,再求完美,切勿好高騖遠(yuǎn)。 與君共勉!

Arduino系列單片機(jī)介紹

官網(wǎng)文件


??注:Arduino主要編寫語言為C/C++。
??為了詳細(xì)了解Arduino單片機(jī)的信息,我們需要到官網(wǎng)去查找更詳細(xì)的資料,首先打開官網(wǎng):https://www.arduino.cc/,在搜索欄中搜索對(duì)應(yīng)的型號(hào),這里以UNO R3這個(gè)型號(hào)為例(其他型號(hào)類似)進(jìn)入詳情頁面:

??這里截取官網(wǎng)提供的引腳圖,建議一定要保存一份!!!


??繼續(xù)往下翻,可以看到Features(UNO的特性介紹)板塊:

??在最后的Resource板塊還可以下載Arduino相關(guān)的資料及集成開發(fā)環(huán)境,這里方便起見,匯總一下:

  • DataSheet:數(shù)據(jù)手冊(cè)
  • Arduino IDE:集成開發(fā)環(huán)境
  • Full PinOUT:引腳圖(一共3張,比上面的引腳圖更加全面)
  • Schematics:原理圖(不可編輯)
  • Eagle Files:原理圖和PCB,Eagle格式,可編輯,如果不想裝Eagle也對(duì)PCB沒有興趣的可以不下
  • ??到此,官方的相關(guān)文件初步下載完畢了,IDE也安裝完畢,現(xiàn)在就可以開始學(xué)習(xí)Arduino的語言了。

    其他問題匯總 /* 2021.10.24更新 */

    ??之前一直以為這篇教程寫得非常完善了,但還有一些電氣特性沒有交代好,下面補(bǔ)充一下。

    • Arduino數(shù)字引腳是TTL電平,這個(gè)在使用的時(shí)候還是需要注意一下。具體可以參考這篇鏈接。
    • Arduino一共有3種供電方案,相信這也是很多人開始使用Arduino時(shí)非常關(guān)注的點(diǎn)。第一種是最常見的,也就是用USB供電,比如插在電腦上或者充電寶等。第二種是使用直流穩(wěn)壓5V供電,方法是接入5V和GND,這種一定要保證電源電壓的穩(wěn)定性。第三種是Vin輸入,輸入7-12V,如果低于7V,可能會(huì)導(dǎo)致Arduino工作不穩(wěn)定。第四種是黑色端子輸入電壓,要求輸入電壓為9-12V,如果低于9V,可能會(huì)導(dǎo)致Arduino工作不穩(wěn)。具體可以參考這篇文章。
    • 這里有一個(gè)比較完整的介紹文件,可以參考一下,鏈接。

    Arduino語言

    1. C語言基礎(chǔ)

    ??此處一些C語言的基本用法(包括基本數(shù)據(jù)變量,基本程序結(jié)構(gòu)等)就不再介紹了,如果有需求的可以去網(wǎng)上找一些資料復(fù)習(xí)一下,也可以看看這個(gè)鏈接。

    2. 數(shù)據(jù)類型

    (1)各數(shù)據(jù)類型占用字節(jié)數(shù)


    ??注意:在單片機(jī)的程序中,很多時(shí)候只會(huì)關(guān)注數(shù)據(jù)的字節(jié)數(shù),而不關(guān)心它到底是什么類型的。另外,數(shù)據(jù)類型占用的字節(jié)數(shù)與單片機(jī)的位數(shù)無關(guān)!!!而是與編譯器的類型有關(guān),詳情可以參見這篇博客:int字節(jié)問題說明

    (2)Arduino中特有的數(shù)據(jù)類型

    ?? i) boolean ··· 布爾類型

    ???布爾類型占用1個(gè)字節(jié),其值只能為1(true)或 0(false)。關(guān)于bool和boolean可以參考這篇文章。

    ?? ii) byte ··· 字節(jié)類型

    ???儲(chǔ)存的數(shù)值范圍為0到255占用1個(gè)字節(jié)

    ?? iii) word ··· 字類型

    ???在UNO等基于ATMEGA芯片的板子上,word為無符號(hào)16位整數(shù),其他型號(hào)為無符號(hào)32位整數(shù)。

    ?? iv) String ··· 特殊的字符串

    ???String類型(首字母為大寫)本質(zhì)上為一個(gè)類,允許以比字符數(shù)組更復(fù)雜的方式使用和操作文本字符串。 可以連接字符串、附加、搜索和替換子字符串等。 它比簡單的字符數(shù)組需要更多的內(nèi)存,但也更有用
    ???另外需要注意的是,雙引號(hào)內(nèi)的一個(gè)字符串會(huì)被看作字符數(shù)組,而不是String類的實(shí)例。

    ???構(gòu)建一個(gè)String類有很多種方法,如下所示:

    String stringOne = "Hello String"; // using a constant String String stringOne = String('a'); // converting a constant char into a String String stringTwo = String("This is a string"); // converting a constant string into a String object String stringOne = String(stringTwo + " with more"); // concatenating two strings String stringOne = String(13); // using a constant integer String stringOne = String(analogRead(0), DEC); // using an int and a base String stringOne = String(45, HEX); // using an int and a base (hexadecimal) String stringOne = String(255, BIN); // using an int and a base (binary) String stringOne = String(millis(), DEC); // using a long and a base String stringOne = String(5.698, 3); // using a float and the decimal places(保留3位小數(shù))

    ???String類相關(guān)操作函數(shù)總結(jié)

    string.charAt(n); //訪問第n+1個(gè)字符,返回該字符 string.setCharAt(index, c); //將string中的index位置的字符設(shè)為c string.compareTo(string2); //按字母比較兩個(gè)字符串,如果string > string2,返回正值,如果 //string < string2,返回負(fù)值,如果相等,返回0。另外,string這種類型可以用運(yùn)算符進(jìn)行比較和運(yùn)算 //比如 ==, !=,>, < ,>=, <= string.equals(string2); //判斷string和string2是否相等,相當(dāng)于 string == string2 string.equalsIgnoreCase(string2); //忽略字符大小寫的比較,返回一個(gè)布爾值 string3 = string.concat(string, string2); //string3 = string + string2; string.concat(string2); //string += string2; /*string類型還可以加上字符(常、變)、整數(shù)(常、變)、字符串(常),但要注意不能混用: stringThree = stringOne + 123456789; stringThree = stringOne + 'A'; stringThree = stringOne + "abc"; */ string.c_str();//將string轉(zhuǎn)換成C風(fēng)格的無終止符的字符串,返回的是字符串首地址,一個(gè)指針。 string.endsWith(string2);//判斷string是否以string2中的字符結(jié)尾,返回一個(gè)布爾值 string.startsWith(string2, n);//判斷從第n+1個(gè)字符開始,string是不是以string2開頭,n默認(rèn)為0,返回一個(gè)布爾值 string.getBytes(buf, len);//將string存入len長度的緩存區(qū)buf中。string.indexOf(val); //在string中搜索字符或字符串val,默認(rèn)從頭開始搜索 string.indexOf(val, from);//如果加上了from,則從from處開始檢索,返回val所在的位置,如果沒找到,返回-1 string.lastIndexOf(val);//和上面一樣,只是從后開始檢索 string.lastIndexOf(val, from);string.length();//求字符串的長度 string.remove(index); //移除從index開始后的count個(gè)數(shù)的字符,若沒有count,則默認(rèn)到末尾 string.remove(index, count); //就地轉(zhuǎn)換,無返回值 string.replace(substring1, substring2);//將string中的子字符串substring1替換為substring2,返回新的字符串 string.reserve(size);//給string申請(qǐng)size大小的存儲(chǔ)空間 string.substring(from); //截取string的子字符串,從from(包含)到to(不包含), string.substring(from, to); //如果沒有to,則默認(rèn)到末尾,返回子字符串 string.toCharArray(buf, len); //將字符串由String類型轉(zhuǎn)換成char[]類型,其中buf為轉(zhuǎn)換后的字符數(shù)組,len為buf的長度 string.toInt(); //將字符串轉(zhuǎn)換為整型,要求string第一個(gè)字符必須為數(shù)字,如果遇到非數(shù)字字符,轉(zhuǎn)換將停止,函數(shù)返回一個(gè)long類型,如果字符串開頭不是數(shù)字,則返回0 string.toFloat(); //將字符串轉(zhuǎn)換為浮點(diǎn)型,和上面一樣,要求字符串第一個(gè)字符為數(shù)字,如果遇到非字符數(shù)字或小數(shù)點(diǎn),轉(zhuǎn)換將停止,如果只有整數(shù),后面默認(rèn)加上“.00”,返回一個(gè)浮點(diǎn)數(shù),注意數(shù)字有效數(shù)字為6-7位 string.toLowerCase(); //將字符串轉(zhuǎn)換為小寫字母,就地轉(zhuǎn)換,無返回值 string.toUpperCase(); //將字符串轉(zhuǎn)換為大寫字母,就地轉(zhuǎn)換,無返回值 string.trim(); //獲取刪除開頭和結(jié)尾whitespace的字符串版本,就地轉(zhuǎn)換,無返回值 char thisChar = string1[n]; //用[]訪問特定位置的元素

    3. 程序結(jié)構(gòu)

    ??每次新建一個(gè)uno程序時(shí),都可以看到如下這個(gè)界面,

    ??由此可知,程序預(yù)置了兩個(gè)函數(shù),分別是setup()和loop()。

    • setup() :每次Arduino上電或按下reset按鈕時(shí),程序會(huì) 執(zhí)行一遍 setup中的內(nèi)容,因此一般用來初始化變量(不能聲明變量!),設(shè)置引腳模式,開始使用庫等操作。
    • loop() :運(yùn)行完setup函數(shù)后,程序會(huì) 反復(fù)執(zhí)行 loop中的內(nèi)容,所以如果在loop程序中放置死循環(huán)(比如while(1)),那么死循環(huán)前的程序只會(huì)執(zhí)行一次。

    ??注意:uno程序中沒有main函數(shù)

    4. 函數(shù)總結(jié)

    (1)數(shù)字 I/O(GPIO)

    pinMode()

    a. 功能
    設(shè)置 數(shù)字引腳(GPIO) 的輸入輸出模式
    b. 語法

    pinMode(pin, mode);

    c. 參數(shù)解釋
    pin:GPIO引腳號(hào)(參考上文中的引腳圖 D開頭的引腳)
    mode:輸入輸出模式,有以下選項(xiàng):

    • INPUT:輸入模式,禁用上拉電阻
    • INPUT_PULLUP:輸入模式,使能上拉電阻
    • OUTPUT:輸出模式

    d. 返回值

    e. 說明

  • 雖然這個(gè)函數(shù)的針對(duì)對(duì)象是數(shù)字引腳,但其實(shí)模擬引腳也可以使用,觀察引腳圖即可知,模擬引腳A0 ~ A5分別對(duì)應(yīng)D14 ~ D19(也可以直接寫“A0”)
  • 數(shù)字引腳13(D13) 因?yàn)樵诎遄由线B接了一個(gè)電阻和LED,因此如果要設(shè)置為輸入引腳,上拉電阻需要另外接入,不能用內(nèi)部上拉電阻(否則5V會(huì)變成1.7V左右—二極管的電壓鉗位作用)
  • 如果GPIO設(shè)置為輸出模式,其輸出電流最大為 ±40 mA(拉電流或灌電流負(fù)載) 可以直接連接LED(要串聯(lián)電阻)或連接傳感器,但不足以驅(qū)動(dòng)繼電器,螺線管線圈,電機(jī)等。
  • 以上參考鏈接:Digital Pins

  • digitalWrite()

    a. 功能
    設(shè)置GPIO引腳的輸出電平(高低)
    b. 語法

    digitalWrite(pin, value);

    c. 參數(shù)解釋
    pin:GPIO引腳號(hào)(參考上文中的引腳圖 D開頭的引腳)
    value:電平值,有以下選項(xiàng):

    • HIGH:輸出高電平,5V(如果是3.3V的板子則是3.3V)
    • LOW:輸出低電平(0V,ground)

    d. 返回值

    e. 說明

  • 調(diào)用該函數(shù)前一定要調(diào)用pinMode函數(shù),即必須確定輸入輸出模式,否則可能會(huì)得到錯(cuò)誤電平
  • 如果設(shè)置為輸入模式,則調(diào)用該函數(shù)可以使能上拉電阻——HIGH為enable,LOW為disable,不過不推薦這樣寫,建議調(diào)用pinMode函數(shù)時(shí)使用INPUTINPUT_PULLUP

  • digitalRead()

    a. 功能
    讀取GPIO引腳電平
    b. 語法

    digitalRead(pin);

    c. 參數(shù)解釋
    pin:GPIO引腳號(hào)(參考上文中的引腳圖 D開頭的引腳)
    d. 返回值
    引腳電平值,為HIGH(對(duì)應(yīng)高電平)或LOW(對(duì)應(yīng)低電平)
    e. 說明
    如果該引腳為空,則返回值是隨機(jī)的,HIGH或LOW。


    (2)模擬 I/O(ADC & Timer)

    analogRead()

    a. 功能
    讀取引腳模擬值
    b. 語法

    analogRead(pin);

    c. 參數(shù)解釋
    pin:模擬引腳號(hào)(0 ~ 5或A0 ~ A5
    d. 返回值
    一個(gè)整型數(shù),0 ~ 1023,對(duì)應(yīng)電壓值為0 ~ 5V,每增加4.88mV,返回值增加1。
    e. 說明

  • Arduino上帶有6通道10位ADC(有些板子通道數(shù)更多),每次DA轉(zhuǎn)換耗時(shí)約0.1ms,即ADC頻率最高為10,000HZ
  • 若引腳為空,返回值為0 ~ 1023中的隨機(jī)值(用法見后面)
  • 返回值計(jì)算公式
    NADC=1023?VinVrefN_{ADC}=1023\cdot \frac{V_{in}}{V_{ref}} NADC?=1023?Vref?Vin??
    其中參考電壓Vref默認(rèn)值為5V,如果需要設(shè)置其他的參考電壓,可以使用 analogReference(type) 函數(shù),其參數(shù)type如下所示
      • DEFAULT:默認(rèn)參考電壓值
      • INTERNAL:一個(gè)內(nèi)置的參考電壓,ATmega168和ATmega328為1.1V;ATmega8為2.56V(Mega不適用)
      • INTERNAL1V1:內(nèi)置的1.1V參考電壓(只有Mega適用)
      • INTERNAL2V56:內(nèi)置的2.56V參考電壓(只有Mega適用)
      • EXTERNAL:外接參考電壓(AREF引腳),但電壓范圍必須在 0 ~ 5V之間!

    analogWrite()

    a. 功能
    特定的數(shù)字引腳輸出PWM波
    b. 語法

    analogWrite(pin, value);

    c. 參數(shù)解釋
    pin:特定的數(shù)字引腳,在Arduino UNO中只有引腳3、5、6、9、10、11支持PWM輸出(即引腳數(shù)字前有波浪線的引腳)。
    value:PWM占空比(the duty cycle),一個(gè)整型數(shù),范圍在0 ~ 255之間。
    d. 返回值

    e. 說明

    • PWM輸出其本質(zhì)是調(diào)用定時(shí)器的比較模塊,而Arduino UNO中內(nèi)置了三個(gè)定時(shí)器,分別是Timer0,Timer1、Timer2。
      • Timer08位定時(shí)器,對(duì)應(yīng)引腳5和6,其產(chǎn)生的PWM頻率為490HZ
      • Timer116位定時(shí)器,對(duì)應(yīng)引腳9和10,其產(chǎn)生的PWM的頻率為980HZ
      • Timer28位定時(shí)器,對(duì)應(yīng)引腳3和11,其產(chǎn)生的PWM頻率為490HZ
    • 此外,由于delay()、millis()、delayMicroseconds() 等函數(shù)依賴于定時(shí)器Timer0,因此5、6引腳輸出的PWM波的占空比可能會(huì)高于預(yù)期值(higher-than-expected)
    • 調(diào)用analogWrite()函數(shù)前可以不調(diào)用pinMode()函數(shù)。
    • analogWrite()函數(shù)雖然和analogRead()函數(shù)很相近,但二者沒有任何關(guān)系,一個(gè)是定時(shí)器的比較模塊,一個(gè)是ADC模塊。

    (3)高級(jí) I/O(Soft USART)

    shiftOut()

    a. 功能
    串行輸出數(shù)據(jù),一次一位(one bit a time)
    b. 語法

    shiftOut(dataPin, clockPin, bitOrder, value);

    c. 參數(shù)解釋
    dataPin: 串行輸出數(shù)據(jù)的引腳號(hào)(int)
    clockPin: 時(shí)鐘引腳號(hào)(int)
    bitOrder: 串行傳輸數(shù)據(jù)的順序,有以下選項(xiàng):

    • MSBFIRST(Most Significant Bit First):從左往右傳輸,大數(shù)優(yōu)先
    • LSBFIRST(Least Significant Bit First):從右往左傳輸,小數(shù)優(yōu)先

    value: 需要傳輸?shù)臄?shù)據(jù)(byte)
    d. 返回值

    e. 說明

  • dataPin和clockPin必須用pinMode函數(shù)設(shè)置為輸出模式。
  • value值只能是一個(gè)字節(jié),如果需要傳輸多字節(jié)數(shù)據(jù),需要考慮分字節(jié)傳輸。
  • 傳輸數(shù)據(jù)的步驟:clockPin來一個(gè)脈沖(低-高-低),傳輸一位數(shù)據(jù)。因此如果連接的外設(shè)是上升沿觸發(fā),則在調(diào)用該函數(shù)前最好手動(dòng)將clockPin置低。

  • shiftIn()

    a. 功能
    串行讀取數(shù)據(jù),一次一位(one bit a time)
    b. 語法

    byte_incoming = shiftIn(dataPin, clockPin, bitOrder);

    c. 參數(shù)解釋
    dataPin: 串行輸出數(shù)據(jù)的引腳號(hào)(int)
    clockPin: 時(shí)鐘引腳號(hào)(int)
    bitOrder: 串行傳輸數(shù)據(jù)的順序,有以下選項(xiàng):

    • MSBFIRST(Most Significant Bit First):從左往右傳輸,最高位優(yōu)先
    • LSBFIRST(Least Significant Bit First):從右往左傳輸,最低位優(yōu)先

    d. 返回值
    讀取的數(shù)據(jù)(byte)
    e. 說明
    參考shiftOut


    pulseIn()

    a. 功能
    讀取脈沖(高脈沖或低脈沖)的時(shí)間寬度
    b. 語法

    pulseIn(pin, value); pulseIn(pin, value, timeout);

    c. 參數(shù)解釋
    pin:脈沖讀取引腳;
    value:讀取脈沖的形式(高脈沖、低脈沖):

    • HIGH:讀取高脈沖(高電平持續(xù)時(shí)間)
    • LOW:讀取低脈沖(低電平持續(xù)時(shí)間)

    timeout(optional):等待時(shí)間(unsigned long,單位:μs)
    d. 返回值
    脈沖的時(shí)間寬度(單位:μs),如果在timeout時(shí)間內(nèi)沒有讀取到脈沖則返回0.
    e. 說明
    脈沖長度讀取范圍為 10μs~3min,超過這個(gè)范圍讀取值會(huì)發(fā)生錯(cuò)誤

    tone()

    a. 功能
    產(chǎn)生特定頻率的方波(即音調(diào))
    b. 語法

    tone(pin, frequency); tone(pin, frequency, duration);

    c. 參數(shù)解釋
    pin:產(chǎn)生音調(diào)的引腳
    frequency:音調(diào)的頻率(單位:Hz)
    duration(optional):持續(xù)時(shí)間(單位:μs),如果沒有則音調(diào)直到調(diào)用noTone函數(shù)時(shí)停止。
    d. 返回值

    e. 說明

  • 該函數(shù)是調(diào)用定時(shí)器Timer2,因此使用該函數(shù)會(huì)影響引腳3和11的PWM輸出
  • 頻率不能低于31HZ
  • 該函數(shù)用法:連接無源蜂鳴器時(shí)輸出音頻。
  • 若該引腳已經(jīng)在輸出音頻,那么調(diào)用該函數(shù)只能改變音調(diào)的頻率,如果其他引腳正在輸出音頻,調(diào)用該函數(shù)無效,只能先調(diào)用noTone函數(shù)停止其他引腳的音頻,再調(diào)用該引腳上的tone函數(shù)。

  • noTone()

    a. 功能
    停止引腳上的音頻輸出
    b. 語法

    noTone(pin);

    c. 參數(shù)解釋
    pin:需要停止輸出音頻的引腳。
    d. 返回值


    (4)時(shí)間函數(shù)(Timer)

    millis()

    a. 功能
    返回定時(shí)器的計(jì)數(shù)值(單位:ms)——自程序運(yùn)行開始計(jì)時(shí),大約50天溢出 (根據(jù)unsigned long數(shù)據(jù)大小算出來的,因此返回值必須用unsigned long類型接收
    b. 語法

    nowTime_ms = millis();

    c. 參數(shù)解釋

    d. 返回值
    定時(shí)器的計(jì)數(shù)值(單位:ms,unsigned long)


    micros()

    a. 功能
    返回定時(shí)器的計(jì)數(shù)值(單位:μs)——自程序運(yùn)行開始計(jì)時(shí),大約70min溢出 (根據(jù)unsigned long數(shù)據(jù)大小算出來的,因此返回值必須用unsigned long類型接收
    b. 語法

    nowTime_us = micros();

    c. 參數(shù)解釋

    d. 返回值
    定時(shí)器的計(jì)數(shù)值(單位:μs,unsigned long)


    delay()

    a. 功能
    延時(shí)(ms級(jí))
    b. 語法

    delay(ms);

    c. 參數(shù)解釋
    ms:延時(shí)時(shí)間,單位為ms(unsigned long)
    d. 返回值


    delayMicroseconds()

    a. 功能
    延時(shí)(μs級(jí))
    b. 語法

    delayMicroseconds(us);

    c. 參數(shù)解釋
    us:延時(shí)的微秒數(shù)(unsigned long)
    d. 返回值

    e. 說明

  • 目前的Arduino版本只支持 <16383的微秒延時(shí),如果需要更長的延時(shí)時(shí)間,需要調(diào)用delay函數(shù);而且延時(shí)時(shí)間最好大于3μs,這樣的延時(shí)更加精確。
  • 新版本(0018)的Arduino中,調(diào)用該函數(shù)不會(huì)禁用中斷(表明這個(gè)函數(shù)不是用定時(shí)器中斷寫的)

  • (5)數(shù)學(xué)函數(shù)

    min()

    a. 功能
    取兩個(gè)數(shù)中的較小值
    b. 語法

    z = min(x, y);

    c. 參數(shù)解釋
    x,y:需要比較的數(shù),數(shù)據(jù)類型任意
    d. 返回值
    兩個(gè)數(shù)中的較小值。


    max()

    a. 功能
    取兩個(gè)數(shù)中的較大值
    b. 語法

    z = max(x, y)

    c. 參數(shù)解釋
    x,y:需要比較的數(shù),數(shù)據(jù)類型任意
    d. 返回值
    兩個(gè)數(shù)中的較大值。
    e. 說明

  • 也許與直覺相反,max() 通常用于限制變量范圍的下限,而 min() 用于限制范圍的上限。
  • 參數(shù)x,y不能用表達(dá)式代替,比如 x++y- - 等。

  • constrain()

    a. 功能
    限制數(shù)據(jù)的范圍。
    b. 語法

    constrain(x, a, b);

    c. 參數(shù)解釋
    x:需要限制的范圍,任意數(shù)據(jù)類型;
    a:限制下限,任意數(shù)據(jù)類型;
    b:限制上限,任意數(shù)據(jù)類型。
    d. 返回值

    • 如果a<=x<=b,返回x
    • 如果x>b,返回b
    • 如果x<a,返回a

    map()

    a. 功能
    將一個(gè)整數(shù)從一個(gè)范圍映射到另一個(gè)范圍。
    b. 語法

    map(value, fromLow, fromHigh, toLow, toHigh);

    c. 參數(shù)解釋
    value:需要映射的值,long類型
    fromLow:原范圍下限,long類型
    fromHigh:原范圍上限,long類型
    toLow:映射的范圍下限,long類型
    toHigh:映射范圍上限,long類型
    d. 返回值
    映射后的值(long)
    e. 說明

  • 鑒于這個(gè)函數(shù)表述不夠明白,這里給出定義,非常簡單:
  • long map(long x, long in_min, long in_max, long out_min, long out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
  • 根據(jù)定義可知,上下限可以顛倒;可以是負(fù)數(shù);如果出現(xiàn)分?jǐn)?shù)會(huì)自動(dòng)取整(不會(huì)四舍五入)

  • pow()

    a. 功能
    指數(shù)運(yùn)算函數(shù)
    b. 語法

    pow(base, exponent);

    c. 參數(shù)解釋
    base:底數(shù)(float)
    exponent:指數(shù)(float)
    d. 返回值
    運(yùn)算結(jié)果(double)


    sqrt()

    a. 功能
    求平方根
    b. 語法

    sqrt(x);

    c. 參數(shù)解釋
    x:需要求平方根的數(shù),任意數(shù)據(jù)類型
    d. 返回值
    運(yùn)算結(jié)果(double)
    e. 說明
    注意與 sq(x) 函數(shù)進(jìn)行區(qū)分,sq(x) 是求x的平方,x為任意數(shù)據(jù)類型。


    三角函數(shù)

    sin(rad); //rad為弧度,float類型,計(jì)算結(jié)果為double類型 cos(rad); //rad為弧度,float類型,計(jì)算結(jié)果為double類型 tan(rad); //rad為弧度,float類型,計(jì)算結(jié)果為double類型

    (6)字符判斷函數(shù)

    ??字符判斷函數(shù)取自C語言的庫<ctype.h>,函數(shù)格式相同:

    bool fun_name(char c)

    即參數(shù)都是char類型,返回值均為布爾型,注意:Arduino中的char類型默認(rèn)是unsigned char!,參考鏈接

    isAlphaNumeric(thisChar); //判斷字符是否為數(shù)字或字母('0'~'9','A'~'Z','a'~'z') isAlpha(thisChar); //判斷字符是否為字母Alphabetical('A'~'Z','a'~'z') isLowerCase(thisChar); //判斷字符是否為小寫字母 isUpperCase(thisChar); //判斷字符是否為大寫字母 isSpace(thisChar); //判斷字符是否為空格 isAscii(thisChar); //判斷字符是否為ASCII字符(0~127) isWhitespace(thisChar); //判斷字符是否為whitespace isControl(thisChar); //判斷字符是否為控制字符 isDigit(thisChar); //判斷字符是否為數(shù)字 isGraph(thisChar); //判斷字符是否為可打印字符 isPrintable(thisChar); //判斷字符是否為可打印字符 isPunct(thisChar); //判斷字符是否為標(biāo)點(diǎn)符號(hào) isHexadecimalDigit(thisChar); //判斷字符是否為有效的十六進(jìn)制數(shù)字

    (7)隨機(jī)函數(shù)

    random()

    a. 功能
    生成一定范圍內(nèi)的隨機(jī)數(shù)(整數(shù)
    b. 語法

    random(max); random(min, max);

    c. 參數(shù)解釋
    max:隨機(jī)數(shù)的上限,不包含(long)
    min(optional):隨機(jī)數(shù)的下限,包含在內(nèi),沒有默認(rèn)為0
    d. 返回值
    一個(gè)隨機(jī)數(shù)(long),范圍 [min, max-1]
    e. 說明
    這個(gè)函數(shù)產(chǎn)生的隨機(jī)數(shù)確實(shí)是符合隨機(jī)分布,但每次產(chǎn)生的隨機(jī)數(shù)的序列都是一樣的,所以本質(zhì)上是一個(gè)偽隨機(jī)函數(shù),如果需要產(chǎn)生真隨機(jī)函數(shù),就需要改變隨機(jī)數(shù)的序列,方法就是利用 randomSeed() 生成一個(gè)隨機(jī)“種子”,或者叫隨機(jī)源,詳情見后面。


    randomSeed()

    a. 功能
    初始化隨機(jī)數(shù)源
    b. 語法

    randomSeed(seed);

    c. 參數(shù)解釋
    seed:為一個(gè)整形數(shù)(long or int),但為了保持隨機(jī)性,一般設(shè)置為空引腳的analogRead值,比如analogRead(A0)
    d. 返回值


    (8)字節(jié)函數(shù)

    ??在單片機(jī)中傳輸數(shù)據(jù)時(shí),往往最關(guān)心的就是數(shù)據(jù)的字節(jié)數(shù),因此掌握字節(jié)操作函數(shù)對(duì)傳輸數(shù)據(jù)處理有很大幫助。

    lowByte(x); //獲取x的最低字節(jié),x為任意數(shù)據(jù)類型,返回一個(gè)字節(jié) highByte(x); //獲取x的最低字節(jié),x為任意數(shù)據(jù)類型,返回一個(gè)字節(jié) bitRead(x, n); //讀取x的第n-1位,最低位為0,從右至左依次增加。返回1或0 bitWrite(x, n, b); //將x的第n-1位寫為b,b為0或1,無返回值 bitSet(x, n); //將x的第n-1位置1 bitClear(x, n); //將x的第n-1位清0

    (9)外部中斷函數(shù)(GPIO Interrupt)

    interrupts()

    a. 功能
    打開總中斷
    b. 語法

    interrupts();

    c. 參數(shù)解釋

    d. 返回值

    e. 說明
    Arduino的中斷默認(rèn)是打開的,只有當(dāng)中斷被關(guān)閉時(shí)才會(huì)使用該函數(shù)重新打開。


    noInterrupts()

    a. 功能
    關(guān)閉總中斷
    b. 語法

    noInterrupts();

    c. 參數(shù)解釋

    d. 返回值


    attachInterrupt()

    a. 功能
    設(shè)置中斷服務(wù)程序(Interrupt Service Routine,簡稱ISR)
    b. 語法

    attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); (recommended) /*digitalPinToInterrupt(pin)是將實(shí)際的引腳號(hào)轉(zhuǎn)換為中斷對(duì)應(yīng)的引腳號(hào)*/ attachInterrupt(interrupt, ISR, mode); (not recommended) attachInterrupt(pin, ISR, mode) ; (not recommended Arduino Due, Zero only)

    c. 參數(shù)解釋
    pin:中斷引腳,在UNO型號(hào)中,只支持2、3引腳
    ISR:中斷服務(wù)程序(一個(gè)無參數(shù)無返回值的函數(shù))
    mode:中斷模式,有以下選項(xiàng):

    • LOW:在引腳為低電平時(shí),產(chǎn)生中斷
    • CHANGE:引腳電平改變時(shí)(上升沿或下降沿),產(chǎn)生中斷
    • RISING:上升沿中斷
    • FALLING:下降沿中斷
    • HIGH:引腳為高電平時(shí),發(fā)生中斷 (只支持Due,Zero)

    interrupt:或者叫interrupt number,與引腳號(hào)一一對(duì)應(yīng)但不相同,如下圖所示:

    d. 返回值

    e. 說明
    ??中斷服務(wù)程序(ISR)是一種特殊的函數(shù)沒有參數(shù),沒有返回值,當(dāng)程序進(jìn)入中斷服務(wù)程序時(shí),總中斷會(huì)關(guān)閉,只有在執(zhí)行完畢當(dāng)前的ISR才能去執(zhí)行下一個(gè)ISR,因此一次只能執(zhí)行一個(gè)ISR,且ISR內(nèi)不能再嵌套ISR。因此,需要依賴中斷的函數(shù)在ISR內(nèi)將失效,比如delay(), millis(), micros() ,而函數(shù)delayMicroseconds() 仍然有效。
    ??當(dāng)程序有多個(gè)中斷時(shí),且執(zhí)行頻率較高的話,就需要將ISR寫得盡可能簡潔。由于ISR沒有參數(shù),如果需要傳遞變量,需要將變量定義為全局變量,且要加上volatile 關(guān)鍵字,表明在ISR中可以進(jìn)行修改。


    detachInterrupt()

    a. 功能
    關(guān)閉特定的中斷
    b. 語法

    detachInterrupt(interrupt); detachInterrupt(digitalPinToInterrupt(pin)); detachInterrupt(pin); (Arduino Due, Zero only)

    c. 參數(shù)解釋
    pin:中斷引腳
    interrupt:中斷數(shù)字,參見上面的解釋
    d. 返回值

    e. 說明
    注意和noInterrupt() 函數(shù)區(qū)分,后者是關(guān)閉總中斷,而該函數(shù)是關(guān)閉某個(gè)外部中斷。


    串行通訊(Hardware)

    UART

    ??在Arduino UNO中,只有一個(gè)UART模塊,對(duì)應(yīng)數(shù)字引腳0和1,程序中,用Serial這個(gè)類表示串口,其內(nèi)部預(yù)置了很多函數(shù),用來實(shí)現(xiàn)串口通訊的各種功能。以下將一一介紹

    if (Serial)

    a. 功能
    指示某個(gè)串口是否連接(比如打開電腦上的串口)(但只適用于Leonardo, Yun中連接USB的端口)
    b. 語法

    if (Serial){}

    c. 參數(shù)解釋

    d. 返回值
    一個(gè)布爾值,連接為true,未連接為false。


    available()

    a. 功能
    返回到達(dá) 串行緩存區(qū)(64 byte) 中但未被讀取的字節(jié)的個(gè)數(shù)
    b. 語法

    Serial.available()Serial1.available() // Arduino Mega only Serial2.available() Serial3.available()

    c. 參數(shù)解釋

    d. 返回值
    未被讀取的字節(jié)數(shù)


    availableForWrite()

    a. 功能
    在不阻塞寫操作的情況下獲取可用于寫入串行緩沖區(qū)的字節(jié)數(shù)。
    b. 語法

    Serial.availableForWrite();

    c. 參數(shù)解釋

    d. 返回值
    待寫字節(jié)數(shù)。


    begin()

    a. 功能
    串口初始化設(shè)置(波特率,數(shù)據(jù)傳輸格式)
    b. 語法

    Serial.begin(speed) Serial.begin(speed, config)

    c. 參數(shù)解釋
    speed:波特率(1s傳輸多少位)與電腦的連接一般是300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, or 115200中的一種,在引腳0和1連接時(shí)可以根據(jù)外設(shè)任意設(shè)置。
    config:數(shù)據(jù)傳輸格式:數(shù)據(jù)位(7位,8位或其他),校驗(yàn)位(奇校驗(yàn)Odd,偶校驗(yàn)Even,無校驗(yàn)None),停止位(1位或2位),一般有如下選項(xiàng):

    • SERIAL_5N1
    • SERIAL_6N1
    • SERIAL_7N1
    • SERIAL_8N1 (the default)
    • SERIAL_5N2
    • SERIAL_6N2
    • SERIAL_7N2
    • SERIAL_8N2
    • SERIAL_5E1
    • SERIAL_6E1
    • SERIAL_7E1
    • SERIAL_8E1
    • SERIAL_5E2
    • SERIAL_6E2
    • SERIAL_7E2
    • SERIAL_8E2
    • SERIAL_5O1
    • SERIAL_6O1
    • SERIAL_7O1
    • SERIAL_8O1
    • SERIAL_5O2
    • SERIAL_6O2
    • SERIAL_7O2
    • SERIAL_8O2

    d. 返回值


    end()

    a. 功能
    禁用串口
    b. 語法

    Serial.end();

    c. 參數(shù)解釋

    d. 返回值


    write()

    a. 功能
    將二進(jìn)制數(shù)據(jù)寫入串口。
    b. 語法

    Serial.write(val); Serial.write(str); Serial.write(buf, len);

    c. 參數(shù)解釋
    val:單字節(jié)數(shù)據(jù)(char, byte)
    str:字符數(shù)組, 字符串(char[], byte[] )
    buf:字符數(shù)組
    len:buf的長度
    d. 返回值
    被寫入的字節(jié)數(shù)(char)


    read()

    a. 功能
    讀取緩存區(qū)中第一個(gè)字節(jié),并在緩存區(qū)中刪除
    b. 語法

    Serial.read();

    c. 參數(shù)解釋

    d. 返回值
    第一個(gè)字節(jié)或-1(未讀到數(shù)據(jù))


    peek()

    a. 功能
    讀取緩存區(qū)中第一個(gè)字節(jié),但不在緩存區(qū)中刪除
    b. 語法

    Serial.peek();

    c. 參數(shù)解釋

    d. 返回值
    第一個(gè)字節(jié)或-1(未讀到數(shù)據(jù))如果反復(fù)調(diào)用該函數(shù),讀取到的數(shù)據(jù)是一樣的


    print()

    a. 功能
    按格式輸出各種類型的數(shù)據(jù),將各種數(shù)據(jù)輸出為可見的ASCII碼格式
    b. 語法

    Serial.print(val); Serial.print(val, format);

    c. 參數(shù)解釋
    val:需要輸出的數(shù)據(jù)(多種格式)
    format(optional):數(shù)據(jù)輸出格式(或小數(shù)點(diǎn)位數(shù))詳情參照以下實(shí)例:

    Serial.print(78); // "78" Serial.print(1.23456); // "1.23" Serial.print('N'); // "N" Serial.print("Hello world."); // "Hello world."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"Serial.print(F(“Hello World”)); //利用F()將基于flash的字符串輸出

    d. 返回值
    返回輸出字節(jié)的個(gè)數(shù)(可以不讀取)


    println()(ln為"line"的縮寫)

    a. 功能
    和print函數(shù)一樣,但輸出的內(nèi)容自帶換行符( ‘\r’ 和 ‘\n’ )
    b. 語法

    Serial.println(val); Serial.println(val, format);

    c. 參數(shù)解釋
    參考print函數(shù)
    d. 返回值
    返回輸出字節(jié)的個(gè)數(shù)(可以不讀取)


    readBytes()

    a. 功能
    讀取緩存區(qū)中的字符并放在設(shè)定長度的緩存區(qū)中,當(dāng)buffer裝滿或超時(shí),則函數(shù)終止。
    b. 語法

    Serial.readBytes(buffer, length);

    c. 參數(shù)解釋
    buffer:用來儲(chǔ)存字符的緩存區(qū)(char[],or byte[])
    length:buffer的長度(int)
    d. 返回值
    放入buffer的字節(jié)數(shù)(char),如果沒有合法字符,返回 A0


    readBytesUntil()

    a. 功能
    和readBytes函數(shù)一樣,讀取緩存區(qū)中的字符并放在設(shè)定長度的緩存區(qū)中,但終止條件多了一個(gè)——檢測(cè)到終止字符character。
    b. 語法

    Serial.readBytesUntil(character, buffer, length);

    c. 參數(shù)解釋
    character:終止字符(char)
    buffer:緩存區(qū)(char[] or byte[] )
    length:buffer的長度
    d. 返回值
    放入buffer的字節(jié)數(shù),如果沒有合法字符,返回 A0


    readString()

    a. 功能
    讀取緩存區(qū)中的字符串,直到時(shí)間times out才停止
    b. 語法

    Serial.readString();

    c. 參數(shù)解釋

    d. 返回值
    讀取到的字符串(char[] )


    readStringUntil()

    a. 功能
    讀取緩存區(qū)的字符串,直到終止符出現(xiàn)或時(shí)間到才停止
    b. 語法

    Serial.readStringUntil(terminator);

    c. 參數(shù)解釋
    terminator:終止字符
    d. 返回值
    整個(gè)字符串(char[] )


    find()

    a. 功能
    在串行緩存區(qū)中查找對(duì)應(yīng)的字符
    b. 語法

    Serial.find(target);

    c. 參數(shù)解釋
    target:需要查找的字符(char)
    d. 返回值
    布爾值,找到為true,未找到為false。


    findUntil()

    a. 功能
    在串行緩存區(qū)中查找字符直到設(shè)定的終止字符被找到
    b. 語法

    Serial.findUntil(target, terminal);

    c. 參數(shù)解釋
    target:目標(biāo)字符
    terminal:終止字符
    d. 返回值
    布爾值,找到為true,沒找到或超時(shí)為false。


    flush()

    a. 功能
    等待串口傳輸完成
    b. 語法

    Serial.flush();

    c. 參數(shù)解釋

    d. 返回值


    setTimeout()

    a. 功能
    設(shè)置超時(shí)時(shí)間(單位為ms),默認(rèn)為1000ms
    b. 語法

    Serial.setTimeout(time);

    c. 參數(shù)解釋
    time:時(shí)間值,單位為ms。
    d. 返回值


    parseFloat()

    a. 功能
    讀取緩存區(qū)中第一個(gè)浮點(diǎn)數(shù)(終止于第一個(gè)非浮點(diǎn)數(shù))
    b. 語法

    Serial.parseFloat();

    c. 參數(shù)解釋

    d. 返回值
    讀取到的浮點(diǎn)數(shù)(float)


    parseInt()

    a. 功能
    在緩存區(qū)中查找下一個(gè)有效整數(shù)。
    b. 語法

    Serial.parseInt(); Serial.parseInt(char skipChar);

    c. 參數(shù)解釋
    skipChar:用于跳過搜索中指定的字符。 例如用于跳過千位分隔符。
    d. 返回值
    下一個(gè)有效整數(shù)(long類型)


    SPI

    (有緣再寫)

    I2C

    (有緣再寫)


    注:以上內(nèi)容主要參考自官方的手冊(cè),介紹兩種方法尋找該文件:

    • 方法一:到IDE安裝根目錄下找。參考:C:/Program Files (x86)/Arduino/reference/www.arduino.cc/en/Reference/PulseIn.html
    • 方法二:打開IDE寫一個(gè)常用的函數(shù),然后右鍵,選擇在參考文件中查找

    高級(jí)應(yīng)用:用AVR開發(fā)Arduino

    ??我們都知道,單片機(jī)的程序,本質(zhì)上就是對(duì)內(nèi)置的寄存器的讀和寫,雖然Arduino的集成度很高,但是仍然可以用寄存器的方法來開發(fā),但程序的麻煩程度將陡增。
    ??很多人一想到用寄存器開發(fā),第一反應(yīng)就是:太麻煩。確實(shí),用寄存器開發(fā)在初始階段確實(shí)很麻煩,需要去了解某個(gè)模塊是由哪些寄存器控制的,這是一個(gè)需要花費(fèi)較多時(shí)間精力去熟悉的過程,但是如果熟悉了寄存器,也積累了一些自己寫的庫之后,其實(shí)和用庫函數(shù)開發(fā)是差不多的。但是用寄存器寫,可以讓你最大程度了解該單片機(jī)的各種模塊。
    ??對(duì)于Arduino來說,一般的開發(fā)確實(shí)沒有必要,只要大致理解函數(shù)用的是哪些模塊即可,但是如果想要編寫自己的庫(比如Timer庫)或者查看函數(shù)源碼,就必須要懂寄存器語言了。


    附:

    • AVR開發(fā) Arduino方法(一) 端口子系統(tǒng)
    • AVR開發(fā) Arduino方法(二) 中斷子系統(tǒng)
    • AVR開發(fā) Arduino方法(三) 定時(shí)/計(jì)數(shù)器子系統(tǒng)
    • AVR開發(fā) Arduino方法(四) 串行通信子系統(tǒng)
    • AVR開發(fā) Arduino方法(五) 模數(shù)轉(zhuǎn)換子系統(tǒng)
    • AVR開發(fā) Arduino方法(六) 內(nèi)存子系統(tǒng)
    • AVR開發(fā) Arduino方法(七) 嵌入式操作系統(tǒng)FreeRTOS
    • AVR開發(fā) Arduino方法(附一) 工具鏈與調(diào)試技術(shù)
    • AVR開發(fā) Arduino方法(附二) 故障排除:燒錄引導(dǎo)程序
    • AVR開發(fā) Arduino方法(附三) 附件列表
    • AVR開發(fā) Arduino方法(附四) 參考文獻(xiàn)與網(wǎng)址

    • arduino 定時(shí)器、定時(shí)中斷與PWM使用以及注意事項(xiàng)

    其他操作

    1. Arduino IDE的“高級(jí)用法”——串口繪圖器

    ??談到Arduino的串口,我們第一時(shí)間想到的就是IDE右上角的那個(gè)串口圖標(biāo),但其實(shí)Arduino還有一個(gè)串口繪圖器的功能,也在工具菜單欄里面。

    ??使用的方法也很簡單,和串口輸出一樣,使用Serial.println() 函數(shù)即可。有其他繪圖需求的可以參考這篇文章。

    2. Arduino IDE的替代編輯器——Visual Studio Code

    ??Arduino IDE缺少一個(gè)很重要的功能,那就是代碼補(bǔ)全的功能,這嚴(yán)重降低了寫代碼的效率,而且Arduino IDE的UI也差強(qiáng)人意,因此很多人都不用Arduino IDE編程,轉(zhuǎn)而尋找替代品,而用得最多的,就是VS Code 。這個(gè)網(wǎng)上有很多配置方法,也比較簡單,可以參考這個(gè)鏈接,如果遇到什么問題,可以在瀏覽器點(diǎn)對(duì)點(diǎn)搜索,不再贅述。

    ??其他教程:

    • VScode配置Arduino開發(fā)環(huán)境 保姆級(jí)教程 - CSDN
    • Arduino頭文件在VS code中提示錯(cuò)誤紅色波浪線的解決辦法 - CSDN

    3. Arduino IDE v2.0 Beta版本

    ??最近才知道Arduino IDE出2.0版本了,據(jù)說增加了代碼補(bǔ)全和代碼高亮 的功能。附: 下載鏈接

    4. 記錄兩個(gè)寫得非常好的教程

    • 極速入門教程(上)
    • 極速入門教程(下)

    總結(jié)

    以上是生活随笔為你收集整理的【单片机】Arduino(以UNO R3为例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。