#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);
}