function varargout = Auswertung2704(varargin)
% AUSWERTUNG2704 M-file for Auswertung2704.fig
%      AUSWERTUNG2704, by itself, creates a new AUSWERTUNG2704 or raises the existing
%      singleton*.
%
%      H = AUSWERTUNG2704 returns the handle to a new AUSWERTUNG2704 or the handle to
%      the existing singleton*.
%
%      AUSWERTUNG2704('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in AUSWERTUNG2704.M with the given input arguments.
%
%      AUSWERTUNG2704('Property','Value',...) creates a new AUSWERTUNG2704 or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Auswertung2704_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Auswertung2704_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Auswertung2704

% Last Modified by GUIDE v2.5 27-Apr-2008 11:21:57

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Auswertung2704_OpeningFcn, ...
                   'gui_OutputFcn',  @Auswertung2704_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before Auswertung2704 is made visible.
function Auswertung2704_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Auswertung2704 (see VARARGIN)

%global t Fped Sped pbrems dat file path vped tmax aped vpedV apedV SpedV i j l A1 Spedmax Fpedmax pbremsV c Fpedmin Spedmin 

% Choose default command line output for Auswertung2704
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Auswertung2704 wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Auswertung2704_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)




% --- Executes on button press in pushbutton_laden.
function pushbutton_laden_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_laden (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

[file,path] = uigetfile('*.ASC','Auswahl der Messung','MultiSelect', 'off');
        dat = load(file);
        disp(['Dateinname lautet: ',num2str(file)]);
        h = msgbox(['Die Berechnung der Daten kann einige Minuten in Anspruch nehmen.','','Bitte warten Sie auf die Ausgabe der Maximalwerte in der nächsten Messagebox.'],'Berechnung läuft','warn');
t=dat(:,1);t=t';
Fped=dat(:,2);Fped=Fped';                   %Pedalkraft
Sped=dat(:,3);Sped=Sped';                   %Pedalweg
pbrems=dat(:,8);pbrems=pbrems';             %Bremsdurck
pspeicher=dat(:,5);pspeicher=pspeicher';    %Speicherdruck
pzyl=dat(:,6);pzyl=pzyl';    %pzyl1
% Ermittlung der Pedalbetätigungsgeschwindigkeit als Ableitung des Pedalwegs über der Zeit
vped(1)=0;                                   % Startwert der Pedalgeschwindigkeit null gesetzt, um Pedalwegoffset zu berücksichtigen
tmax=find(t==max(t));                       % Bestimmung der Zahl der Messwerte (beim wievielten Wert ist die Zeit maximal)
i=1;                                        % Variable für die Schleifendurchgänge
SpedV= smooth(Sped,0.15,'loess');            % Interpolation des Pedalwegsverlaufs als Filter
for i=1:(tmax-1)                            % Schleife von Anfang der Messwerte bis zum Vorletzten, da in der Schleife immer der nächste abgefregt wird
    vped(i+1)=(SpedV(i+1)-SpedV(i))/(t(i+1)-t(i));   % Geschwindigkeit ist Delta Weg / Delta Zeit; erster Wert bei zweiter Stelle, da sonst Differenzbildung nicht möglich
    i=i+1;                                   % Schleifenvariable für nächsten Durchgang
end

aped(1)=0;                                   % Schleife für die Pedalbeschleunigung analog zur Geschwindigkeit
j=1;
vpedV= smooth(vped,0.1,'loess');            % Filter der Geschwindigkeitswerte, sonst unsinniger Verlauf
vpedmax=max(vpedV);
for j=1:(tmax-1)
    aped(j+1)=(vpedV(j+1)-vpedV(j))/(t(j+1)-t(j));
    j=j+1;
end
apedV= smooth(aped,0.1,'loess');            % Variable zur Darstellung des geglätteten Beschleunigungsverlaufs, da sonst das wesentliche nicht erkennbar ist

% Ermittlung der Pedalkraftverstärkung
c(1)=0;                                   % Startwert der Pedalgeschwindigkeit null gesetzt, um Pedalwegoffset zu berücksichtigen
l=1;                                        % Variable für die Schleifendurchgänge
FpedV= smooth(Fped,0.15,'loess');            % Interpolation des Pedalwegsverlaufs als Filter
pbremsV= smooth(pbrems,0.15,'loess');
for l=1:(tmax-1)                            % Schleife von Anfang der Messwerte bis zum Vorletzten, da in der Schleife immer der nächste abgefregt wird
    c(l+1)=(pbremsV(l+1)-pbrems(l))/(FpedV(l+1)-FpedV(l));   % Geschwindigkeit ist Delta Weg / Delta Zeit; erster Wert bei zweiter Stelle, da sonst Differenzbildung nicht möglich
    l=l+1;                                   % Schleifenvariable für nächsten Durchgang
end


%--------------------------------------------------------------------------
%                       Offsetkorrekturen
%--------------------------------------------------------------------------

Fpedmin=min(Fped);                                                 % Finde Minimum (Offset) und Maximum der Pedalkraft
disp(['Offset der Pedalkraft: ',num2str(Fpedmin),' N']);
disp('');
Fped=Fped-Fpedmin;
Fpedmax=max(Fped);                                                 % (Offset Fehler Bremskraft korrigieren)
%-------------------
Spedmin=min(Sped);                                                 % Offsetwert des Pedalwegs
disp(['Offset des Pedalwegs: ',num2str(Spedmin),' mm']);
disp('');
Sped=Sped-Spedmin;
Spedmax=max(Sped);                                                 % (Offset Fehler Pedalweg korrigieren)
disp('');
A1 = trapz(Sped,Fped);
disp(['Der Flächeninhalt der Kraft-Pedalweg-Hysterese beträgt: ',num2str(A1),' Nmm'])
disp('')
h = msgbox(['Maximale Pedalkraft: ',num2str(Fpedmax),' N','    maximaler Pedalweg: ',num2str(Spedmax),' mm    Fläche der Hysterese: ',num2str(A1),' mm    maximale Pedalbetaetigungsgeschwindigkeit: ',num2str(vpedmax),' mm/s'],'Charakteristische Werte der Messung:','help');
assignin('base', 't',t);
assignin('base', 'Sped',Sped);
assignin('base', 'Fped',Fped);
assignin('base', 'file',file);
assignin('base', 'pbrems',pbrems);
assignin('base', 'pbremsV',pbremsV);
assignin('base', 'c',c);
assignin('base', 'vpedV',vpedV);
assignin('base', 'apedV',apedV);


% --- Executes on button press in pushbutton_alle.
function pushbutton_alle_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_alle (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%--------------------------------------------------------------------------
%Darstellung Diagramm
%--------------------------------------------------------------------------
%t=get(t);
t = evalin('base', 't');
%Sped=get(Sped);
Sped = evalin('base', 'Sped');
%Fped=get(Fped);
Fped = evalin('base', 'Fped');
%file=get(file);
file = evalin('base', 'file');
%pbremsV=get(pbremsV);
pbrems = evalin('base', 'pbrems');
pbremsV = evalin('base', 'pbremsV');
%c=get(c);
c = evalin('base', 'c');
%vpedV=get(vpedV);
vpedV = evalin('base', 'vpedV');
%apedV=get(apedV);
apedV = evalin('base', 'apedV');
subplot(2,2,2);
plot(t,pbrems,t,Fped);grid on                 
title(['Kraft-Bremsdruck-Zeit-Diagramm']); % (Diagrammtitel)
xlabel('Zeit in s');                                     % (Name x-Achse)
ylabel('Bremsdruck in bar / Kraft in N');                             % (Name y-Achse)
%------------------------------------------------------------------------
%Interpolierte Kurve:           Hin und Rückweg des Pedals müssen nun als
                               %seperate Daten behandelt werden, da sonst die Hysterese der Kurve
                               %"weginterpoliert" wird und nur eine Kurve
                               %zwischen den Ästen entsteht.

trenn=find(Sped==max(Sped));
Spedauf=Sped(1:trenn);        %Pedalwegvektor der Daten muss auf die gleiche Länge gebracht werden
Spedab=Sped(trenn:end);         %wie der Kraftvektor, um sie plotten zu können, aber Spedmax nicht immer bei Fpedmax!

Fpedauf=Fped(1:trenn);        %aufsteigender Ast der Hysteresekurve vom Beginn bis zum Maximum
Fpedab=Fped(trenn:end);         %absteigender Ast der Hysteresekurve vom Maximum bis zum Beginn hinab

Fpedglattauf = smooth(Spedauf,Fpedauf,0.03,'loess'); %1.Ast der Hysterese (x,y,span10%,'interpolationsmethode')
Fpedglattab = smooth(Spedab,Fpedab,0.03,'loess');    %2.Ast der Hysterese (x,y,span10%,'interpolationsmethode')
subplot(2,2,1);                                      % 3. der 4 Diagramme im Figure1-Fenster
plot(Spedauf,Fpedauf,'r.',Spedauf,Fpedglattauf,'k-',Spedab,Fpedab,'r.',Spedab,Fpedglattab,'k-');       %Originaldaten als Punkte und Interpolierte als Kurve ausgeben
set(gca,'YLim',[0 750]);                                    %Massstab Y-Achse
legend('Messdaten','Geglätteter Verlauf',2);
xlabel('Weg in mm')                                 % (Name x-Achse)
ylabel('Pedalkraft in N')                           % (Name y-Achse)
title(['Pedalcharakteristik (',num2str(file),')'])
%------------------------------------------------------------------------             

pbremsV10=pbremsV*10;
subplot(2,2,2); plot(t,pbremsV10,t,Fped);grid on                 
title(['Kraft-Bremsdruck-Zeit-Diagramm']); % (Diagrammtitel)
xlabel('Zeit in s');                                     % (Name x-Achse)
ylabel('Bremsdruck in cbar / Kraft in N');                             % (Name y-Achse)
%------------------------------------------------------------------------
subplot(2,2,3);

plot(t,c);grid on;             % oben links
title('Bremskraftverstärkungs-Zeit-Diagramm');   % (Diagrammtitel)
xlabel('Zeit in s');                              % (Name x-Achse)
ylabel('Verstärkung relativ');                           % (Name y-Achse)
%------------------------------------------------------------------------
subplot(2,2,4);                                         % unten rechts

plot(t,Sped,t,vpedV,t,apedV);
grid on;
set(gca,'YLim',[-150 120]);
title(['Pedalweg -geschwinigkeit & -beschleunigung']);                            % (Diagrammtitel)
xlabel('Zeit [s]');                                                         % (Name x-Achse)
ylabel('s [mm], v [mm/s], a [mm/s*s]');  % (Name y-Achse)
legend('s = Pedalweg','v = Pedalgeschwindigkeit','a = Pedalbeschleunigung');


%--------------------------------------------------------------------------


% --- Executes on selection change in popupmenu_einzeln.
function popupmenu_einzeln_Callback(source, eventdata, handles)
% hObject    handle to popupmenu_einzeln (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
      % Determine the selected data set.
      str = get(source, 'String');
      val = get(source,'Value');
      % Set auswahl to the selected data set.
      switch str{val};
      case 'Kraft-Weg-Hysterese' % User selects Peaks.
         auswahl = 'FS';
         assignin('base', 'auswahl',auswahl);
      case 'Weg-Zeit etc' % User selects Membrane.
         auswahl = 'St';
      case 'Kraft-Druck-Zeit' % User selects Sinc.
         auswahl = 'Fpt';
      case 'Verstärkung-Zeit' % User selects Sinc.
         auswahl = 'ct';
      end
      assignin('base', 'auswahl',auswahl);
% Hints: contents = get(hObject,'String') returns popupmenu_einzeln contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu_einzeln


% --- Executes during object creation, after setting all properties.
function popupmenu_einzeln_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu_einzeln (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



% --- Executes on button press in pushbutton_einzeln.
function pushbutton_einzeln_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_einzeln (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
auswahl = evalin('base', 'auswahl');
switch auswahl
case 'FS'
    subplot (1,1,1);
    movegui ('northwest');
t = evalin('base', 't');
Sped = evalin('base', 'Sped');
Fped = evalin('base', 'Fped');
file = evalin('base', 'file');
pbrems = evalin('base', 'pbrems');
pbremsV = evalin('base', 'pbremsV');
c = evalin('base', 'c');
vpedV = evalin('base', 'vpedV');
apedV = evalin('base', 'apedV');

plot(t,pbrems,t,Fped);grid on                 
title(['Kraft-Bremsdruck-Zeit-Diagramm']); % (Diagrammtitel)
xlabel('Zeit in s');                                     % (Name x-Achse)
ylabel('Bremsdruck in bar / Kraft in N');                             % (Name y-Achse)
trenn=find(Sped==max(Sped));
Spedauf=Sped(1:trenn);        %Pedalwegvektor der Daten muss auf die gleiche Länge gebracht werden
Spedab=Sped(trenn:end);         %wie der Kraftvektor, um sie plotten zu können, aber Spedmax nicht immer bei Fpedmax!

Fpedauf=Fped(1:trenn);        %aufsteigender Ast der Hysteresekurve vom Beginn bis zum Maximum
Fpedab=Fped(trenn:end);         %absteigender Ast der Hysteresekurve vom Maximum bis zum Beginn hinab

Fpedglattauf = smooth(Spedauf,Fpedauf,0.03,'loess'); %1.Ast der Hysterese (x,y,span10%,'interpolationsmethode')
Fpedglattab = smooth(Spedab,Fpedab,0.03,'loess');    %2.Ast der Hysterese (x,y,span10%,'interpolationsmethode')
plot(Spedauf,Fpedauf,'r.',Spedauf,Fpedglattauf,'k-',Spedab,Fpedab,'r.',Spedab,Fpedglattab,'k-');       %Originaldaten als Punkte und Interpolierte als Kurve ausgeben
set(gca,'YLim',[0 750]);                                    %Massstab Y-Achse
legend('Messdaten','Geglätteter Verlauf',2);
xlabel('Weg in mm')                                 % (Name x-Achse)
ylabel('Pedalkraft in N')                           % (Name y-Achse)
title(['Pedalcharakteristik (',num2str(file),')'])

case 'St'
    subplot (1,1,1);
    t = evalin('base', 't');
    Sped = evalin('base', 'Sped');
    Fped = evalin('base', 'Fped');
    file = evalin('base', 'file');
    pbrems = evalin('base', 'pbrems');
    pbremsV = evalin('base', 'pbremsV');
    c = evalin('base', 'c');
    vpedV = evalin('base', 'vpedV');
    apedV = evalin('base', 'apedV');
    
    plot(t,Sped,t,vpedV,t,apedV);
    grid on;
    set(gca,'YLim',[-150 120]);
    title(['Pedalweg -geschwinigkeit & -beschleunigung']);                      % (Diagrammtitel)
    xlabel('Zeit [s]');                                                         % (Name x-Achse)
    ylabel('s [mm], v [mm/s], a [mm/s*s]');                                     % (Name y-Achse)
    legend('s = Pedalweg','v = Pedalgeschwindigkeit','a = Pedalbeschleunigung');


case 'Fpt'
    subplot (1,1,1);
    t = evalin('base', 't');
    Sped = evalin('base', 'Sped');
    Fped = evalin('base', 'Fped');
    file = evalin('base', 'file');
    pbrems = evalin('base', 'pbrems');
    pbremsV = evalin('base', 'pbremsV');
    c = evalin('base', 'c');
    vpedV = evalin('base', 'vpedV');
    apedV = evalin('base', 'apedV');
    
    pbremsV10=pbremsV*10;
    plot(t,pbremsV10,t,Fped);grid on                 
    title(['Kraft-Bremsdruck-Zeit-Diagramm']); % (Diagrammtitel)
    xlabel('Zeit in s');                                     % (Name x-Achse)
    ylabel('Bremsdruck in cbar / Kraft in N');                             % (Name y-Achse)

case 'ct'
    subplot (1,1,1);
    t = evalin('base', 't');
    Sped = evalin('base', 'Sped');
    Fped = evalin('base', 'Fped');
    file = evalin('base', 'file');
    pbrems = evalin('base', 'pbrems');
    pbremsV = evalin('base', 'pbremsV');
    c = evalin('base', 'c');
    vpedV = evalin('base', 'vpedV');
    apedV = evalin('base', 'apedV');
    
    plot(t,c);grid on;             % oben links
    title('Bremskraftverstärkungs-Zeit-Diagramm');   % (Diagrammtitel)
    xlabel('Zeit in s');                              % (Name x-Achse)
    ylabel('Verstärkung relativ');                           % (Name y-Achse)

otherwise
    MsgBox('Bitte Diagrammtyp auswählen!','Eror');    
end


% --- Executes on button press in pushbutton_save.
function pushbutton_save_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_save (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% als JPG abspeichern
file = evalin('base','file');
auswahl = evalin('base','auswahl');
start_path = 'C:\';
speicherpfad = uigetdir(start_path,['Speicherpfad waehlen fuer ',num2str(file),'-',num2str(auswahl),'.bmp']);

saveas(gcf,[num2str(speicherpfad),'\',num2str(file),'-',num2str(auswahl),'.bmp']);
MsgBox(['Die Grafik wurde erfolgreich gespeichert. Sie liegt im Verzeichnis ',num2str(speicherpfad),' und trägt den Namen ',num2str(file),'-',num2str(auswahl),'.bmp'],'Bestaetigung');


