0

所以,我使用 AT 命令和 Matlab 来返回呼叫者 ID,但这并不重要。

一切都很好,除了它返回 ASCII 数字,我必须花时间将 ASCII 代码“翻译”为字符,这样我才能知道它在说什么。

>> s = serial('COM8');
>> fopen(s)
>> fwrite(s, [65 84 43 67 82 67 61 49 13])
>> s

   Serial Port Object : Serial-COM8

   Communication Settings 
      Port:               COM8
      BaudRate:           9600
      Terminator:         'LF'

   Communication State 
      Status:             open
      RecordStatus:       off

   Read/Write State  
      TransferStatus:     idle
      BytesAvailable:     47
      ValuesReceived:     0
      ValuesSent:         18

>> fread(s, 47)

它返回给我 47 个这样的 ASCII 数字(请注意,我已经删除了大部分返回的代码):

ans =

    65
    84
    43
    67
    82
    67
    61
    49
    13

我尝试了以下事情:

char(fread(s,47))

z = fread(s,47)
char(z)

但是这些都不起作用

z = [65 84 43 67 82 67 61 49 13]
char(z)

工作正常。我想这是因为fread返回的 ASCII 代码之间带有换行符,而不仅仅是我在上面的代码中写的空格。

4

3 回答 3

1

尝试str2doublestr2num或者只是从您拥有的 ascii 代码中减去'0'(char '0' 的 ascii 值)。

于 2013-05-21T09:03:26.270 回答
0

以下是从文件读取时的操作方式——

>> s = fopen('.gitignore') # Just a file in my current directory
>> z = fread(s,10)         # Returns a column of numbers
z =
    43
    97
    114
    98
   105
   116
   114
    97
   114
   121
>> char(transpose(z))      # You could write z' instead of transpose(z)
ans =
+arbitrary

其中“+任意”是我读取的文件的前 10 个字符。

于 2013-05-21T12:46:14.343 回答
0

我使用类来找出返回的类是serial. 所以我发现fgets并且效果很好。有关 fgets 的更多信息,请访问 http://www.mathworks.com/help/matlab/ref/serial.fgets.html

这是输入/输出。

tline = fgets(s)
tline =
ATD0888123456
于 2013-05-22T21:38:54.530 回答