function [Ud Uz zbytproud polarizace] = zmerstaticke(h, mez_napeti, mez_proudu, krok_napeti, pocet_vzorku)
% obstara vse potrebne ke zmereni a zobrazeni hodnot statickych parametru

global dev s vps fgen

% zakladni parametry mereni
mez_napeti_puvodni = mez_napeti;
if mez_napeti > 5
    mez_napeti = 5;  % 5 V kvuli LED, jinak muze byt az 10 nebo 12 V
end

axes(h);
cla;
xlabel('U (V) \rightarrow');
ylabel('I (mA) \rightarrow');
axis([-mez_napeti_puvodni mez_napeti_puvodni -mez_proudu*1e3 mez_proudu*1e3]);
%hold off

%try
pocet_hodnot = 0;
delitel = 1;
pruchodu = 0;
while pocet_hodnot < pocet_vzorku
    % nejdrive jeden smer do te doby, nez je zmereno 10 hodnot
    %hold off;
    [proud napeti pocet_hodnot graf1] = zmerVA(1, pocet_vzorku, mez_napeti, mez_proudu, krok_napeti / delitel, dev);
    delitel = delitel * 2;
    % ochrana proti zacykleni (max. 5 pruchodu)
    pruchodu = pruchodu + 1;
	if pruchodu > 4
        pocet_hodnot = 10;
	end
end

%axes(handles.graf_va);
plot(graf1(:, 1), graf1(:, 2).*1000, 'x-');
xlabel('U (V) \rightarrow');
ylabel('I (mA) \rightarrow');
axis([-mez_napeti_puvodni mez_napeti_puvodni -mez_proudu*1e3 mez_proudu*1e3]);
hold on;

Ud = NaN;
Uz = NaN;
zener = NaN;
polarizace = NaN;
zbytproud = NaN;
%nezapojena = false;

%[proud mez_proudu]
if proud > 0.002
    %disp('propustny smer nebo Zenerka zaverny smer');
    pocet_hodnot = 0;
    delitel = 1;
    pruchodu = 0;
    while pocet_hodnot < pocet_vzorku
        [proud napeti pocet_hodnot graf2] = zmerVA(2, pocet_vzorku, mez_napeti, mez_proudu, krok_napeti / delitel, dev);
        delitel = delitel * 2;
        % ochrana proti zacykleni (max. 5 pruchodu)
        pruchodu = pruchodu + 1;
        if pruchodu > 4
            pocet_hodnot = 10;
        end
    end
    % zbytkovy proud urcite nebude mit takovou hodnotu
    if proud < -0.002
        % nutno urcit, kde je prahove a kde Zenerovo napeti
        %disp('Zenerka zaverny nebo propustny smer');
        if napeti < -1
            polarizace = 1;
        else
            polarizace = 0;
        end
        zener = 1;
    else
        %disp('propustny smer');
        polarizace = 1;
        zener = 0;
    end
else
    % tady je rozhodnuti jasne jeste pred merenim druhe casti
    %disp('zaverny smer');
    zener = 0;
    polarizace = 0;
    
    pocet_hodnot = 0;
    delitel = 1;
    pruchodu = 0;
    while pocet_hodnot < pocet_vzorku
        [proud napeti pocet_hodnot graf2] = zmerVA(2, pocet_vzorku, mez_napeti, mez_proudu, krok_napeti / delitel, dev);
        delitel = delitel * 2;
        % ochrana proti zacykleni (max. 5 pruchody)
        pruchodu = pruchodu + 1;
        if pruchodu > 4
            pocet_hodnot = 10;
        end
    end
    
    % detekce nezapojene soucastky
    if abs(proud) < 1e-3
        % nezapojena soucastka, je vraceno Ud = NaN
        return;
    end
end

plot(graf2(:, 1), graf2(:, 2).*1000, 'x-r');
% orientacni urceni Ud podle namerenych dat
if polarizace == 1
    [Ud] = zjisti_prahove_napeti(graf1);
else
    [Ud] = zjisti_prahove_napeti(graf2);
end

