%function move to positon function [answer] = movetoposition(motor_number, slope, lor, distance) %calculate microsteps from distance microsteps = (distance/slope)*12800; %generate command %byte1 - adress byte1 = '00000001'; %byte2 - command number byte2 = '00000100'; %byte3 - type number byte3 = '00000000'; %byte4 - motor number byte4 = dec2bin(motor_number-1,8); %byte5,6,7,8 - value if lor==0 byte58 = dec2bin(microsteps,32); byte5 = byte58(1:8); byte6 = byte58(9:16); byte7 = byte58(17:24); byte8 = byte58(25:32); else byte58 = dec2bin((2^32-1)-microsteps,32); byte58 = dec2bin(bin2dec(byte58)+1,32); byte58 = byte58(end-31:end); %microsteps must be a non negative integer smaller than 2^52. byte5 = byte58(1:8); byte6 = byte58(9:16); byte7 = byte58(17:24); byte8 = byte58(25:32); end %byte9 - checksum byte9 = dec2bin(bin2dec(byte1)+bin2dec(byte2)+bin2dec(byte3)+bin2dec(byte4)+bin2dec(byte5)+bin2dec(byte6)+bin2dec(byte7)+bin2dec(byte8),8); byte9 = byte9(end-7:end); % open com port for data transfer fid = fopen('COM1:','r+'); %send command fwrite(fid,char(bin2dec(byte1)),'uint8'); fwrite(fid,char(bin2dec(byte2)),'uint8'); fwrite(fid,char(bin2dec(byte3)),'uint8'); fwrite(fid,char(bin2dec(byte4)),'uint8'); fwrite(fid,char(bin2dec(byte5)),'uint8'); fwrite(fid,char(bin2dec(byte6)),'uint8'); fwrite(fid,char(bin2dec(byte7)),'uint8'); fwrite(fid,char(bin2dec(byte8)),'uint8'); fwrite(fid,char(bin2dec(byte9)),'uint8'); % close com port connection fclose(fid);