% Meno :
% Priezvisko :
% Skupina :  
% 
% 
function varargout = MatSerArd(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @MatSerArd_OpeningFcn, ...
                   'gui_OutputFcn',  @MatSerArd_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

function MatSerArd_OpeningFcn(hObject, eventdata, handles, varargin)
% Zobrazenie fotografie arduina
I = imread('ard.png');
axes(handles.axes1)
imshow(I);

% Odstrani vsetky pripojene zariadenia / dobre vtedy ak si nedopatrenim
% zmazeme handle k zariadenie a to sme predtym korektne neodpojili 
instrreset

% Vyhladanie com portov 
% Toto frèí... na windowse urèite a na Apple si istý niesom ...
% Ešte by možno bolo na mieste ošetri� pomocou try cath pre rôzne
% nepredvídané udalosti, kedy sa nenájde žiaden com port.
[~,res]=system('mode');
ix=strfind(res,'COM');
COM_dev = lower(regexp(res,'COM\d+','match')');
set(handles.com,'string',COM_dev);


handles.output = hObject;
guidata(hObject, handles);

function varargout = MatSerArd_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;

%  OBSLUHA TLACIDLA ZISTENIA HODNOT NA PINOCH
function zistit_Callback(hObject, eventdata, handles)

if isfield(handles,'s1') 
 fprintf(handles.s1,'A');
 ODPOVED  = fscanf(handles.s1);
 ODPOVEDE = strsplit(ODPOVED,',');
 
 D = ODPOVEDE(2:13);

 
 for i=2:13
     eval(sprintf('set(handles.D%d,''String'',D(i-1))',i));
 end
 
  % TU IMPLEMENTUJTE NACITANIE HODNOT PRE ANALOG VSTUP inspirujte 
  % sa pritom for-om pre digitalne piny
  % A = ?;
  % 

end

% TU BUDE OBSLUHA TLACIDLA PRE ZAPIS HODNOT NA DIGITALNE PINY
% Ve¾mi ve¾a tam je spravené, už len doladi� pre ostatné piny...
function zapis_Callback(hObject, eventdata, handles)
num = ['02';'03';'04';'05';'06';'07';'08';'09';...
       '10';'11';'12';'13'];

    if isfield(handles,'s1') 
        str = sprintf('W%s%c\n',num(12,:),get(handles.CD13,'String'));
        fprintf(handles.s1,str);
        ODPOVED  = fscanf(handles.s1);
        pause(0.1);
        if ~strcmp(ODPOVED(1:2),'OK')
            msgbox('ERROR','error','error');
            return
        end
    end

zistit_Callback(hObject, eventdata, handles);
% OBSLUHA TLACIDLA PRE PRIPOJENIE ARDUINA
function pripojit_Callback(hObject, eventdata, handles)

com_port = get(handles.com,'String'); 
handles.s1 = serial(com_port{get(handles.com,'Value')}); % vytvorenie objeku seriovej linky

% pripojenie arduina, nastavenie spojenia a overenia spravnej identifikacie
% arduina
try
 fopen(handles.s1);   % otvorenie komunikacie
 pause(2);
 fprintf(handles.s1,'I'); % zaslanie prikazu "I"
 odpoved = fscanf(handles.s1); % nacitanie odpovede 
 
 if strcmp(odpoved(1:end-1),'ARD001')
     set(handles.status,'String','Connected');
 else
     set(handles.status,'String','Not connected');
     delete(handles.s1)
 end
catch % ak na zvolenom porte nie je pozadovane zariadenie treba zlikvidovat objekt seriovej linky !

    set(handles.status,'String','Not connected');
    delete(handles.s1)
end
    
 guidata(hObject, handles);  

 % OBSLUHA TLACIDLA PRE ODPOJIT ARDUINA
function odpojit_Callback(hObject, eventdata, handles)
try
fclose(handles.s1);
end
if isfield(handles,'s1')
    delete(handles.s1);
    handles=rmfield(handles,'s1');
end
set(handles.status,'String','Disconnected');
guidata(hObject, handles); 


function CD13_Callback(hObject, eventdata, handles)
set(hObject,'String',get(hObject,'Value'));
%  Tu budu callback funkcie pre ostatne digitalne piny okrem D0 a D1



