%% Test: SAA1064-Siebensegmentanzeige ueber Arduino
%
% getestet mit Arduino Uno und Matlab R2014a
% 09.11.2016 Nicolas


Auio = arduino('Com8','Uno');

% Bei I2C-Device-Adressen verlang Matlab hier einen Hex-String mit Praefix 
% '0x', im Gegensatz zu allen anderen HEX-Operationen
devaddr = '0x3B'; 
addr = scanI2CBus(Auio);
assert(strcmpi(addr, devaddr));

Saa = i2cdev(Auio, devaddr);

% Test: Alle Segmente an
write(Saa, hex2dec({'00','1F'}) )

% Test: Status auslesen
l = read(Saa, 1)

% Heller, Segmente aus
write(Saa, hex2dec({'00','37'}) ) 

% Maximale Helligkeit, Segmente aus
write(Saa, hex2dec({'00','77'}) ) 

% Segmente herausfinden:
write(Saa, hex2dec({'00','37','01','02','04','08'}) ) % Segmente 1 bis 4
write(Saa, hex2dec({'00','37','10','20','40','80'}) ) % Segmente 5 bis 8

% Ziffernsegmente
%   111
%  6   2
%  6   2
%   777
%  5   3
%  5   3
%   444  8
N = hex2dec({'3F','06','5B','4F','66','6D','7D','07','7F','6F'});


write(Saa, [hex2dec('01') N(1) N(2) N(3) N(4)]  ) % Ziffern 0 bis 3 testen
write(Saa, [hex2dec('01') N(5) N(6) N(7) N(8)]  ) % Ziffern 4 bis 8 testen

% Einfache Uhr darstellen
dots = [0 0 0 hex2dec('80')];
while(1)
    c = clock;
    h = c(4);
    m = c(5);
   
    digits = [N(floor(h/10)+1) N(mod(h,10)+1) N(floor(m/10)+1) N(mod(m,10)+1)];
    dots = [dots(end) dots(1:end-1)];
    
    write(Saa, [hex2dec('01') bitor(digits,dots)] ) ;
    pause(1);
end


% Arduino wieder freigeben
clear Auio