/ Dados numéricos do simulink para arduino uno-matlab, arduino, simulink, arduino-uno

Dados numéricos de simulink para arduino uno-matlab, arduino, simulink, arduino-uno

Eu quero enviar dados numéricos do Simulink para um Arduino Uno.

Porque eu não sei como fazer funcionar no Simulink, então estou apenas tentando com o Matlab.

Este código envia dados numéricos como char. Então, um personagem de cada vez para o Arduino. Depois disso, eu tenho que concatenar caracteres para construir o valor numérico e então dar ao Arduino para tratar. Então mande de volta para o Matlab da mesma maneira.

Eu gostaria de saber se existe a possibilidade de enviar os dados numéricos como numéricos para o Arduino, e enviá-los de volta para o Matlab / simulink como dados numéricos.

Este é o código que estou usando no 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)

E esse é o código que estou usando no 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);
}
}

Respostas:

0 para resposta № 1

Eu já fiz a pergunta acima. E agora encontrei a resposta, então queria compartilhar com você.

Primeiro, você precisa fechar todas as comunicações com a porta Serial e inicializar os valores da comunicação. Você faz assim.

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: Nem todo o tempo você tem a porta "COM3", então você tem que ver no seu Arduino qual porta você está usando. Além disso, você tem que fazer o valor exacte de "BaudRate" no matlab e no Arduino também.

Em segundo lugar, você envia o número float, então você lê da seguinte maneira:

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)

Agora, para a parte do Arduino, é simples. O código é apresentado como abaixo:

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);
}
}

Nota: Quando envio muitos valores do matlab para o Arduino, eu os envio de volta para o matlab. Eu tenho o primeiro valor sempre é impresso desta forma [] ou desta forma 0. Eu não sei qual é o problema.

Obrigado por todos vocês !!