1. 程式人生 > >Arduino串列埠的一些高階用法

Arduino串列埠的一些高階用法

1.配置串列埠通訊資料位、校驗位、停止位
通常我們使用Serial.begin(speed)來完成串列埠的初始化,這種方式,只能配置串列埠的波特率。
而使用Serial.begin(speed, config)可以配置資料位、校驗位、停止位等。
例如Serial.begin(9600,SERIAL_8E2)是將串列埠波特率設為9600,資料位8,偶校驗,停止位2。
config可用配置如下:
config可選配置 資料位 校驗位 停止位 config可選配置 資料位 校驗位 停止位
SERIAL_5N1 5 1 SERIAL_5E2 5 2
SERIAL_6N1 6 1 SERIAL_6E2 6 2
SERIAL_7N1 7 1 SERIAL_7E2 7 2
SERIAL_8N1 8 1 SERIAL_8E2 8 2
SERIAL_5N2 5 2 SERIAL_5O1 5 1
SERIAL_6N2 6 2 SERIAL_6O1 6 1
SERIAL_7N2 7 2 SERIAL_7O1 7 1
SERIAL_8N2 8 2 SERIAL_8O1 8 1
SERIAL_5E1 5 1 SERIAL_5O2 5 2
SERIAL_6E1 6 1 SERIAL_6O2 6 2
SERIAL_7E1 7 1 SERIAL_7O2 7 2
SERIAL_8E1 8 1 SERIAL_8O2 8 2

2. if (Serial)的用法
當串列埠被開啟時,Serial的值為真。串列埠被關閉時Serial的值為假。
比較囧的是,這個方法只適用於Leonardo和micro的Serial,也就是說連線連線到電腦USB的那個模擬串列埠。
例如以下程式,當你沒有使用串列埠監視器開啟串列埠時,程式就會一直迴圈執行while (!Serial) {;} ,當你開啟串列埠監視器,程式會退出while迴圈,開始loop中的程式。

[C++] 純文字檢視 複製程式碼 ?
1 2 3 4 5 6 7 8 void setup() { Serial.begin(9600); while (!Serial) {;} } void loop() { }


3.read和peek輸入方式的差異
串列埠接收到的資料都會暫時存放在接收緩衝區中,使用read()與peek()都是從接收緩衝區中讀取資料。不同的是,使用read()讀取資料後,會將該資料從接收緩衝區移除;而使用peek()讀取時,不會移除接收緩衝區中的資料。
你可以使用以下程式,觀察其執行結果:

[C++] 純文字檢視 複製程式碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 char col; void setup() { Serial.begin(9600); } void loop() { while(Serial.available()>0){ col=Serial.read(); Serial.print("Read: "); Serial.println(col); delay(1000); } }


[C++] 純文字檢視 複製程式碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 char col; void setup() { Serial.begin(9600); } void loop() { while(Serial.available()>0){ col=Serial.peek(); Serial.print("Read: "); Serial.println(col); delay(1000); } }


