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 № 1Eu 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 !!