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, 57600); } //serial on } // end Constructor void update() { //check for new atPoint if (serialOn) { while (myPort.available () > 0) { myString = myPort.readStringUntil(LF); if (myString != null) { println("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; } //serial is off }//update float xyToA(float inx, float iny) { float lenA; lenA = sqrt(pow(PAGE0X+inx, 2)+pow(PAGE0Y+iny, 2)); return lenA; } float xyToB(float inx, float iny) { float lenB; lenB = sqrt(pow(MOTORSEP-(PAGE0X+inx), 2)+pow(PAGE0Y+iny, 2)); return lenB; } void sendVal(float inx, float iny, float upDown) { String xsend; String ysend; String feedRate; String xy; xsend=str(xyToA(inx/PPI, iny/PPI)); ysend=str(xyToB(inx/PPI, iny/PPI)); //xsend = nf(int(inx * multiplier), 6); //ysend = nf(int(iny * multiplier), 6); // xsend += xofset; // ysend += yofset; //xsend = xsend * 100000; //xy = xsend+ysend;// //nf(xsend + ysend, 12); 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) feedRate="F100"; // pen is on, drawing else feedRate="F300"; // pen is off, jogging println("point was sent"); println(inx + "," +iny); DirectCommand("G1 X"+xsend+" Y"+ysend+" "+feedRate); println("Sent: "+"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("_________________________"); }//void sendVal void DirectCommand(String j) { if (serialOn) { myPort.write(j+'\n'); } } //direct command void waitForOk() { boolean okd=false; while (true) { if (myPort.available() > 0) break; } while ((myPort.available () > 0) && (!okd)) { myString = myPort.readStringUntil(LF); if (myString != null) { println("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"); } } } } }//end Bot class