Code covered by the BSD License  

Highlights from
NXT Scanner with Lego Mindstorms NXT

image thumbnail
from NXT Scanner with Lego Mindstorms NXT by Yoshiaki Banno
NXT Scanner Model-Based Design based on Embedded Coder Robot NXT.

nxtscanner
function retData = nxtscanner
% main function <<nxtscanner program>>
retData = [];
data1 = [];
data2 = [];
holdFlag = 0;
breakFlag = 0;
nu = nxtusb;
if nu.CurrentState == 3
    open(nu);
    if nu.CurrentState == 5
        while breakFlag == 0
            buf = read(nu, 'uint16', 32);
            if nu.CurrentState == 10
                disp(['holdFlag: ', num2str(holdFlag)])
                % f[^
                [buf, holdFlag, directFlag, breakFlag] = extractData(buf, holdFlag);
                if ~isempty(buf)
                    if ~directFlag
                        % FROM
                        if ~isempty(data1)
                            retData = [retData; data1];
                            data1 = [];
                        end
                        data2= [buf, data2];
                        disp(['FROM data: ', num2str(buf)])
                    else
                        % TO
                        if ~isempty(data2)
                            retData = [retData; data2];
                            data2 = [];
                        end
                        data1 = [data1, buf];
                        disp(['TO data: ', num2str(buf)])
                    end
                else
                    disp('buf is empty!!!')
                end
            else
                close(nu);
                delete(nu);
                error('Data read error. Close NXT-USB interface.')
            end
        end
        % add last data
        if ~isempty(data1)
            disp(['Last data: ', num2str(data1)])
            retData = [retData; data1];
        end
        if ~isempty(data2)
            disp(['Last data: ', num2str(data2)])
            retData = [retData; data2];
        end
    else
        error('Cannot open NXT-USB interface')
    end
else
    error('Cannot find NXT. Check the NXT-USB connection.')
end
disp('Finish!!!!')
% -------------------------------------------------------------------------

% sub function for extracting data
% -------------------------------------------------------------------------
function [buf, holdFlag, directFlag, breakFlag] = extractData(buf, holdFlag)
disp('###### extractData START ######')
a = buf(1);
dataNum = buf(2);
validFlag = bitget(a, 1);
directFlag = bitget(a, 2);
endFlag = bitget(a, 3);
startFlag = bitget(a, 4);
breakFlag = 0;

tstr = ['dataNum: ' num2str(dataNum), ...
        ' validFlag: ' num2str(validFlag), ...
        ' directFlag: ' num2str(directFlag), ...
        ' startFlag: ' num2str(startFlag), ...
        'endFlag: ' num2str(endFlag)];
disp(tstr)

if validFlag
    if startFlag
        holdFlag = 1;
    end
    if endFlag
        breakFlag = 1;
    end
else
    buf = [];
    return;
end

if holdFlag
    if directFlag
        buf = buf(3:dataNum+2);
        disp('forward data!!')
    else
        % reverse the element order
        buf = buf(dataNum + 2:-1:3);
        disp('backward data!!')
    end
else
    buf = [];
end

disp('###### extractData END ######')
% -------------------------------------------------------------------------

Contact us at files@mathworks.com