% pokud se nejedna o LED, tak lze merit do vyssiho napeti
% (LED zvladne max. 5 V -- jinak hrozi pruraz v zaverne casti)
if Ud < 1.0
    if polarizace == 1
        if max(abs(graf2(:, 2))) < mez_proudu
            % vyssi hodnoty pro zavernou cast promerit pri nedosazeni meze proudu
            mez_napeti = mez_napeti_puvodni;
            pocet_hodnot = 0;
            delitel = 1;
            pruchodu = 0;
            while pocet_hodnot < 10
                [proud napeti pocet_hodnot graf2] = zmerVA(2, pocet_vzorku, mez_napeti, mez_proudu, krok_napeti / delitel, dev);
                delitel = delitel * 2;
                % ochrana proti zacykleni (max. 5 pruchody)
                pruchodu = pruchodu + 1;
                if pruchodu > 4
                    pocet_hodnot = 10;
                end
            end

            % jedna se o Zenerovu diodu
            if proud < -0.002
                zener = 1;
            end
        end
            
        % propustnou cast nutno premerit znovu pouze v pripade,
        % kdy se nedosahlo meze proudu
        if max(graf1) < mez_proudu
            pocet_hodnot = 0;
            delitel = 1;
            pruchodu = 0;
            while pocet_hodnot < 10
                [proud napeti pocet_hodnot graf1] = zmerVA(1, pocet_vzorku, mez_napeti, mez_proudu, krok_napeti / delitel, dev);
                delitel = delitel * 2;
                % ochrana proti zacykleni (max. 5 pruchody)
                pruchodu = pruchodu + 1;
                if pruchodu > 4
                    pocet_hodnot = 10;
                end
            end
            [Ud] = zjisti_prahove_napeti(graf1);
        else
            %disp('propustna cast nemerena');
        end
    else
        if max(graf1(:, 2)) < mez_proudu
            % vyssi hodnoty pro zavernou cast nutno promerit vzdy
            mez_napeti = 10;
            pocet_hodnot = 0;
            delitel = 1;
            pruchodu = 0;
            while pocet_hodnot < 10
                [proud napeti pocet_hodnot graf1] = zmerVA(1, pocet_vzorku, mez_napeti, mez_proudu, krok_napeti / delitel, dev);
                delitel = delitel * 2;
                % ochrana proti zacykleni (max. 5 pruchody)
                pruchodu = pruchodu + 1;
                if pruchodu > 4
                    pocet_hodnot = 10;
                end
            end

            % jedna se o Zenerovu diodu
            if proud > 0.002
                zener = 1;
            end
        end
        
        % propustnou cast nutno premerit znovu pouze v pripade,
        % kdy se nedosahlo meze proudu
        if max(abs(graf2)) < mez_proudu
            pocet_hodnot = 0;
            delitel = 1;
            pruchodu = 0;
            while pocet_hodnot < 10
                [proud napeti pocet_hodnot graf2] = zmerVA(2, pocet_vzorku, mez_napeti, mez_proudu, krok_napeti / delitel, dev);
                delitel = delitel * 2;
                % ochrana proti zacykleni (max. 5 pruchody)
                pruchodu = pruchodu + 1;
                if pruchodu > 4
                    pocet_hodnot = 10;
                end
            end
            % opetovne urceni Ud z novych dat
            [Ud] = zjisti_prahove_napeti(graf2);
        else
            %disp('propustna cast nemerena');
        end
    end
    
    hold off
    plot(graf1(:, 1), graf1(:, 2).*1000, 'x-b');
    hold on;
    plot(graf2(:, 1), graf2(:, 2).*1000, 'x-r');
    axis([-mez_napeti_puvodni mez_napeti_puvodni -mez_proudu*1e3 mez_proudu*1e3]);
    xlabel('U (V) \rightarrow');
    ylabel('I (mA) \rightarrow');
end

if polarizace == 0
    % obraceni grafu VA charakteristiky tak, aby byl prehlednejsi
    h = gca;
    cara = get(h, 'Children');
    cara1 = cara(1); cara2 = cara(2);
    set(cara1, 'XData', -get(cara1, 'XData'));
    set(cara1, 'YData', -get(cara1, 'YData'));
    set(cara2, 'XData', -get(cara2, 'XData'));
    set(cara2, 'YData', -get(cara2, 'YData'));
end

% mereni zaverneho proudu (nejcitlivejsi vstupy a napeti 10 V nebo 5 u LED)
if zener == 1
    if polarizace == 1
        [Uz] = zjisti_zenerovo_napeti(graf2);
    else
        [Uz] = zjisti_zenerovo_napeti(graf1);
    end
else
    % nutno merit na zaverne casti
    pocet_vzorku = 100; % aspon castecne omezeni sumu
    if polarizace == 1
        [zbytproud stdodchylka] = zmerZbytProud(2, pocet_vzorku, Ud);
    else
        [zbytproud stdodchylka] = zmerZbytProud(1, pocet_vzorku, Ud);
    end
    zbytproud = zaokrouhleni(zbytproud, 2);
end


%{
set(handles.Uprahove, 'String', num2str(Ud));
if isnan(Uz)
    set(handles.Uzener, 'String', '-');
else
    set(handles.Uzener, 'String', num2str(Uz));
end
if isnan(zbytproud)
    set(handles.Izbyt, 'String', '-');
else
    set(handles.Izbyt, 'String', num2str(round(zbytproud * 1e9)));
end
if polarizace == 1
    set(handles.pol, 'String', 'propustn�');
else
    set(handles.pol, 'String', 'z�v�rn�');
end
%}