p5-fab
Version:
a p5js library for digital fabrication!
155 lines (130 loc) • 3.3 kB
JavaScript
let fab;
let buttons;
let testState = 0;
let acceptCount = 0;
let positions = {
0:[30, 30, 0, 5000],
1:[200, 200, 0, 5000],
2:[30, 200, 0, 5000],
3:[200, 30, 0, 5000],
4:[115, 115, 0, 5000]
};
function setup() {
// createCanvas(400, 400, WEBGL);
fab = createFab();
// UI things
let buttonConnect = createButton('connect to printer');
buttonConnect.parent('bConnect');
buttonConnect.mousePressed(connectToPrinter);
let buttonHeat = createButton('heat nozzle');
buttonHeat.parent('bHeat');
buttonHeat.mousePressed(heatNozzle);
let buttonCool = createButton('cool down');
buttonCool.parent('bCool');
buttonCool.mousePressed(coolPrinter);
let buttonPaperAdjust = createButton('adjusted');
buttonPaperAdjust.parent('bPaper');
buttonPaperAdjust.mousePressed(paperTestAdjusted);
let buttonPaperAccept = createButton('accepted');
buttonPaperAccept.parent('bPaper');
buttonPaperAccept.mousePressed(paperTestAccepted);
let buttonTest = createButton('run test print');
buttonTest.parent('bTest');
buttonTest.mousePressed(testPrint);
}
function draw() {
// orbitControl(2, 2, 0.001);
// background(0);
fill(0);
}
function gcodeDraw() {
}
function onData() {
fab.serialResp += fab.serial.readString();
if (fab.serialResp.slice(-1) == '\n') {
console.log(fab.serialResp);
if (fab.serialResp.search('ok') > -1) {
fab.emit("ok", fab);
}
fab.serialResp = '';
}
}
async function connectToPrinter() {
fab.commands = [];
await fab.serial.requestPort();
}
function heatNozzle() {
fab.autoHome();
fab.move(100, 100, 100, 3000);
fab.setNozzleTemp(200);
fab.print();
}
function coolPrinter() {
fab.setNozzleTemp(0);
fab.autoHome();
fab.print();
}
function paperTestCycle() {
let p = positions[testState];
fab.up(3);
fab.move(p[0], p[1], p[2], p[3], p[4]);
fab.print();
}
function paperTestAdjusted() {
paperTestCycle(testState);
testState++;
acceptCount = 0;
if (testState > 4) {
testState = 0;
}
}
function paperTestAccepted() {
paperTestCycle(testState);
testState++;
if (testState > 4) {
testState = 0;
}
acceptCount++;
if (acceptCount == 5) {
alert('done!');
}
}
function testPrint() {
// fab.commands = [];
fab.setERelative();
fab.autoHome();
fab.setNozzleTemp(210);
fab.setBedTemp(60);
fab.introLine();
fab.move(30,30,0.5);
let o = 10;
let s = 1000;
let lx = 0;
let ly = 0;
let count = 0;
for (let i = 0; i < 9; i++){
fab.moveExtrude(200-lx, 30+ly, 0.3);
console.log([200-lx, 30+ly]);
[count, lx, ly] = checkCount(count, lx, ly);
fab.moveExtrude(200-lx, 200-ly, 0.3);
console.log([200-lx, 200-ly]);
[count, lx, ly] = checkCount(count, lx, ly);
fab.moveExtrude(30+lx, 200-ly, 0.3);
console.log([30+lx, 200-ly]);
[count, lx, ly] = checkCount(count, lx, ly);
fab.moveExtrude(30 +lx, 30+ly, 0.3);
console.log([30+lx, 30+ly]);
[count, lx, ly] = checkCount(count, lx, ly);
}
fab.up(10);
// fab.move(30, 50, 0.2);
// fab.moveExtrude(200, 50, 0.6);
fab.presentPart();
fab.print();
}
function checkCount(count, lx, ly) {
count++;
ly = (count+1) % 4 == 0 ? ly+10 : ly;
lx = (count>0 && (count+1) % 4 == 1) ? lx+10 : lx;
return [count, lx, ly]
}