主要内容

使用串口通信从Arduino读取流数据

这个例子展示了如何启用回调从Arduino读取流ASCII终止数据®由于使用串口接口。

在Arduino上加载程序

因为你的电脑,插上Arduino。

使用Arduino IDE在Arduino Due上加载以下程序。这个程序写出正弦波的连续点,后面跟着“回车”和“换行”终止符。

将正弦波点写入串口,后面跟着回车符和换行符结束符。*/ int I = 0;//设置例程在按下reset时运行一次:void setup(){//以每秒9600位的速度初始化串行通信:serial .begin(9600);} //循环例程永远重复运行:void loop(){//写入正弦波点,后面跟着结束符"Carriage Return"和"Linefeed"。并同时罪(我* 50.0/360.0));Serial.write (13);Serial.write (10);我+ = 1;}

建立Arduino连接

创建一个串口实例连接到您的Arduino Due。

找到Arduino连接的串口。您可以从Arduino IDE中识别端口。

serialportlist (“可用”)”
ans =3×1的字符串“COM3”“COM1 COM13”

通过创建Arduino Due连接到串口对象使用Arduino代码中指定的端口和波特率。

arduinoObj =串口(“COM13”, 9600)
Port: "COM13" BaudRate: 9600 NumBytesAvailable: 0 NumBytesWritten: 0显示所有属性

准备串口对象启动数据流

配置串口对象,方法是清除旧数据并配置其属性。

设置《终结者》属性以匹配您在Arduino代码中指定的终止符。

configureTerminator (arduinoObj“CR / LF”);

串口对象删除任何旧数据。

冲洗(arduinoObj);

准备用户数据属性来存储Arduino数据。的数据字段保存正弦波值和字段保存正弦波的x轴值。

arduinoObj。用户数据= struct(“数据”[],“数”, 1)
Port: "COM13" BaudRate: 9600 NumBytesAvailable: 10626 NumBytesWritten: 0显示所有属性

创建一个回调函数readSineWaveData它读取前1000个ASCII终止的正弦波数据点并绘制结果。

函数readSineWaveData (src, ~)从serialport对象中读取ASCII数据。data = readline (src);将字符串数据转换为数字类型并将其保存在UserData中属性。src.UserData.Data结束(+ 1)= str2double(数据);更新serialport对象的Count值。src.UserData.Count = src.UserData.Count + 1;%如果已经从Arduino收集到1001个数据点,请关闭%回调并绘制数据。如果src. userdata . count > 1001 configureCallback(“关闭”);情节(src.UserData.Data(2:结束));结束结束

设置BytesAvailableFcnMode属性”《终结者》”和BytesAvailableFcn财产@readSineWaveData。回调函数readSineWaveData当可以从Arduino读取新的正弦波数据(带有终止符)时触发。

configureCallback (arduinoObj“终结者”, @readSineWaveData);

回调函数打开MATLAB®图窗口的前1000正弦波数据点的绘图。