miércoles, 28 de septiembre de 2011

Robot SigueLíneas (III): Matlab

Aquí adjunto el código para mover todo con matlab.

umbral = 150;
potenciaAdelante = 5;
potenciaGiro = 3 * potenciaAdelante;

COM_CloseNXT all
hNXT = COM_OpenNXT('bluetooth.ini');
COM_SetDefaultNXT(hNXT);

placa = serial( 'COM4' , 'BaudRate', 9600 );
fopen( placa );

try
i = 1;

mi = NXTMotor('A');
md = NXTMotor('B');


while (i < 10000)
loQueRecibo = fscanf( placa );
loQueRecibo = sscanf(loQueRecibo,'%d');

a = size(loQueRecibo);

if(a(1) == 2)

loQueRecibo;

valorIzquierda = loQueRecibo(1);
valorDerecha = loQueRecibo(2);

if( (valorIzquierda < umbral) && (valorDerecha > umbral) )
display('Me muevo hacia la izquierda.');
mi.Stop('off');
mi.SendToNXT();

md.Power = potenciaGiro;
md.SendToNXT();
elseif( (valorDerecha < umbral) && (valorIzquierda > umbral) )
display('Me muevo hacia la derecha.');

md.Stop('off');
md.SendToNXT();

mi.Power = potenciaGiro;
mi.SendToNXT();
elseif( (valorDerecha > umbral) && (valorIzquierda > umbral) )
display('Me muevo hacia adelante como los de alicante.');

mi.Power = potenciaAdelante;
mi.SendToNXT();

md.Power = potenciaAdelante;
md.SendToNXT();
else
md.Stop('off');
mi.Stop('off');

loQueRecibo

%pause;
end

i = i + 1;
end % compruebo que he recibido dos
end

catch err
loQueRecibo
display('LEÑO GORDO')

err

try
mi.Stop('off');
md.Stop('off');
catch err1
end

fclose( placa );
COM_CloseNXT(hNXT);
end % try-catch

mi.Stop('off');
md.Stop('off');

fclose( placa );
COM_CloseNXT(hNXT);


He utilizado la la última versión estable de laRWHT toolbox. Ahora está orientada a objetos y utiliza una aplicación en nxc para un, según ellos, mejor control de los motores.

No hay comentarios: