从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。我不知道是什么问题。

谢谢大家!!