arduino——串口通訊(筆記)

Arduino與外部設(shè)備通信的方式均屬于串行通訊扫倡。
串行通訊的概念是相對(duì)于并行通信而言的。


image.png

(當(dāng)然目前來(lái)說(shuō)只是概念上的認(rèn)知藤巢。)
arduino硬件集成了串口搞莺、IIC、SPI三種常見(jiàn)的的通信方式掂咒,掌握了這三種通訊類庫(kù)的方法才沧,即可與具有響應(yīng)通信接口的各種設(shè)備通信迈喉,也可以為基于這些通信方式的傳感器或者模塊編寫(xiě)驅(qū)動(dòng)程序。

硬件串口通信

HardwareSerial類庫(kù)的使用
hard硬
ware器物或者什么
Serial這里是串口或者串行的意思
我們理解arduino和USB接口的簡(jiǎn)單通信構(gòu)成了計(jì)算機(jī)和arduino之間的串口通信温圆,除此之外arduino還可以與其他串口設(shè)備進(jìn)行通信挨摸。


image.png

TX發(fā)送端
RX接收端
通過(guò)簡(jiǎn)單的圖可以理解兩個(gè)設(shè)備之間共用電源接地。
實(shí)際的arduino板子上的這兩個(gè)端口為數(shù)字端口0和1
1為發(fā)送端
0為接收端
板子上有很明顯的標(biāo)志岁歉。

串口工作原理

arduino和其他設(shè)備通信的過(guò)程中得运,數(shù)據(jù)傳輸實(shí)際上都是以數(shù)字信號(hào)(電平的高低變化)的形式進(jìn)行的,當(dāng)使用Serial.print()函數(shù)輸出數(shù)據(jù)時(shí)锅移,arduino的發(fā)送端會(huì)輸出一連串的數(shù)字信號(hào)熔掺,這些數(shù)字信號(hào)稱為數(shù)據(jù)幀。


image.png

通過(guò)電平的變化來(lái)輸出數(shù)據(jù)非剃。
HardwareSerial類庫(kù)成員函數(shù)

  1. available


    image.png

    獲取串口接收到的數(shù)據(jù)個(gè)數(shù)置逻。注意是個(gè)數(shù)而非具體的值。
    Serial.available()

  2. begin()
    初始化串口努潘,可以配置串口的參數(shù)诽偷。
    Serial.begin(speed)
    Serial.begin(speed,config)


    image.png
  3. end()
    結(jié)束串口通信。
    Serial.end()
  4. find()
    從串口緩沖區(qū)讀取數(shù)據(jù)疯坤,直到讀到指定的字符串报慕。(很像excel中的find函數(shù))
    Serial.find(target)
    返回值為布爾型,true表示找到压怠,false沒(méi)找到眠冈。
  5. findUntil()
    從串口緩沖區(qū)讀取數(shù)值,知道讀到指定的字符串或指定的停止符菌瘫。
    Serial.findUntil(taget,terminal)


    image.png
  6. flush()
    等待正在發(fā)送的數(shù)據(jù)發(fā)送完成蜗顽。
    (flush英文的意思應(yīng)該使沖洗的意思,用在這里確實(shí)有點(diǎn)理解困難)
    Serial.flush()
  7. parseFloat()
    從串口緩沖區(qū)返回第一個(gè)有效的float型數(shù)據(jù)雨让。
    Serial.parseFloat()
    8.parseInt()
    返回第一個(gè)整數(shù)數(shù)據(jù)雇盖、
  8. peek()
    返回1字節(jié)的數(shù)據(jù),但不會(huì)從接收緩沖區(qū)刪除該數(shù)據(jù)栖忠。
    (peek的英文為偷窺的意思崔挖,很形象,偷看你但不影響你庵寞。)
  9. print()
    將數(shù)據(jù)輸出到串口狸相。
    Serial.print(val)
    Serial.pirnt(val,format)
  10. println()
  11. read()
    從串口讀取數(shù)據(jù)。會(huì)從接收緩沖區(qū)移除數(shù)據(jù)捐川。
    Serial.read()
  12. readBytes()
    從接收緩沖區(qū)讀取指定長(zhǎng)度的字符脓鹃,并將其存在一個(gè)數(shù)組中。
    Serial.readBytes(buffer,length)

    buffer,用于存儲(chǔ)數(shù)據(jù)的數(shù)組古沥,字符或者字節(jié)瘸右。
    image.png

    length,讀取的字符長(zhǎng)度娇跟。
    (buff想到一個(gè)游戲中常見(jiàn)的用語(yǔ),加一個(gè)buff太颤,增加一個(gè)增益狀態(tài)逞频。)
  13. readBytesUntil()
  14. setTimeout()
    設(shè)定超時(shí)時(shí)長(zhǎng)。用于設(shè)定Serial.readBytesUntil()和Serial.readBytes()的等待串口數(shù)據(jù)時(shí)間栋齿。
    16.write()
    輸出數(shù)據(jù)到串口苗胀,以字節(jié)形式輸出。
    Serial.write(val)
    Serial.write(str)
    Serial.write(buf,len)
    返回輸入的字節(jié)數(shù)瓦堵。

