#include <AFMotor.h> 
#include <Servo.h> 
AF_Stepper motor(2048, 1);
AF_Stepper motor2(2048, 2);
Servo servo1;
int x0 = 0;
int y0 = 0;
int K = 1;
void setup() {
  motor.setSpeed(15);
  motor2.setSpeed(15);  
  servo1.attach(10);
  servo1.write(65);
  Serial.begin(9600);
}
void OneTouch(){
  servo1.write(60);
  delay(50);
  servo1.write(65);
}
void MoveRight(int h){
  motor.step(h, FORWARD, SINGLE);    
  motor2.step(h, FORWARD, SINGLE);    
}
void MoveDown(int h){
  motor.step(h, BACKWARD, SINGLE);   
  motor2.step(h, FORWARD, SINGLE);    
}
void MoveUp(int h){
  motor.step(h, FORWARD, SINGLE);    
  motor2.step(h, BACKWARD, SINGLE);   
}
void MoveLeft(int h){
  motor.step(h, BACKWARD, SINGLE);     
  motor2.step(h, BACKWARD, SINGLE);    
}
void OnePointer(int x, int y){
  int stepX = x - x0;
  int stepY = y - y0;
  
  if (stepX > 0)
    MoveRight(stepX);
  else
    MoveLeft(-stepX);
    
  if (stepY > 0)
    MoveDown(stepY);
  else
    MoveUp(-stepY);
   
  x0 = x;
  y0 = y;
  
  OneTouch();
}
void Move(int x, int y){
  int stepX = x - x0;
  int stepY = y - y0;
  int kX, kY;
    
      
  while ((stepX != 0) || (stepY != 0)){
    kX=K;
    kY=K;
    if (kX> abs(stepX))
      kX = abs(stepX);
    if (kY> abs(stepY))
      kY = abs(stepY);
  
    if (stepX > 0){
      MoveRight(kX);
      stepX-=kX;
    }
    if (stepX < 0){
      MoveLeft(kX);
      stepX+=kX;
    }
    if (stepY > 0){
      MoveDown(kY);
      stepY-=kY;
    }
    if (stepY < 0){
      MoveUp(kY);
      stepY+=kY;
    }
  }
  
  x0 = x;
  y0 = y;
  
  OneTouch();
}
void loop() {
  while (Serial.available() == 0);
     String buffer ="";
     int i = 0;
     delay(100);
      
     while(i < 9) {
        buffer += Serial.read();
        i++;
     }
     
     String code =  buffer.substring(0,1);
     code.trim();
     int cod = code.toInt(); 
     
     String first =  buffer.substring(0,5);
     first.trim();
     int x = first.toInt() - cod*10; 
     String second =  buffer.substring(0,9);
     second.trim();
     int y = second.toInt() - x*10000 - cod * 100000;   
     
     switch (cod){
       case 0:
         Move(x,y);
         OneTouch();
       break;
       case 1:
         servo1.write(65);
         delay(50);
         Move(x,y);
       break;
       case 2:
         servo1.write(60);
         delay(50);
         Move(x,y);
         servo1.write(65);
       break;
       case 3:
         servo1.write(65);
         delay(50);
       break;
       case 4:
         servo1.write(60);
         delay(50);
         break;
       case 5:
         Move(x,y);
         break;
       case 6:
         Move(0,0);
         motor.release();
         motor2.release();
         break;
       case 7:
         K=x;
         break;
     }
     
     Serial.print(1);
}