function [error,errorstr]=mouse(H,speed)

scuid=[1 2 3 4];

footdata;

% Coordenadas cartesianas iniciais
xyz0=[0 0 L(1)+L(2)+L(3)+L(4)];

% Activação dos PWMs
[error,errorstr]=inituc(H,scuid);
if (error==1), return, end

pause(3);

% Esperar que a activação dos PWMs seja feito
% disp 'Activando PWMs...'
% [stat,error,errorstr]=waitpwmon(H,scuid);
% if (stat==0), return, end
% disp 'PWMs activados!'

% Callback para medição dos sensores de força e da corrente
function_name=['show_force(' num2str(H) ',[' num2str(scuid) '],2)'];
tmr=timer;
tmr.executionmode='fixedspacing';
tmr.startdelay=0;
tmr.period=0.25;
tmr.timerfcn=function_name;
% Arrancar a callback
start(tmr);

figure(2);

% Sem erros de input no inicio
err=0;
errstr='OK';

% Inicialização das variáveis de trabalho
xyz=xyz0;
theta=[0 0 0];

figure(1);
while(1)
    
    % Aplicação de um movimento cartesiano
    [thetanew,err2,errstr]=motioncartesian(H,[-xyz(1) -xyz(2) xyz(3)],1,speed);
    [thetanew,err1,errstr]=motioncartesian(H,xyz,0,speed);
    err=err1 | err2;
    if (err==0)
        theta=thetanew;
    end

    leg_draw(theta);
    
    hold on
    % Cálculo das coordenadas das juntas (cinemática directa)
    if (err==1)
        text(-sum(L),floor(-L(1)/8),0,errstr);
    end
    text(0,floor(L(1)/2),'EXIT');
    hold off
    
    % Pedido de novas coordenadas
    [y,z]=ginput(1);
    if (z>=0), break, end
    
    xyz=[0 -y -z];
end

motioncartesian(H,xyz0,0,speed);
motioncartesian(H,xyz0,1,speed);

pause(2);

% Espera que os motores terminem o movimento
% [stat,error,errorstr]=waitmotionfin(H,scuid);
% if (stat==0), return, end

% Para a callback
stop(tmr);

close all

% Desactivação dos PWMs
[error,errorstr]=killuc(H,scuid);
if (error==1), return, end

disp 'Bye Bye'
