之前的一篇有介紹到以Java來跟Arduino溝通,這篇是要介紹使用Matlab的方式。
在網上搜查之後,找到了兩種主要的常見方法,可以參考這篇文,寫得非常詳細:
【經驗分享】Matlab和Arduino
,其中也寫到了如何用Simulink來跟Arduino溝通。
兩種主要的方法為:
1.使用Matlab Arduino Support package。
2.使用Matlab本身的指令去跟Serial Port連接。
第一種方法在【經驗分享】Matlab和Arduino有詳細的解說,要把其所附的程式燒錄到Arduino枚子上,然後用Matlab只接控制Arduino,使用方便,但其缺點為Arduino上不行燒錄自己所寫的Arduino程式,可以把它想成把原來在Arduino上寫的程式全部搬到了Matlab上面去執行。
在這裡我主要介紹第二種方法,此方法不用任何套件,單純就Matlab本身去跟Seriao Port去溝通。
之所以要使用Matlab是因為它的繪圖很方便,只要使用plot()指令就能夠很輕易的繪圖,在這裡我們使用上述的第二種方法來實作一個簡單的示波器:
Matlab程式碼如下:
%模擬示波器,信號來源為Serial Port serialPort = serial('COM3'); %獲得Serial Port(序列阜) set(serialPort,'BaudRate',9600); %設定Baud Rate fopen(serialPort); %打開Serial Port times = 1:1000; %在這裡times只是當成X軸來顯示,其值並不代表真實的時間 voltages = zeros(1,1000); %初始化Y軸的值 try %進行例外(Exception)處理 figure(1) %繪置第一次loop的圖 for i = 1:length(voltages) inputVoltage = str2num(fgetl(serialPort)); %使用fgetl()來讀去從Serial Port讀到的值 voltages(i) = inputVoltage; plot(times,voltages,'.'); %繪圖 drawnow; hold off; end %接著把代表Y軸的一維陣列全部的元素往左一格,第一個就移出去不要,把新得到的值放在最右邊 for i=1:3 voltages(1:(length(voltages)-1)) = voltages(2:length(voltages)); inputVoltage = str2num(fgetl(serialPort)); voltages(length(voltages))=inputVoltage; plot(times,voltages,'.'); drawnow; hold off; end catch ME id = ME.identifier fclose(serialPort); %關閉Serial Port end fclose(serialPort); %關閉Serial Port
沒有留言 :
張貼留言