このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
シリアル ポート通信を使用した Arduino からのストリーミング データの読み取り
この例では、serialport
インターフェイスを使用して Arduino®
Due から ASCII で終端処理されたストリーミング データを読み取るために、コールバックを有効にする方法を説明します。
Arduino へのプログラムの読み込み
Arduino Due をコンピューターに接続します。
Arduino IDE を使用して、以下のプログラムの Arduino Due に読み込みます。このプログラムは正弦波の連続点を書き出し、続いて "キャリッジ リターン" と "改行" の終端文字を書き出します。
/* SineWavePoints Write sine wave points to the serial port, followed by the Carriage Return and LineFeed terminator. */ int i = 0; // The setup routine runs once when you press reset: void setup() { // Initialize serial communication at 9600 bits per second: Serial.begin(9600); } // The loop routine runs over and over again forever: void loop() { // Write the sinewave points, followed by the terminator "Carriage Return" and "Linefeed". Serial.print(sin(i*50.0/360.0)); Serial.write(13); Serial.write(10); i += 1; }
Arduino への接続の確立
serialport
インスタンスを作成して、Arduino Due に接続します。
Arduino の接続先のシリアル ポートを見つけます。ポートは Arduino IDE から特定できます。
serialportlist("available")'
ans = 3×1 string
"COM1"
"COM3"
"COM13"
Arduino コードで指定されているポートとボー レートを使用して serialport
オブジェクトを作成することにより、Arduino Due に接続します。
arduinoObj = serialport("COM13",9600)
arduinoObj = Serialport with properties Port: "COM13" BaudRate: 9600 NumBytesAvailable: 0 NumBytesWritten: 0 Show all properties
データのストリーミングを開始するための serialport
オブジェクトの準備
古いデータをクリアしプロパティを構成することで、serialport
オブジェクトを構成します。
Arduino コードで指定した終端文字と一致するように Terminator
プロパティを設定します。
configureTerminator(arduinoObj,"CR/LF");
serialport
オブジェクトをフラッシュして、古いデータを削除します。
flush(arduinoObj);
Arduino データを保存するために UserData
プロパティを準備します。struct の Data
フィールドは正弦波の値を保存し、Count
フィールドは正弦波の x 軸値を保存します。
arduinoObj.UserData = struct("Data",[],"Count",1)
arduinoObj = Serialport with properties Port: "COM13" BaudRate: 9600 NumBytesAvailable: 10626 NumBytesWritten: 0 Show all properties
最初の 1000 個の ASCII 終端処理された正弦波データ点を読み取って結果をプロットするコールバック関数 readSineWaveData
を作成します。
function readSineWaveData(src, ~) % Read the ASCII data from the serialport object. data = readline(src); % Convert the string data to numeric type and save it in the UserData % property of the serialport object. src.UserData.Data(end+1) = str2double(data); % Update the Count value of the serialport object. src.UserData.Count = src.UserData.Count + 1; % If 1001 data points have been collected from the Arduino, switch off the % callbacks and plot the data. if src.UserData.Count > 1001 configureCallback(src, "off"); plot(src.UserData.Data(2:end)); end end
BytesAvailableFcnMode
プロパティを "terminator
" に、BytesAvailableFcn
プロパティを @readSineWaveData
に設定します。コールバック関数 readSineWaveData
は、新たな正弦波データ (終端文字付き) が Arduino から読み取りできるようになるとトリガーされます。
configureCallback(arduinoObj,"terminator",@readSineWaveData);
コールバック関数は、最初の 1000 個の正弦波データ点のプロットとともに MATLAB®
の Figure ウィンドウを開きます。