function findCircleCenter(approxCircleDia, endmillDiameter, probeFeed) { // var approxCircleDia = 60; // var endmillDiameter = 3.175 // var probeFeed = 200; var step = 0; var rightside = 0, leftside = 0, farside = 0, nearside = 0, centerXdistance = 0, centerYdistance = 0; socket.off('prbResult'); // Disable old listeners var holefindermacroStep1 = ` ; Header G21 ; mm mode G10 P1 L20 X0 Y0 Z0 ; zero out current location G38.2 X` + approxCircleDia / 2 + ` F` + probeFeed + ` ; Probe X` // find right side of circle socket.emit('runJob', { data: holefindermacroStep1, isJob: false, completedMsg: false, fileName: "" }); socket.on('prbResult', function(prbdata) { if (prbdata.state > 0) { step++; console.log("Step " + step, prbdata); // Steps 1-3 just positions endmill for probes that count if (step == 1) { rightside = prbdata.x console.log(rightside); var holefindermacroStep5 = ` G4 P0.3 G91 G0 X-1 G90 G38.2 X-` + approxCircleDia / 2 + ` F` + probeFeed + ` ; Probe X` // find left side of circle socket.emit('runJob', { data: holefindermacroStep5, isJob: false, completedMsg: false, fileName: "" }); } if (step == 2) { leftside = prbdata.x var centerdistance = (rightside - leftside); var holefindermacroStep6 = ` G4 P0.3 G91 G0 X` + centerdistance / 2 + ` G90 G10 P1 L20 X0 G38.2 Y` + approxCircleDia / 2 + ` F` + probeFeed + ` ; Probe Y` // find far side of circle socket.emit('runJob', { data: holefindermacroStep6, isJob: false, completedMsg: false, fileName: "" }); } if (step == 3) { farside = prbdata.y var holefindermacroStep7 = ` G4 P0.3 G91 G0 Y-1 G90 G38.2 Y-` + approxCircleDia / 2 + ` F` + probeFeed + ` ; Probe Y` // find near side of circle socket.emit('runJob', { data: holefindermacroStep7, isJob: false, completedMsg: false, fileName: "" }); } if (step == 4) { nearside = prbdata.y centerYdistance = (farside - nearside); centerXdistance = (rightside - leftside); console.log(centerXdistance, centerYdistance) var holefindermacroStep7 = ` G4 P0.3 G91 G0 Y` + centerYdistance / 2 + ` G90 G10 P1 L20 Y0 ` socket.emit('runJob', { data: holefindermacroStep7, isJob: false, completedMsg: `Probe Complete: Remove the Probe Clip and Probe GND before continuing...
Probed dimension X: ` + (centerXdistance + endmillDiameter).toFixed(3) + `
Probed dimension Y: ` + (centerYdistance + endmillDiameter).toFixed(3) + `

`, fileName: "" }); } } else { console.log("Probe Failed") } }) } Metro.dialog.create({ title: "Center Finding Macro", content: `
This is the approximate diameter of the circle, or the maximum width between edges of the rectangular/square hole you are probing inside
Enter the Endmill Diameter
How fast the probe will move - slower is safer/more accurate `, actions: [{ caption: "Run center finding Probe", cls: "js-dialog-close success", onclick: function() { var approxCircleDia = parseFloat($("#centerProbeDistance").val()) var endmillDiameter = parseFloat($("#centerProbeEndmill").val()) var probeFeed = parseInt($("#centerProbeFeedrate").val()) findCircleCenter(approxCircleDia, endmillDiameter, probeFeed) } }, { caption: "Cancel", cls: "js-dialog-close alert", onclick: function() { // } } ] });