%% Objektiv - Nastaveni parametru objektivu
% Martin Zeman, 2009

clear all;
close all;
clc;

%základní parametry
sirka = 720;
vyska = 480;
prah = 0.4;

% digitalizační zdroj
img_src_info    = imaqhwinfo('winvideo');
img_device_info = img_src_info.DeviceInfo(1);

% video tok a nastavení kamery
kamera = videoinput('winvideo',1);
src = getselectedsource(kamera);
src.saturation = 0;
set(kamera,'ReturnedColorSpace','grayscale');
triggerconfig(kamera, 'manual');
start(kamera);

% sériová linka
S = serial('COM1');
fopen(S);

%% Inicializace kamery
string=sprintf('lfp0000'); %ostreni na minimum (rozsah: lfp0000 ~ lfp0400)
fprintf(S, '\002x%s\003x', string);
string=sprintf('lap0150');  %clona na maximum (rozsah: lap0000 ~ lap0400)
fprintf(S, '\002x%s\003x', string);
string=sprintf('ssp00');  %zoom na minimum (rozsah: ssp00 ~ sspff)
fprintf(S, '\002x%s\003x', string);
pause(1);

%% Náhled videa z kamery
preview(kamera);
pause;
closepreview(kamera);

%% Nastavení clony
clona = 150;
string=sprintf('lap0%03d',clona);
fprintf(S, '\002x%s\003x', string);
while (S.BytesAvailable < 3)
    pause(0.1)
end
pause(0.5);
clonaa(kamera, vyska, sirka, clona, S);

%% Zoom, aby světlý objekt zabíral 40% obrázku
zoom_dec = 0;
zoom_hex = dec2hex(zoom_dec);
string=sprintf('ssp%02s',zoom_hex);
fprintf(S, '\002x%s\003x', string);
while (S.BytesAvailable < 3)
     pause(0.1)
end
pause(0.5);
img = getsnapshot(kamera);  
figure(1);imshow(img);
% zjištění množství bílé
prah2 = 0.2;
bile = 0;
for i=1:vyska
    for j=1:sirka
        if img(i,j) >= prah2*255
            bile = bile + 1;
        end        
    end
end
% zoom
mnozstvi = 0.4;
while (bile < (mnozstvi*720*480)) && (zoom_dec <= 200)
    if zoom_dec <= 200
        zoom_dec = zoom_dec+50;
        zoom_hex = dec2hex(zoom_dec);
        string=sprintf('ssp%02s',zoom_hex);
        fprintf(S, '\002x%s\003x', string);
        while (S.BytesAvailable < 3)
            pause(0.1)
        end
        pause(0.5);
        img = getsnapshot(kamera);  
        figure(1);imshow(img);
        bile = 0;
        for i=1:vyska
            for j=1:sirka
                if img(i,j) >= prah2*255
                    bile = bile + 1;
                end        
            end
        end
    end
    clonaa(kamera, vyska, sirka, clona, S);
    if mod(zoom_dec,50) == 0    % Ostreni na 8 kroku
        bila = zeros(1,401);
        leva = 0;
        prava = 400;
        obrazek(leva, kamera, S, vyska, sirka, prah);
        obrazek(prava, kamera, S, vyska, sirka, prah);
        % samotne ostreni
        leva = 0;
        prava = 400;
        ostreni(vyska, sirka, prah, leva, prava, bila, kamera, S);
    end
end

%% Obrázek1
bila = zeros(1,401);
leva = 0;
prava = 400;
obrazek(leva, kamera, S, vyska, sirka, prah);

%% Obrázek2
obrazek(prava, kamera, S, vyska, sirka, prah);

%% Ostření na 8 kroků
ostreni(vyska, sirka, prah, leva, prava, bila, kamera, S);

%% Sledování objektu zoomem a focusem
mnozstvi = 0.4;
img = getsnapshot(kamera);
figure(1);imshow(img);
pause(0.5);
bile_zoom = 0;
bile_clona = 0;
bile = 0;
prah = 0.3;
prah2 = 0.2;
for i=1:vyska
    for j=1:sirka
        if img(i,j) >= prah2*255
            bile_zoom = bile_zoom + 1;
        end        
    end
end
bile_old = bile_zoom;
for cyklus=1:60
    pause(1);
    img = getsnapshot(kamera);
    figure(1);imshow(img);
    bile_zoom = 0;
    for i=1:vyska
        for j=1:sirka
            if img(i,j) >= prah2*255
                bile_zoom = bile_zoom + 1;
            end        
        end
    end
    if bile_zoom < (bile_old - 200)
        while (bile < (mnozstvi*720*480)) && (zoom_dec <= 200)
            if zoom_dec <= 200
                zoom_dec = zoom_dec+50;
                zoom_hex = dec2hex(zoom_dec);
                string=sprintf('ssp%02s',zoom_hex);
                fprintf(S, '\002x%s\003x', string);
                while (S.BytesAvailable < 3)
                    pause(0.1)
                end
                pause(0.5);
                img = getsnapshot(kamera);  
                figure(1);imshow(img);
                bile = 0;
                for i=1:vyska
                   for j=1:sirka
                        if img(i,j) >= prah2*255
                            bile = bile + 1;
                        end        
                   end
                end
            end
            clonaa(kamera, vyska, sirka, clona, S);
            if mod(zoom_dec,50) == 0    % Ostreni na 8 kroku
                bila = zeros(1,401);
                leva = 0;
                prava = 400;
                obrazek(leva, kamera, S, vyska, sirka, prah);
                obrazek(prava, kamera, S, vyska, sirka, prah);
                % samotne ostreni
                leva = 0;
                prava = 400;
                ostreni(vyska, sirka, prah, leva, prava, bila, kamera, S);
            end
        end
    elseif bile_zoom > (bile_old + 200)
        while (bile > (mnozstvi*720*480)) && (zoom_dec >= 50)
            if zoom_dec >= 50
                zoom_dec = zoom_dec-50;
                zoom_hex = dec2hex(zoom_dec);
                string=sprintf('ssp%02s',zoom_hex);
                fprintf(S, '\002x%s\003x', string);
                while (S.BytesAvailable < 3)
                    pause(0.1)
                end
                pause(0.5);
                img = getsnapshot(kamera);  
                figure(1);imshow(img);
                bile = 0;
                for i=1:vyska
                   for j=1:sirka
                        if img(i,j) >= prah2*255
                            bile = bile + 1;
                        end        
                   end
                end
            end
            clonaa(kamera, vyska, sirka, clona, S);
            if mod(zoom_dec,50) == 0    % Ostreni na 8 kroku
                bila = zeros(1,401);
                leva = 0;
                prava = 400;
                obrazek(leva, kamera, S, vyska, sirka, prah);
                obrazek(prava, kamera, S, vyska, sirka, prah);
                % samotne ostreni
                leva = 0;
                prava = 400;
                ostreni(vyska, sirka, prah, leva, prava, bila, kamera, S);
            end
        end
    end
    img = getsnapshot(kamera);
    bile_zoom = 0;
    for i=1:vyska
        for j=1:sirka
            if img(i,j) >= prah2*255
                bile_zoom = bile_zoom + 1;
            end        
        end
    end
    bile_old = bile_zoom;
end

%% Zastavení služeb
fclose(S);
stop(kamera);
delete(kamera);
