function protokol()
%FCE Summary of this function goes here
%   Detailed explanation goes here
buffer=[];

prikazy=[
    struct('nazev','napis','fce',@napis,'popis','něco napíše') 
    struct('nazev','tram','fce',@()disp('tamta'),'popis','něco napíše') 
    struct('nazev','konec','fce','quit=0;','popis','ukončí se fce') 
    struct('nazev','perioda','fce',@nastav_per,'popis','nastaví periodu') 
    struct('nazev','pauza','fce','pauza=~pauza','popis','nastavena pauza')
    struct('nazev','bod','fce',@bod,'popis','posila body')
    struct('nazev','pwm','fce',@pwm,'popis','nastavi PWM')
];
%[hnahled guipokyn]=nahled('pokyn',@pokyn);     %otevre nahled a uloží jeho handle
 ovladac('pokyn',@pwm,'nazev','Řízení motoru',... 
        'limity',[0 255 0 -255],'nazevhodnoty','pwm');
   
%% funkce gpokyn, prida do volani handel gui%%%%%%%%%%%%%%%%%%%%
    function gpokyn(gnazev,gdata)
        if exist('gnazev','var')
            if exist('gdata','var')
            guipokyn(gnazev,hnahled,gdata);
            else
                guipokyn(gnazev,hnahled)
            end
        end
    end
%% hlavni smyčka
quit=0; %program bezi dokud je quit=0;
%keyboard
%atodesli('help;')
a=uint8(zeros(1,1e7));
poz=200;
prijem;
tic;
atodesli('reset;');
atodesli('PWM_InA_B;');
%atodesli('stop;');
atodesli('povolit;');
atodesli('vzorkovani 5;');
while ~quit
pause(0.5);
% clear tmpbuffer
% tmpbuffer=prijem;
% buffer(end+1:end+length(tmpbuffer))=tmpbuffer;
% zpracuj;
% tmpa=prijem(10000);
% a(poz+1:poz+length(tmpa))=tmpa;
% poz=poz+length(tmpa);
% plot([poz/2-100+1:poz/2],typecast(uint8(a(poz-200+1:poz)),'uint16'))
% axis([poz/2-100+1 poz/2+10 -5 260]);
%keyboard
%if toc>10, quit=1;end
end
%keyboard
%atodesli('stop;');
atodesli('zakazat;');

    function zpracuj()
index=find(buffer==10);%find(buffer==';');

for i=index
    char(buffer(1:i))
end
buffer=buffer(i+1:end);
%if length(buffer)>20, buffer=buffer(20:end);end
        %keyboard
    end
%% funkce pokyn vyrizuje prichozi prikazy
function pokyn(nazev,hodn)
  % keyboard
   proveden=0;
    for np=1:length(prikazy)
               if  strcmp(nazev,prikazy(np).nazev)
                    proveden=1;
                   try
                    if strcmp(class(prikazy(np).fce),'function_handle')
                        if exist('hodn','var')
                           prikazy(np).fce(hodn);
                        else prikazy(np).fce();
                        end
                        
                    elseif ischar(prikazy(np).fce)
                    eval(prikazy(np).fce);
                    end
                    disp(prikazy(np).popis);
                  catch chybu
                  disp(chybu.message)
                  end
         end 
   end  
    if ~proveden       
disp(['protokoligor/Neznam prikaz:' nazev]);
    end
 

end
%% ovladaci funkce tohoto protokolu:
function napis(text)
    disp(text)
    keyboard
end

function t(str)
       fprintf(s,str)
disp(str);
end
    function dokoncena_cara()
   %keyboard
        gpokyn('dokoncenacara');
    end

    function pwm(a,b,c)
        %keyboard
        cass=toc;
        if strcmp(a,'uloz')
            quit=1;
        else
            if cass>0.02
            atodesli(sprintf('pwm %i;',round(c)));
            tic;
            end
        end
        %round(c)
        
    end
%% zavreni protokolu
pause(1)
unloadlibrary lib
end