0

そのため、Matlab で AT コマンドを使用して発信者 ID を返していますが、これは実際には問題ではありません。

ASCII番号を返すという事実を除いて、すべてがうまく機能しており、そのASCIIコードをcharに「変換」して、それが何を言っているのかを知ることができるようにする必要があります。

>> 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

試しstr2doubleてみるか、あなたが持っているASCIIコードから(char '0'のASCII値)をstr2num差し引いてください。'0'

于 2013-05-21T09:03:26.270 に答える
0

クラスを使用して、返されたクラスが であることを確認しましたserial。だから私はそれをfgets知り、それはうまくいきました

これが入出力です。

tline = fgets(s)
tline =
ATD0888123456
于 2013-05-22T21:38:54.530 に答える
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

「+arbitrary」は、読み取ったファイルの最初の 10 文字です。

于 2013-05-21T12:46:14.343 に答える