resitelne = 1;				% poèáteèní hodnota potøebná kvùli urèení øešitelnosti s ohledem na vùli
S1 = get(S1);               % získání hodnoty z resolveru S1
S2 = get(S2);               % získání hodnoty z resolveru S2
S3 = get(S3);               % získání hodnoty z resolveru S3
prompt = 'Zadejte vùli S1-S2 v bitech mezi hlavní høídelí S1 a S2';
vule_bit13 = input(prompt);   % uživatelský input zmìøené vùle
prompt = 'Zadejte vùli S1-S2 v bitech mezi hlavní høídelí S1 a S2';
vule_bit12 = input(prompt);   % uživatelský input zmìøené vùle

vule13 = vule_bit13*360/nbits3*256;   
vule12 = vule_bit12*360/nbits2*16;   

trans_ratio13 = 256;         % pøevodní pomìr mezi hlavní høídelí S1 a høídelí S3
trans_ratio12 = 16;          % pøevodní pomìr mezi hlavní høídelí S1 a høídelí S2

nbits1 = 1048576;           % poèet hodnot, kterých nabývá výstup S1
nbits2 = 4096               % poèet hodnot, kterých nabývá výstup S2
nbits3 = 4096               % poèet hodnot, kterých nabývá výstup S3
if(vule13>=180)				% zkouška, zda vùle nepøesahuje pøijatelnou hodnotu, jak bylo diskutováno výše, kontroluji pouze vùli mezi S1 a S3
    resitelne = 0;
end
n_turn = floor(S2/nbits3*16);          % odhad poètu otoèení S2 bez uvažování vùle
n_turn16 = floor(S3/nbits3*16);          % odhad poètu otoèení S3 bez uvažování vùle
bit_per_rev2 = floor(nbits2/trans_ratio12);    % kolik bitù na S2 odpovídá otoèení hlavní høídele o 360 stupòù
bit_per_rev3 = floor(nbits3/trans_ratio13);    % kolik bitù na S3 odpovídá otoèení hlavní høídele o 360 stupòù
S1_deg = S1/nbits1*360;         % úhel na S1 pøepoèítán z bitù
S2_deg = S2/nbits2*360;         % úhel na S2 pøepoèítán z bitù
S3_deg = S3/nbits3*360;         % úhel na S3 pøepoèítán z bitù
% následující funkce pøihlíží k hodnotì vùle S1-S3 pro pøípad velikosti vùle dostateènì nízké pro øešitelnost bez dalších opatøení
if((mod(S3,bit_per_rev3) <= vule_bit13) & resitelne = 1)
    % pøípad, kdy S3 spadá do oblasti spodních hodnot bitù z oblasti
    % odpovídající hodnotì n_turn16, pøièemž pásmo možné vùle zasahuje do
    % oblasti n_turn16 - 1
    if(S2_deg <= vule12)
        % vùle nezmìnila hodnotu funkce n_turn
        n_turn16 = n_turn16;
    elseif(S2_deg >= (360 - vule12))
        % vùle zvýšila hodnotu funkce n_turn
        n_turn16 = n_turn16 - 1;
    else 
        % chyba, vùle je pravdìpodobnì vyšší než zadaná hodnota
        
    % ještì je nutné zkontrolovat, zda vùle mezi S1 S2 nezmìnila výsledek
    if((mod(S2,bit_per_rev3) <= vule_bit12) & resitelne = 1)
        if(S1_deg <= vule)
            % vùle mezi S1 a S2 snížila výsledek
            n_turn16 = n_turn16 + 1;
        elseif(S1_deg >= (360 - vule))
            % vùle mezi S1 a S2 neovlivnila výsledek
            n_turn16 = n_turn16;
        else 
            % chyba, vùle je pravdìpodobnì vyšší než zadaná hodnota
        end
    end
    
elseif((mod(S3,bit_per_rev3) >= (15 - vule_bit13))  & resitelne = 1)
    % pracovní poznámka: 16- nebo 15- ?
    % pøípad, kdy S3 spadá do oblasti horních hodnot bitù 
    % z oblasti odpovídající hodnotì n_turn16, pøièemž pásmo vùle zasahuje do
    % oblasti n_turn16 + 1
        if(S2_deg >= (360-vule12))
        % vùle nezmìnila hodnotu funkce n_turn
        n_turn16 = n_turn16;
    elseif(S2_deg <= vule12)
        % vùle snížila hodnotu funkce n_turn
        n_turn16 = n_turn16 + 1;
    else 
        % chyba, vùle je pravdìpodobnì vyšší než zadaná hodnota
        end
        
        % ještì je nutné zkontrolovat, zda vùle mezi S1 S2 nezmìnila výsledek
    if((mod(S2,bit_per_rev3) >= (15 - vule_bit12))  & resitelne = 1)
        if(S1_deg >= (360-vule))
            % vùle mezi S1 a S2 zvýšila výsledek
            n_turn = n_turn - 1;
        elseif(S1_deg <= vule)
            % vùle mezi S1 a S2 neovlivnila výsledek
            n_turn = n_turn;
        else 
        % chyba, vùle je pravdìpodobnì vyšší než zadaná hodnota
        end

    end

elseif(resitelne = 0)
    h = msgbox('Zadaná vùle je pøíliš vysoká', 'Chyba');    
end

% následující funkce pøihlíží k hodnotì vùle S1-S2 pro pøípad velikosti vùle dostateènì nízké pro øešitelnost bez dalších opatøení
if((mod(S2,bit_per_rev3) <= vule_bit12) & resitelne = 1)
    % pøípad, kdy S2 spadá do oblasti spodních hodnot bitù z oblasti
    % odpovídající hodnotì n_turn, pøièemž pásmo možné vùle zasahuje do
    % oblasti n_turn - 1
    if(S1_deg <= vule)
        % vùle nezmìnila hodnotu funkce n_turn
        n_turn = n_turn;
    elseif(S1_deg >= (360 - vule))
        % vùle zvýšila hodnotu funkce n_turn
        n_turn = n_turn - 1;
    else 
        % chyba, vùle je pravdìpodobnì vyšší než zadaná hodnota
    end
elseif((mod(S2,bit_per_rev3) >= (15 - vule_bit12))  & resitelne = 1)
    % pracovní poznámka: 16- nebo 15- ?
    % pøípad, kdy S2 spadá do oblasti horních hodnot bitù 
    % z oblasti odpovídající hodnotì n_turn, pøièemž pásmo vùle zasahuje do
    % oblasti n_turn + 1
        if(S1_deg >= (360-vule))
        % vùle nezmìnila hodnotu funkce n_turn
        n_turn = n_turn;
    elseif(S1_deg <= vule)
        % vùle snížila hodnotu funkce n_turn
        n_turn = n_turn + 1;
    else 
        % chyba, vùle je pravdìpodobnì vyšší než zadaná hodnota
        end
elseif(resitelne = 0)
    h = msgbox('Zadaná vùle je pøíliš vysoká', 'Chyba');    
end

% absolutní úhel tedy odpovídá ve stupních
abs_uhel = S1_deg + n_turn*360 + n_turn16*360*16;