我有一個通過串口連接到Matlab的CyberGlove。我正在嘗試編寫一個請求數據樣本的命令,然後再讀取樣本。在Matlab中串行端口讀/寫的問題
我已經成功連接用下面的代碼手套:
s = serial('/dev/ttyS0')
set(s,'BaudRate',115200)
fopen(s)
我然後可以寫/讀來獲取傳感器信息或二進制或ASCII。
在二進制我做:
fwrite(s,'G')
fread(s)
fread
總是超時,然後吐出來看似隨機的長度含有無意義整數(1-100 +)的列向量。
用ASCII,該命令是:
fprintf(s,'g')
fscanf(s)
這給出了一個空字符串作爲讀出值。但我知道,手套越來越多,至少在一定程度上處理了命令,因爲如果我給它一個無效的命令,我會收回錯誤消息e?
。
雖然這讓我很困惑,但我意外地發現了一種方法來從手套中獲得正確的閱讀。
fread(s)
(其中超時,並給出了看似隨意輸出)
fprintf(s,'g')
fscanf(s)
然後我得到字符串輸出'g 1 76 93 113 89 42 20 77 98 106 117 81 62 23 52 60 34 68 57 254 92 26'
,這是正確的。
我的問題是:
(1)爲什麼最後一部分會產生正確的響應?
(2)如何從二進制命令中讀取數據?這是我真正想要獲得的。
這聽起來像是它更多的問題與設備的通信協議,而不是一個Matlab問題。 –
那麼,看起來我應該可以在其他方面測試它,然後呢?有沒有一種簡單的命令行方法可以用於此? – Pterosaur
好問題......不知道這是否是最好的方法,但我想你可以使用'cat/dev/ttyS0'來讀取和'printf ...>/dev/ttyS0'進行寫入。 printf是內置的bash。但我建議的第一件事是檢查設備的文檔,看看你是否瞭解一切。 –