Matlab Code for Arduino HELP
The code below is so I can track an object with my camera mounted on a servo when selected. I have the code below running in Matlab with a servo program running in the Arduino window.I would like to be able to modify the code to display the "DES COLOR" on an LED that is connected to an arduino board.
Can someone please help me with this?
close all; clc;
if exist('SerialCommPort','var'),fclose(SerialCommPort),end;
if exist('Camera','var'), release(Camera); clear vidDevice, end;
delete(instrfind);
SerialCommPort = serial('COM30');
SerialCommPort.BaudRate = 9600;
fopen(SerialCommPort);
fwrite(SerialCommPort, 90);
pause(2);
Camera = imaq.VideoDevice('winvideo', 1);
Frame = step(Camera);
[d1,d2,d3] =size(Frame);
Show = imshow(Frame); hold on;
plot([1 d2],[d1 d1]/2,'y');
plot([d2 d2]/2,[1 d1],'y');
Title = title('Double click to select color')
[xClick,yClick] = getpts;
PlotXY = plot(xClick,yClick,'oy'); pause(1);
DesColor(1:3) = Frame(round(yClick),round(xClick),:);
DeltaColor = 0.10;
xTgt = xClick; yTgt = yClick; beta = 0.4; alfa = 1 - beta;
N = 1000; dt = 0.01; F = 1; eInteg = 0;
errorArray = zeros(1,N);
tic
for k=1:N
Frame = step(Camera);
set(Show,'cdata',Frame);
set(Title,'string',num2str(k));
Mask = abs(Frame(:,:,1)-DesColor(1)) < DeltaColor & ...
abs(Frame(:,:,2)-DesColor(2)) < DeltaColor & ...
abs(Frame(:,:,3)-DesColor(3)) < DeltaColor;
[Row, Col] = find(Mask);
if ~isempty(Row),
xTgt = alfaxTgt + betamean(Col);
yTgt = alfayTgt + betamean(Row);
end
%Kp = .2;
%xTgt
%AngDeg = round(Kp*(-xTgt+618) + 90)
Kp = Kpicked; Ki = Kp*(-Gc.z{1});
e = xTgt-512;
eInteg = eInteg + e*0.033;
eInteg = min([100 max([-100 eInteg])]);
AngDeg = round(-(Kpe + KieInteg) + 90);
AngDeg;
fwrite(SerialCommPort,AngDeg);
set(PlotXY,'xdata',xTgt,'ydata',yTgt);
errorArray(k) = e;
drawnow;
end
FramePerSec = N/toc;
set(Title,'string',['FramePerSec ',num2str(FramePerSec)]);
fclose(SerialCommPort);
release(Camera); clear vidDevice;
Time = [1:N]/FramePerSec;
figure(10); plot(Time,errorArray,'r')
title(['Kp = ',num2str(Kp),' K1 = ', num2str(Ki)])
xlabel('Time [sec]'); ylabel('Tracking Error [pixels]');
grid on;