主要内容

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

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

在Arduino上加载程序

由于你的电脑,插入Arduino。

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

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

与Arduino建立连接

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

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

serialportlist (“可用”)”
ans =3×1的字符串" com1 " " com3 " " com13 "

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

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

准备串口对象启动数据流

配置串口通过清除旧数据并配置其属性。

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

configureTerminator (arduinoObj“CR / LF”);

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

冲洗(arduinoObj);

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

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

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

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

设置BytesAvailableFcnMode财产归"《终结者》“而且BytesAvailableFcn财产@readSineWaveData.回调函数readSineWaveData当可以从Arduino读取新的正弦波数据(带终止符)时触发。

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

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