www.gusucode.com > Arduino_Engineering_Kit_Project_Files工具箱matlab程序 > Arduino_Engineering_Kit_Project_Files/DrawingRobot/Solutions/drawImageFromPix.m

    function drawImageFromPix(segmentsPix,xLimPix,yLimPix,Z_i)
% Copyright 2018 The MathWorks, Inc.
nSegments = length(segmentsPix);

% Define whiteboard limits
load WhiteboardLimits.mat xLim yLim

% Convert pixel coordinates to physical distances and then to encoder counts
fraction = 0.7;
segmentsMeters = transformPixelsToMeters(segmentsPix,xLim,yLim,xLimPix,yLimPix,fraction);

% Reduce size of each segment
radius = 0.002; %Max distance between points to draw (meters)
for ii = 1:length(segmentsMeters)
    segmentsMeters{ii} = reduceSegments(segmentsMeters{ii},radius);
end

load RobotGeometry.mat Base
segmentsCounts = cell(size(segmentsMeters));
for ii = 1:nSegments
    segmentsCounts{ii} = xyToCounts(segmentsMeters{ii},Z_i,Base);
end

%% Connect to hardware
a = arduino;
carrier = addon(a,'Arduino/MKRMotorCarrier');
s = servo(carrier,3);
mL = dcmotor(carrier,2);
mR = dcmotor(carrier,1);
eL = rotaryEncoder(carrier,2);
eR = rotaryEncoder(carrier,1);
resetCount(eL)
resetCount(eR)

%% Define up and down positions for servo motor
load ServoPositions.mat LeftMarker NoMarker

% Draw image on whiteboard
writePosition(s,NoMarker)
for ii = 1:nSegments
    % Get counts for current segment
    countList = segmentsCounts{ii};
    % Move to first position and lower marker
    moveToCounts(countList(1,:),mL,mR,eL,eR)
    writePosition(s,LeftMarker)
    % Move to all positions of current segment
    moveToCounts(countList,mL,mR,eL,eR)
    % Raise marker
    writePosition(s,NoMarker)
end