print()和write()輸出方式的差異

首先簡(jiǎn)單回顧一下數(shù)組在arduino的用法基协。
數(shù)據(jù)類型 數(shù)組名稱【數(shù)組元素的個(gè)數(shù)】
例如 int a[5];定義了一個(gè)有5個(gè)整數(shù)型元素?cái)?shù)組。
int a[5]={1,2,3,4,5}

int a[5];
a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;
是等效的菇用。
取值方法:
a[0]

/*
print()和write()的使用方法和差異
 */
float FLOAT=1.23456;
int INT=123;
byte BYTE[6]={48,49,50,51,52,53};
void setup() {
Serial.begin(9600);
Serial.println("Serial print:");
Serial.println(INT);//會(huì)輸入123
Serial.println(INT,BIN);//二進(jìn)制
Serial.println(INT,DEC);//十進(jìn)制
Serial.println(INT,OCT);//八進(jìn)制
Serial.println(INT,HEX);//16進(jìn)制
Serial.println(FLOAT);//默認(rèn)兩位小數(shù)
Serial.println(FLOAT,0);
Serial.println(FLOAT,2);
Serial.println(FLOAT,4);


Serial.println();
Serial.println("Serial Write:");
Serial.write(INT);
Serial.println();
Serial.write("Serial");
Serial.println();
Serial.write(BYTE,6);//數(shù)組澜驮,長(zhǎng)度為6

}

void loop() {
  // put your main code here, to run repeatedly:

}
image.png

當(dāng)使用print()發(fā)送數(shù)據(jù)時(shí),發(fā)送的不是數(shù)據(jù)本身惋鸥,而是將數(shù)據(jù)轉(zhuǎn)換成字符杂穷,再轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼發(fā)送出去,串口見(jiàn)失去接收到ASCII碼卦绣,則會(huì)顯示對(duì)應(yīng)的字符耐量。
而當(dāng)使用write()時(shí),發(fā)送的是數(shù)據(jù)本身滤港,但當(dāng)串口見(jiàn)失去接收到數(shù)據(jù)后廊蜒,會(huì)將數(shù)值當(dāng)成ASCII而顯示對(duì)應(yīng)的字符。
因此123對(duì)應(yīng)的字符為{溅漾。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末山叮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子添履,更是在濱河造成了極大的恐慌屁倔,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暮胧,死亡現(xiàn)場(chǎng)離奇詭異锐借,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)叔壤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門瞎饲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)口叙,“玉大人炼绘,你說(shuō)我怎么就攤上這事⊥铮” “怎么了俺亮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵驮捍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我脚曾,道長(zhǎng)东且,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任本讥,我火速辦了婚禮珊泳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拷沸。我一直安慰自己色查,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布撞芍。 她就那樣靜靜地躺著秧了,像睡著了一般。 火紅的嫁衣襯著肌膚如雪序无。 梳的紋絲不亂的頭發(fā)上验毡,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音帝嗡,去河邊找鬼晶通。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哟玷,可吹牛的內(nèi)容都是我干的录择。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碗降,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼隘竭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起讼渊,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤动看,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后爪幻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體菱皆,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年挨稿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仇轻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奶甘,死狀恐怖篷店,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤疲陕,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布方淤,位于F島的核電站,受9級(jí)特大地震影響蹄殃,放射性物質(zhì)發(fā)生泄漏携茂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一诅岩、第九天 我趴在偏房一處隱蔽的房頂上張望讳苦。 院中可真熱鬧,春花似錦吩谦、人聲如沸医吊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卿堂。三九已至懒棉,卻和暖如春草描,著一層夾襖步出監(jiān)牢的瞬間策严,已是汗流浹背穗慕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工妻导, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逛绵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓倔韭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寿酌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一醇疼、隨機(jī)數(shù) randomSeed() 描述使用randomSeed()初始化偽隨機(jī)數(shù)生成器硕并,使生成器在隨機(jī)序列中的...
    無(wú)劍_君閱讀 2,124評(píng)論 0 2
  • 都說(shuō)了是純干貨了,所以直接上內(nèi)容秧荆,以下函數(shù)使用前均需要加上Serial.倔毙,下面是關(guān)于串口通訊函數(shù)的基本介紹: 函數(shù)...
    0122杜曉燕閱讀 2,180評(píng)論 0 0
  • 本節(jié)內(nèi)容: 一乙濒、什么是PWM?有何用途? 二凯正、Arduino產(chǎn)生PWM信號(hào)的兩種方式 三豌蟋、串口輸入輸出的基本方法 ...
    0235_左雨欣閱讀 2,126評(píng)論 0 2
  • 在很多時(shí)候,Arduino需要和其他設(shè)備相互通訊梧疲,而最常見(jiàn)最簡(jiǎn)單的方式就是串口通訊。本篇介紹Arduino硬件串口...
    TonyCode閱讀 101,820評(píng)論 1 15
  • 昨天和高中兩個(gè)好友出來(lái)吃飯幌氮,飯后我們就去高中母校一中閑逛,滿滿的回憶和感觸该互。走在校園里,雖然很多建筑都已經(jīng)變了宇智,但...
    小包zhan閱讀 241評(píng)論 0 0