Hi,
I am working on a project where I want to operate two servo motors using joystick.
Joystick should give incremental position to servo motors in any specific direction.
Servo motors shouldnt return back if joystick returns to home position.
Here is the tinkercad circuit link
Here is the code I am working on, but still not successful.
Need your suggestions to correct the code.
#include <Servo.h>
Servo LHRH_servo;
Servo UPDN_servo;
int joyX = A5;
int joyY = A4;
int ServoH_Min = 0;
int ServoH_Max = 60;
int ServoV_Min = 40;
int ServoV_Max = 0;
int pan = 0;
int HorizontalJoyValue;
int HorizontalServoPosition;
int VerticalJoyValue;
int VerticalServoPosition;
void setup()
{
pinMode(joyX, INPUT);
pinMode(joyY, INPUT);
UPDN_servo.attach(12);
LHRH_servo.attach(11);
LHRH_servo.write(30);
UPDN_servo.write(20);
Serial.begin(9600);
}
void loop()
{
HorizontalJoyValue = analogRead(joyX);
VerticalJoyValue = analogRead(joyY);
Serial.print("HorizontalJoyValue = ");
Serial.println(HorizontalJoyValue);
Serial.print("VerticalJoyValue = ");
Serial.println(VerticalJoyValue);
HorizontalServoPosition = map(HorizontalJoyValue, 0, 1023, ServoH_Min, ServoH_Max);
VerticalServoPosition = map(VerticalJoyValue, 0, 1023, ServoV_Min , ServoV_Max);
Serial.print("HorizontalServoPosition = ");
Serial.println(HorizontalServoPosition);
Serial.print("VerticalServoPosition = ");
Serial.println(VerticalServoPosition);
if (HorizontalServoPosition < ServoH_Max){
if (HorizontalServoPosition > (ServoH_Max / 2)) {
pan++;
} else {
if (HorizontalServoPosition < (ServoH_Max / 2)){
pan--;
}
}
}
LHRH_servo.write(pan);
delay(2000);
Serial.println(LHRH_servo.read());
if (LHRH_servo.read() >= ServoH_Max) {
pan = ServoH_Max;
LHRH_servo.write(pan);
delay(2000);
}
if (VerticalServoPosition < ServoV_Min){
if (VerticalServoPosition > (ServoV_Min / 2)) {
pan++;
} else {
if (VerticalServoPosition < (ServoV_Min / 2)){
pan--;
}
}
}
UPDN_servo.write(pan);
delay(2000);
Serial.println(UPDN_servo.read());
if (UPDN_servo.read() >= ServoV_Min) {
pan = ServoV_Min;
UPDN_servo.write(pan);
delay(2000);
}
}