从simulink到arduino uno的数值数据
Numerical data from simulink to arduino uno
我想将数值数据从 Simulink 发送到 Arduino Uno。
因为我不知道如何让它在 Simulink 中工作,所以我只是尝试使用 Matlab。
此代码将数字数据发送为 char
。所以对 Arduino 一次一个角色。之后,我必须将字符连接起来构造数值,然后将其交给Arduino来处理。然后用同样的方法传回Matlab
我想知道是否可以将数值数据作为数值发送到 Arduino,然后将其作为数值数据发送回 Matlab/simulink。
这是我在 Matlab 中使用的代码:
close all; clear all ; clc;
delete (instrfind({'Port'},{'COM5'}))
s = serial('COM5');
set(s,'DataBits',8);
set(s,'StopBits',1);
set(s,'BaudRate',4800);
set(s,'Parity','none');
fopen(s)
while (1)
if (s.BytesAvailable)
readData=fscanf(s)
else
fprintf(s,'arduino');
end
end
fclose(s)
这是我在 Arduino 中使用的代码:
int sensorPin = A0;
int sensorValue = 0;
char incomingData;
void setup() {
Serial.begin(4800);
}
void loop() {
if (Serial.available() > 0)
{
incomingData = Serial.read(); //read incoming data
Serial.println(incomingData);
delay(100);
}
else {
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(100);
}
}
上面的问题我已经问过了。现在我找到了答案,所以我想和你分享。
首先,您必须关闭与串口的所有通信,并初始化通信的值。你这样做。
close all ; clc;
delete (instrfind({'Port'},{'COM3'}))
s = serial('COM3');
set(s,'DataBits',8);
set(s,'StopBits',1);
set(s,'BaudRate',9600);
set(s,'Parity','none');
Remarque:并非所有时间都有 'COM3' 端口,因此您必须在 Arduino 中查看您正在使用哪个端口。此外,您还必须在 matlab 和 Arduino 中计算 "BaudRate" 的精确值。
其次,你发送浮点数,然后你这样读:
YourValue = 123.456; % This is just an exemple
while (1)
fprintf(s,'%f',YourValue); % sendig the value to the Arduino
readData=fscanf(s,'%f') % receiving the value from the Arduino and printing it
end
fclose(s)
现在,对于 Arduino 部分,它很简单。代码如下:
int sensorPin = A0; // select the input pin for the potentiometer
int sensorValue = 0; // variable to store the value coming from the sensor
float incomingData;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available())
{
incomingData = Serial.parseFloat(); //read incoming data
delay(100);
}
else
{
Serial.println(incomingData);
delay(100);
}
}
备注:当我将许多值从 matlab 发送到 Arduino 时,我将它们发送回 matlab。我有第一个值总是这样打印[]或者这样0。我不知道是什么问题。
谢谢大家!!
我想将数值数据从 Simulink 发送到 Arduino Uno。
因为我不知道如何让它在 Simulink 中工作,所以我只是尝试使用 Matlab。
此代码将数字数据发送为 char
。所以对 Arduino 一次一个角色。之后,我必须将字符连接起来构造数值,然后将其交给Arduino来处理。然后用同样的方法传回Matlab
我想知道是否可以将数值数据作为数值发送到 Arduino,然后将其作为数值数据发送回 Matlab/simulink。
这是我在 Matlab 中使用的代码:
close all; clear all ; clc;
delete (instrfind({'Port'},{'COM5'}))
s = serial('COM5');
set(s,'DataBits',8);
set(s,'StopBits',1);
set(s,'BaudRate',4800);
set(s,'Parity','none');
fopen(s)
while (1)
if (s.BytesAvailable)
readData=fscanf(s)
else
fprintf(s,'arduino');
end
end
fclose(s)
这是我在 Arduino 中使用的代码:
int sensorPin = A0;
int sensorValue = 0;
char incomingData;
void setup() {
Serial.begin(4800);
}
void loop() {
if (Serial.available() > 0)
{
incomingData = Serial.read(); //read incoming data
Serial.println(incomingData);
delay(100);
}
else {
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(100);
}
}
上面的问题我已经问过了。现在我找到了答案,所以我想和你分享。
首先,您必须关闭与串口的所有通信,并初始化通信的值。你这样做。
close all ; clc;
delete (instrfind({'Port'},{'COM3'}))
s = serial('COM3');
set(s,'DataBits',8);
set(s,'StopBits',1);
set(s,'BaudRate',9600);
set(s,'Parity','none');
Remarque:并非所有时间都有 'COM3' 端口,因此您必须在 Arduino 中查看您正在使用哪个端口。此外,您还必须在 matlab 和 Arduino 中计算 "BaudRate" 的精确值。
其次,你发送浮点数,然后你这样读:
YourValue = 123.456; % This is just an exemple
while (1)
fprintf(s,'%f',YourValue); % sendig the value to the Arduino
readData=fscanf(s,'%f') % receiving the value from the Arduino and printing it
end
fclose(s)
现在,对于 Arduino 部分,它很简单。代码如下:
int sensorPin = A0; // select the input pin for the potentiometer
int sensorValue = 0; // variable to store the value coming from the sensor
float incomingData;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available())
{
incomingData = Serial.parseFloat(); //read incoming data
delay(100);
}
else
{
Serial.println(incomingData);
delay(100);
}
}
备注:当我将许多值从 matlab 发送到 Arduino 时,我将它们发送回 matlab。我有第一个值总是这样打印[]或者这样0。我不知道是什么问题。
谢谢大家!!