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