# 實驗四繪圖教學
## 擷取 Arduino 數據至 Matlab
於實驗中開啟Serial monitor,可見 Arduino 會傳出兩組數據分別為 `Setpoint` 以及 `Encoder Counter`, 將其複製至Excel

貼上至Excel後使用文字匯入精靈將字串分離


分離後即可將C、D兩欄匯入至Matlab中。
## Matlab 繪製響應圖
開啟 [Matlab Script](https://hackmd.io/@guanlunlu/AC_matlab_script),先執行第一個Section
```matlab!
%%
% Run this section first, then paste arduino data from excel
exp_data = []
% Copy data from Excel to exp_data
```
雙擊右側Workspace窗口`exp_data`,將Excel數據貼上,即完成數據匯入


執行第二個Section,為數據加上timestamp
```matlab!
%%
% add timestamp data to matlab array (100 Hz)
[datalength, col] = size(exp_data);
ts = linspace(0, 0.01*datalength, datalength);
exp_data = [transpose(ts), exp_data]
% exp_data format is performed as:
% exp_data = [time(sec), setpoint, encoder_counter(resp.)]
```
## 調整Simulink的Sampling Rate 以及 Step input的起始時間
* 將Simulink中的sampling rate調為0.01 (Arduino的Sampling rate) (Sinewave 同理)
* 將Step的起始時間調整至與實驗數據相同

## 執行Matlab script 最後一個section 即可完成繪圖
```matlab!
%%
% plot setpoint
plot(exp_data(:,1), exp_data(:,2), 'LineWidth',1)
hold on
% plot motor response
plot(exp_data(:,1), exp_data(:,3), 'LineWidth',1)
hold on
% plot simulink response
plot(out.simout.Time, out.simout.Data(:,2), 'LineWidth',1)
legend("setpoint", "motor response", "simulink response")
hold off
xlabel("time (sec)")
ylabel("position (count)")
% set x range of plot
xlim([-1, 6])
grid on
```