4. 串列埠讀入int型資料
實際上是串列埠讀入字串,再轉換為int型資料。
[C++] 純文字檢視 複製程式碼 ?
1 2 3 4 5 6 7 8 9 while (Serial.available() > 0) { int inChar = Serial.read(); if (isDigit(inChar))

相關推薦

Arduino串列一些高階用法

1.配置串列埠通訊資料位、校驗位、停止位通常我們使用Serial.begin(speed)來完成串列埠的初始化,這種方式,只能配置串列埠的波特率。而使用Serial.begin(speed, config)可以配置資料位、校驗位、停止位等。例如Serial.begin(9

瞭解Python中的list和dict的一些高階用法

list和dict是python中常用的列表和字典。 這裡討論一下他們的原理及一些高階用法,供大家查詢參考。 list的切片 list的切片格式為: list[start:end:step] 其中step如果沒有,則預設為1 下面舉例說明: 先定義一個list: l

樹莓派與Arduino串列通訊

一、在樹莓派上安裝Arduino $ sudo apt-get install Arduino 二、樹莓派安裝串列埠除錯程式     minicom是Linux平臺串列埠除錯工具,相當於Windows上的串列埠除錯助手,可以用來讀取Arduino通過USB串

arduino串列中斷資料

之前用arduino些串列埠接收都是這樣子的 void loop() { comdata = ""; while (Serial.available()) //時刻讀取硬體串列埠資料 { comdata += char(Serial.read()); d

關於Java序列化的一些高階用法

該說的都在註釋中說完了。直接給程式吧。 package test.javaPuzzler.p5; import java.io.*; import java.io.ObjectInputStream.GetField; import java.io.ObjectOutp

樹莓派與arduino串列通訊實踐

Arduino具有豐富的外部介面,與樹莓派的IO口最大的不同在於Arduino具有模擬輸入介面,可以測量IO口上的模擬值。Arduino與Raspberry通過串列埠(Serial)通訊的方案一般有兩種,一是通過樹莓派GPIO串列埠通訊,第二種是通過USB串列埠通訊。

STM32下多個串列的Printf用法

網上講的新增printf()到程式中一般都是這樣的(簡要提一下): 1.配置GPIO ,USART,RCC 的Configuration 2.勾選usb micro lib 3.在程式中新增:(標頭檔案需要新增#include <stdio.h>) #ifdef __GNUC__ #define

用Android手機通過藍芽模組HC-06連線Arduino串列輸出

通過手機進行通訊是可以實現很多遙控功能,雖然距離是比較短,一般是10米,但對於我這種新手做測試,比起買一個幾百塊的多通道遙控器成本要低很多。實驗目的:用Android實現藍芽連線通過Arduino串列埠輸出資訊這次使用的是藍芽HC-06從模組,就是從機模組,這都因為買之前沒有

ARDUINO 串列回顯資料

/*串列埠接收資料最大長度*/ #define _SER_RECBUFSIZE 512 char serial_recive[_SER_RECBUFSIZE] =""; /*串列埠資料接收字串*/ /* 讀取串列埠輸入(單個位元組延遲2ms) */ int Seria

arduino 串列JSON指令傳送

http://www.geek-workshop.com/thread-3407-1-1.html 我是一個PHP 程式設計師,休閒的時候也謝謝python ,小時候就很喜歡電子產品,現在發現了arduino真是太高興了,休息的時間又可以有個東西玩玩了,但是寫慣了PHP

python的一些高階用法

map的用法 def fn(x): return x*2 L1 = [1,2,3,4,5,6] L2 = list(map(fn,L1)) L2 [2, 4, 6, 8, 10, 12] 通過上面的執行,可以知道map就是把一個數組內所有的元素都執行map加入的方法。 用法如下 map(方法,陣列)

Bash 指令碼程式設計的一些高階用法

## 概述 偶然間發現 ```man bash``` 上其實詳細講解了 ```shell``` 程式設計的語法,包括一些很少用卻很實用的高階語法。就像發現了寶藏的孩子,興奮莫名。於是參考```man bash```,結合自己的理解,整理出了這篇文章。 本文並不包含```man bash```所有的內容,也

arduino學習系列——串列通訊

今天學習了串列埠通訊的相關內容,其實就是Serial的一系列函式: Serial.begin(); //開啟串列埠 Serial.end(); //關閉串列埠 Serial.available();//判斷串列埠緩衝器是否有資料裝入 Serial.read(); //讀取

Arduino 讀取 Pin2 的電平訊號,並把結果列印到串列,也同時反映到 LED 燈

Arduino 讀取 Pin2 的電平訊號,並把結果列印到串列埠,也同時反映到 LED 燈 /* 讀取 Pin2 的電平訊號,並把結果列印到串列埠,也同時反映到 LED 燈 */ // 定義引腳 int pushButton = 2; int LED = 13; // 初

關於arduino通過串列傳送到processing的資料混亂(錯誤\顯示不正確)的問題解答

最近的教學中,已經開始使用processing和arduino進行串列埠通訊的互動,使用中發現有的同學遇到了arduino傳送給processing的資料存在顯示不正確,甚至混亂的現象。這裡給予統一解釋。 arduino程式碼完成的工作是將模擬訊號口讀入模擬資料,然後經過map對映為0到

Arduino與MATLAB實現串列通訊來畫圖

自己編好Arduino的程式,需要在MATLAB中呼叫串列埠,讀取資料,我們就需要用到MATLAB中的串列埠物件serial。 比如讀取感測器的值來繪圖、處理攝像頭等等。 簡單的讀取感測器的電壓值 Arduino程式 int analogPin = 5;

STM32高階開發(12)-在GCC中使用printf列印串列資料

在大家使用keil或是iar開發stm32等arm晶片的時候,想來最不陌生的就是使用print通過串列埠輸出一些資料,用來除錯或是其他作用。但是要明確的是由於keil iar gcc 他們使用的標準C語言庫雖然都遵循一個標準,但他們底層的函式實現方式都是不同的,那麼在GCC中

Arduino例程解讀與實驗(3.DigitalReadSerial 串列顯示數字管腳電平)

/* DigitalReadSerial //串列埠顯示數字管腳電平 Reads a digital input on pin 2, prints the result to the Serial Mo

樹莓派——樹莓派和Arduino的簡單串列通訊

本文參考《愛上Raspberry Pi》第六章,同學們可以選擇直接看書,本文只是把關鍵的部分提煉了出來,僅供大家參考~~~ 定位串列埠 想要使樹莓派和Arduino進行串列埠通訊,首先要確定Arduino連在樹莓派上的串列埠裝置名,就像在Windows上開啟裝置管理器檢視所連線的埠(COM)

C#中Invoke的串列接收事件中的用法

在用.NET Framework框架的WinForm構建GUI程式介面時,如果要在串列埠Serilport控制元件的DataReceived事件響應函式中改變控制元件的狀態,直接更改會報錯,可以使用Invoke()解決。例如: this.Invoke(new Action(()=> {