2016-05-28 6 views
1

Ich möchte numerische Daten von Simulink zu einem Arduino Uno senden.Numerische Daten von Simulink zu Arduino Uno

Weil ich nicht weiß, wie es in Simulink funktioniert, also versuche ich nur mit Matlab.

Dieser Code sendet numerische Daten wie char. So ein Zeichen nach dem anderen zum Arduino. Danach muss ich Zeichen verketten, um den numerischen Wert zu konstruieren und dann dem Arduino zu behandeln. Dann schicke es auf die gleiche Weise zurück nach Matlab.

Ich würde gerne wissen, ob es eine Möglichkeit gibt, die numerischen Daten als numerische zum Arduino zu senden, und senden Sie es zurück an Matlab/simulink als numerische Daten.

Dies ist der Code, den ich in Matlab bin:

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) 

Und dies ist der Code in Arduino Ich verwende:

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

Antwort

0

ich schon die Frage stellen oben. Und jetzt habe ich die Antwort gefunden, also wollte ich es mit dir teilen.

Zuerst müssen Sie die gesamte Kommunikation mit dem seriellen Anschluss schließen und die Werte der Kommunikation initialisieren. Das machst du so.

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: Nicht die ganze Zeit Sie die 'COM3' Port, so dass Sie in Ihrem Arduino zu sehen haben, die Port Sie verwenden. Außerdem müssen Sie den genauen Wert von "BaudRate" in Matlab und im Arduino angeben.

Zweitens senden Sie die Float-Zahl, dann sind Sie es auf diese Weise lesen:

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) 

Nun, zum Teil Arduino, es ist einfach. Der Code wird wie folgt dar:

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

Remarque: Wenn ich viele Werte von Matlab den Arduino senden, dann hat er sie zurück zu Matlab senden. Ich habe den ersten Wert immer auf diese Weise gedruckt [] oder so 0. Ich weiß nicht, was das Problem ist.

Danke für euch alle !!