Click here and Download App
CODE
#include <Servo.h> // Servo library
char pn;
int l = 200;
int pos = 0;
int x = 170 ; // Servo1 position
int y = 90; // Servo2 starts at home 90°
int mot_speed = l;
// === Motor pin definitions ===
// Left motor (Motor A)
int ENA = 6; // PWM pin
int IN1 = 7;
int IN2 = 8;
// Right motor (Motor B)
int ENB = 3; // PWM pin
int IN3 = 5;
int IN4 = 4;
// === Servo definitions ===
Servo myservo1, myservo2, myservo3;
// === Relay pins ===
int relay1 = 2;
int relay2 = 12;
// === For servo3 timing ===
unsigned long lastTurnTime = 0;
int servo3Pos = 90;
void setup() {
// Motor setup
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Servo setup
myservo1.attach(9);
myservo2.attach(10);
myservo3.attach(11);
// === Set home positions ===
myservo1.write(180); // Servo1 home = 180°
myservo2.write(80); // Servo2 home = 90°
myservo3.write(90); // Servo3 center
// Relay setup
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
// Serial monitor
Serial.begin(9600);
Serial.println("=== System Initialized ===");
Serial.println("Servo1 Home = 0°");
Serial.println("Servo2 Home = 90°");
Serial.println("Servo3 Center = 90°");
Serial.println("Ready for Commands...");
}
// === MOTOR CONTROL FUNCTIONS ===
void moveForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, mot_speed);
analogWrite(ENB, mot_speed);
Serial.println("Moving Forward");
}
void moveBackward() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, mot_speed);
analogWrite(ENB, mot_speed);
Serial.println("Moving Backward");
}
void stopMotors() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
Serial.println("Motors Stopped");
}
void loop() {
// Read serial command
if (Serial.available() > 0) {
pn = Serial.read();
Serial.print("Command: ");
Serial.println(pn);
}
// ====== MOTOR BASIC CONTROLS ======
if (pn == 'A') moveForward(); // Forward
if (pn == 'B') moveBackward(); // Backward
if (pn == 'Z') stopMotors(); // Stop
// ====== SERVO 1 CONTROL ======
if (pn == 'b') {
if (x < 180) {
x++;
myservo1.write(x);
Serial.print("Servo1: ");
Serial.println(x);
delay(30);
}
}
if (pn == 'a') {
if (x > 0) {
x--;
myservo1.write(x);
Serial.print("Servo1: ");
Serial.println(x);
delay(30);
}
}
// ====== SERVO 2 CONTROL ======
if (pn == 'c') {
if (y < 180) {
y++;
myservo2.write(y);
Serial.print("Servo2: ");
Serial.println(y);
delay(30);
}
}
if (pn == 'd') {
if (y > 0) {
y--;
myservo2.write(y);
Serial.print("Servo2: ");
Serial.println(y);
delay(30);
}
}
// ====== SPEED CONTROL ======
if (pn == 'm') l = 50;
if (pn == 'n') l = 100;
if (pn == 'o') l = 150;
if (pn == 'p') l = 200;
if (pn == 'q') l = 255;
mot_speed = l;
if (pn >= 'm' && pn <= 'q') {
Serial.print("Motor Speed set to: ");
Serial.println(mot_speed);
}
// ====== MOTOR + SERVO3 TURN CONTROL ======
if (pn == 'C') {
myservo3.write(110); // Turn left
lastTurnTime = millis();
Serial.println("Turning Left");
}
else if (pn == 'D') {
myservo3.write(70); // Turn right
lastTurnTime = millis();
Serial.println("Turning Right");
}
else {
if (millis() - lastTurnTime > 500) {
myservo3.write(90);
}
}
// ====== RELAY CONTROL ======
if (pn == 'X') {
digitalWrite(relay1, LOW);
Serial.println("Relay1 ON");
} else {
digitalWrite(relay1, HIGH);
Serial.println("Relay1 OFF");
}
if (pn == 'Y') {
digitalWrite(relay2, LOW);
Serial.println("Relay2 ON");
} else {
digitalWrite(relay2, HIGH);
Serial.println("Relay2 OFF");
}
delay(20);
}

