// // Bot // // handles GCode communicationw with the plotter // class Bot extends PApplet { Serial myPort; //declare serial port int prevZ = 0; int LF = 10; // Linefeed in ASCII int CR = 13; String myString = null; Bot(PApplet p) { //constructor if (serialOn) { println(Serial.list()); String portName = Serial.list()[0]; // Change this Value to fit which Serial Port it is on. myPort = new Serial(p, portName, 19200); } } void update() { if (serialOn) { while (myPort.available () > 0) { myString = myPort.readStringUntil(LF); if (myString != null) { print("RX: "+myString); if (myString.startsWith("ok")) { atPoint = true; // when drawbot stops at point, it sends "ok" and triggers atPoint println("*****At Point*****"); } else { //println("received something not ok"); } } } // while (myPort.available () > 0) { // char inByte = myPort.readChar(); // if (inByte == 'o') { // atPoint = true; // when drawbot stops at point, it sends # and triggers atPoint // println("*****At Point*****"); // }//if byte was # // } // if something came back from the bot } //serial on if (!serialOn) { // if not attached to drawbot, loop on instead atPoint = true; } } float xyToA(float inx, float iny) { float lenA; lenA = sqrt(pow(PAGE0X+inx, 2)+pow(PAGE0Y+iny, 2))-PLOTRAD; return lenA; } float xyToB(float inx, float iny) { float lenB; lenB = sqrt(pow(MOTORSEP-(PAGE0X+inx), 2)+pow(PAGE0Y+iny, 2))-PLOTRAD; return lenB; } void sendVal(float inx, float iny, float upDown) { String xsend; String ysend; String feedRate; String xy; // calc A and B string lengths from x,y coords (in inches) xsend=str(xyToA(inx/PPI, iny/PPI)); ysend=str(xyToB(inx/PPI, iny/PPI)); feedRate=""; if (prevZ != int(upDown)) { if (upDown == 1) { // if (servoOn) { // DirectCommand("+"); //moves servo, push pen onto page // } println("pen is On"); } // if pen down else if (upDown == 0) { //lift pen up // if (servoOn) { // DirectCommand("-"); //moves servo, push pen off page // }// servo is on println("pen is Off"); }// pen is off prevZ = int(upDown); // delay(500); }//if previous Z had changed if (upDown==1.0) feedRate="F"+SLOWFEED; // pen is on, drawing else feedRate="F"+FASTFEED; // pen is off, jogging DirectCommand("G1 X"+xsend+" Y"+ysend+" "+feedRate); print("point: "); print((inx/PPI) + "," +(iny/PPI)); println(" was sent as: "+"G1 X"+xsend+" Y"+ysend+" "+feedRate); //DirectCommand("*"); //DirectCommand(xy); // echo to processing window // println("point was sent"); // println(inx + "," +iny); // println("xsend = " + xsend); // println("ysend = " + ysend); // println("xy = " + '*' + xy); // println("_________________________"); drawCrossHairs(inx, iny); } void DirectCommand(String j) { if (serialOn) { myPort.write(j+'\n'); } } void waitForOk() { boolean okd=false; while (true) { if (myPort.available() > 0) break; } while ( (myPort.available () > 0) && (!okd)) { myString = myPort.readStringUntil(LF); if (myString != null) { print("RX: "+myString); if (myString.startsWith("ok")) { okd = true; // when drawbot stops at point, it sends "ok" and triggers atPoint } else { //println("received something not ok"); } } } } }