WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Daten in einzelne Variablen separieren

 

Peter Weiss
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 17.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2019, 11:40     Titel: Daten in einzelne Variablen separieren
  Antworten mit Zitat      
Hallo,

ich erhalte über einen Arduino an der seriellen Schnittstelle Sensordaten, welche ich mir zeilenweise darstellen lasse. Dies sieht dann folgendermaßen aus:
1.1
2.5
-31.3
4.1
0.5
0.8

Hierbei stehen die Zeilen 1-3 für Kräfte (N) und Zeilen 4-6 für Momente (Nm) in den Richtungen x,y,z.
Diese Werte lasse ich mir nun über Matlab ausgeben. Ziel ist es, jeden einzelnen Wert als Variable zu beschreiben, damit ich diese Variablen anschließend in Echtzeit grafisch darstellen kann. Folgenden Code nutze ich:
Code:
s = serial('COM6'); % change the COM Port number as needed
%% Connect the serial port to Arduino
s.InputBufferSize = 1; % read only one byte every time
try
fopen(s);
catch err
fclose(instrfind);
error('Make sure you select the correct COM Port where the Arduino is connected.');
end

%% Read and plot the data from Arduino
Tmax=20;


Ts = 0.001; % Sampling time (s)
i = 0;
data = 0;
data=char;


t = 0;
tic % Start timer
while toc <= Tmax
i=i+1;

%% Read buffer data
data (i)  = fread(s);

if mod((i-1),6)==0
        FX=data (i)
        else if mod((i-2),6)==0
            FY=data (i)
            else if mod((i-3),6)==0
                FZ=data (i)
                else if mod((i-4),6)==0
                        Tx=data (i)
                        else if mod((i-5),6)==0
                                Ty=data (i)
                                else if mod((i-6),6)==0
                                        Tz=data (i)
                end
            end
                    end
                end
            end

    end

t(i) = toc;
if i > 1
T = toc - t(i-1);
while T < Ts
T = toc - t(i-1);
end
end
t(i) = toc;

    end
if i > 1
       
    end


fclose(s);
 


Jetzt ist das Problem, dass ich bei den Werten Fx,Fy,Fz, Tx, Ty, Tz nicht die Zahlenwerte bekomme, sondern immer nur ein Zeichen (entweder eine Zahl, ein Minus, ein ' ' oder ' ,) Ich denke das passiert, weil er i als einzelne Stelle und nicht als den gesamten Messwert sieht und es deswegen nicht passt. Hat jemand eine Lösung für das Problem?

Und wenn ich die richtigen Werte nun erhalten würde, könnte ich diese dann überhaupt plotten als Fx usw. Also würde er diese als solche erkennen?


Gruß Peter
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.07.2019, 12:37     Titel: Re: Daten in einzelne Variablen separieren
  Antworten mit Zitat      
Hallo Peter Weiss,

Der Arduino schickt also Zeichenketten? Dann ist fscanf sinnvoller als das Byte-weise Auslesen, oder?

Dies ist niocht sinnvoll:
Code:
data = 0;
data=char;

Statt
Code:
if mod((i-1),6)==0
        FX=data (i)
        else if mod((i-2),6)==0
            FY=data (i)
            else if mod((i-3),6)==0
...
 

Wäre dies hübscher und effizienter:
Code:

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.