目的はシリアル通信を用いてArduinoからMATLABへ複数種類のデータを送信しプロットするプログラムを作成することです。
Arduinoから送信するデータは値の試用としてsin、cosを使用しています。
単一のデータなら通信してプロットすることができたのですが複数種類を順次送信するとエラーは出ていないのですがMATLABではデータがすべてNaNになってしまいプロットに表示されません。
現在は2つのデータのプログラムですが将来的にはもっと沢山のデータを通信・プロットしたいと考えています。
原因と解決方法を教えてください。
単一データのプログラム
MATLAB
clear all clc s = serial('COM7', 'BaudRate', 9600, 'Terminator', 'CR', 'StopBit', 1, 'Parity', 'None'); fopen(s); t=1; out = 0; while(1) if (t<=30) fprintf(s,'1'); out(t) = str2double(fscanf(s)) else fclose(s); delete(s); clear s break; end t = t+1; end t=1:1:30; figure plot(t,out,'-.') hold on
Arduino
int i = 0; double u; void setup() { Serial.begin(9600); } void loop() { u=sin(i*50.0/360.0); Serial.print(u); Serial.write(13); Serial.write(10); i += 1; delay(1000); }
複数データのプログラム
MATLAB
s = serial('COM7', 'BaudRate', 9600, 'Terminator', 'CR', 'StopBit', 1, 'Parity', 'None'); fopen(s); a=1; t=1; N=30; out = zeros(2,N); while(1) if (t<=N) fprintf(s,'1'); out(1,:) = str2double(fscanf(s)); s.BytesAvailable; fprintf(s,'2'); out(2,:) = str2double(fscanf(s)); s.BytesAvailable; else fclose(s); delete(s); clear s break; end t = t+1; end t=1:1:30; figure plot(t,out(1,N),'-.') hold on plot(t,out(2,N),'-.') hold on
Arduino
int i = 0; double u; double a; void setup() { Serial.begin(9600); } void loop() { u=sin(i*50.0/360.0); a=cos(i*30.0/360.0); Serial.print(u); Serial.write(13); Serial.write(10); Serial.print(a); Serial.write(20); Serial.write(23); i += 1; delay(10); }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。