unsigned long now; int wait = 500; unsigned long lastMove; int xServoPin = 3; int yServoPin = 5; int upDownPin = 6; int clickPin = 11; int relayPin = 13; int startPin = 2; int mode; int startVar; int prevStartVar; int butt5Pin = A5; int butt4Pin = A4; int butt3Pin = A3; int point = 0; int running = 0; int pattern = 0; int numPatterns = 2; int numPoints; //runs if pattern = 1 const int numPoints2 = 58; int points2[numPoints2][5] = {{130,13,0,46,500}, {130,13,0,138,800},//click {130,13,0,46,300}, //unclick {124,33,0,46,300}, {122,33,115,46,300}, //pen drop begin P {122,164,115,46,400}, {122,164,0,46,300}, {122,94,0,46,300}, {122,94,115,46,300},//pen drop for top part of p {88,94,115,46,300}, {81,77,115,46,300}, {81,44,115,46,300}, {104,33,115,46,300}, {130,33,115,46,300},//end of p {130,33,0,46,300},//pen up {60,33,0,46,600},//e start point {60,33,115,46,300},//e pen down {83,33,115,46,300}, {83,164,115,46,400}, {60,164,115,46,300}, {60,164,0,46,300},//first part of e pen up {52,164,0,46,300},//n starting point {52,164,115,46,300},//n pen down {60,33,115,46,600}, {42,107,115,46,300},//mid point of N diagonal {34,158,115,46,300},//bottom right corner of N {34,33,115,46,400},//end point of n {34,33,0,46,300},//pen up {32,33,0,46,300},//begin top line of I {32,33,115,46,300},//pen down {22,33,115,46,300}, {22,33,0,46,300},//pen up {34,33,0,46,300},//center line of i {34,33,115,46,300},//pen down {34,156,115,46,450}, {35,156,0,46,300},//pen up {40,156,0,46,300},//begin bottom line of I {40,156,115,46,300},//pen down {25,156,115,46,300}, {25,156,0,46,300},//pen up {19,133,0,46,300},//begin s {19,133,115,46,300},//pen down {19,164,115,64,300}, {3,159,115,64,300}, {3,106,115,64,300}, {22,97,115,64,300}, {29,83,115,64,300}, {19,33,115,64,300}, {3,33,115,64,300}, {3,66,115,64,300}, {3,66,0,64,300},//pen up {79,103,0,64,600},//beginning last line of E {79,103,115,64,300},//pen down {61,103,115,64,300}, {61,103,0,64,300},//pen up {130,13,0,64,500},//home {130,13,0,138,800},//click {130,13,0,64,500},//unclick }; //runs if pattern = 0 const int numPoints1 = 37; int points1[numPoints1][5] = {{130,13,0,46,500}, {130,13,0,138,800}, {130,13,0,46,300}, {100,65,0,46,300}, {100,65,115,46,300}, //pen drop {120,77,115,46,300}, {117,105,115,46,300}, {98,118,115,46,300}, {85,118,115,46,300}, {75,100,115,46,300}, {74,72,115,46,300}, {88,104,115,46,300}, {70,119,115,46,300}, {60,115,115,46,300}, {53,97,115,46,300}, {72,72,115,46,300}, {23,72,115,46,600}, {19,83,115,46,300}, {15,80,115,46,300}, {10,67,115,46,300},//tip {29,20,115,46,300}, {38,48,115,46,300}, {70,48,115,46,500}, {62,9,115,46,300}, {70,52,115,46,300}, {75,9,115,46,300}, {77,51,115,46,300},//end weiner {77,51,41,46,300}, {0,70,41,46,1000}, {5,70,115,46,300},//begin drop {5,78,115,46,300}, {17,68,115,46,300}, {0,65,115,46,300}, //end drop {0,65,0,46,300}, {130,13,0,46,1000}, {130,13,0,138,800}, {130,13,0,46,1000}, }; int butt5Var, butt4Var,butt3Var; int prevButt5Var, prevButt4Var, prevButt3Var; #include Servo xServo; Servo yServo; Servo upDownServo; Servo clickServo; int x = 0; int y = 13; int upDown = 90; int clickVar = 46; void setup() { xServo.attach(xServoPin); yServo.attach(yServoPin); upDownServo.attach(upDownPin); clickServo.attach(clickPin); Serial.begin(9600); pinMode(butt3Pin, INPUT); pinMode(butt4Pin, INPUT); pinMode(butt5Pin, INPUT); pinMode(relayPin, OUTPUT); pinMode(startPin, INPUT); } void loop() { now = millis(); startVar = digitalRead(startPin); butt5Var = digitalRead(butt5Pin); butt4Var = digitalRead(butt4Pin); butt3Var = digitalRead(butt3Pin); if(butt4Var != prevButt4Var){ if(butt4Var == 1){ if(point > 0){ point -= 1; } } } if(butt5Var != prevButt5Var){ if(butt5Var == 1){ point = (point + 1) % numPoints; } } if(butt3Var != prevButt3Var){ if(butt3Var == 1){ if(running == 0){ running = 1; } } } //INCREMNETS POINTS IF RUNNING, INCREMENTS PATTERN AT END OF A PATTERN if(running == 1){ if(now - lastMove > wait){ lastMove = now; point += 1; digitalWrite(relayPin,HIGH); if(point == numPoints){ running = 0; point = 0; pattern = (pattern + 1) % numPatterns; digitalWrite(relayPin, LOW); } } } //Starts the Thing Running if(prevStartVar != startVar){ if(startVar == 1){ if(running == 0){ running = 1; lastMove = now; if(pattern == 0){ numPoints = numPoints1; }else{ if(pattern == 1){ numPoints = numPoints2; } } }} } if(pattern == 0){ x = points1[point][0]; y = points1[point][1]; upDown = points1[point][2]; clickVar = points1[point][3]; wait = points1[point][4]; }else{ if(pattern = 1){ x = points2[point][0]; y = points2[point][1]; upDown = points2[point][2]; clickVar = points2[point][3]; wait = points2[point][4]; } } xServo.write(x); yServo.write(y); upDownServo.write(upDown); clickServo.write(clickVar); prevButt5Var = butt5Var; prevButt4Var = butt4Var; prevButt3Var = butt3Var; prevStartVar = startVar; Serial.print("x = "); Serial.print(x); Serial.print(" y = "); Serial.print(y); Serial.print(" point = "); Serial.println(point); }