So Basically i have been working on a project, i have to make a robotic arm which is connected to a line follower, i tested the line follower first and it worked, after that i tested the arm and it worked, but when i test them both only the arm move.
I'm using:
Arduino Uno, 2 infrared FC-51, L298N Motor driver, 2 Dc Motors, HC-05 bluetooth Module, 4 servos SG90, 2 Batteries 3,7V (7,4V in total)
i tried to visualize what's happening in seriel monitor and it seems to work but the motors still don't move, i'm thinking that the problem is a powering problem ?
#include <Servo.h>
// Servo objects
Servo myservo1, myservo2, myservo3, myservo4;
// Motor driver pins
#define enA 10
#define in1 7
#define in2 8
#define in3 12
#define in4 13
#define enB 5
// Line sensor pins
#define L_S 2
#define R_S 4
char mode = 'S'; // Default to Stop mode
void setup() {
Serial.begin(9600);
// Set sensor pins
pinMode(R_S, INPUT);
pinMode(L_S, INPUT);
// Set motor pins
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enB, OUTPUT);
// Set motor speed (0–255)
analogWrite(enA, 190);
analogWrite(enB, 190);
// Attach servos
myservo1.attach(3);
myservo2.attach(6);
myservo3.attach(9);
myservo4.attach(11);
delay(1000); // Wait for everything to settle
}
void loop() {
// Handle incoming Bluetooth data
if (Serial.available() >= 3) {
unsigned int servopos = Serial.read();
unsigned int servopos1 = Serial.read();
char inputvalue = Serial.read();
unsigned int realservo = (servopos1 * 256) + servopos;
// Update mode
if (inputvalue == 'F' || inputvalue == 'S') {
mode = inputvalue;
Serial.print("Mode changed to: ");
Serial.println(mode);
}
// Servo control
if (realservo >= 1000 && realservo < 1180) {
int angle = map(realservo, 1000, 1180, 0, 180);
myservo1.write(angle);
Serial.print("Servo1 -> ");
Serial.println(angle);
} else if (realservo >= 2000 && realservo < 2180) {
int angle = map(realservo, 2000, 2180, 0, 180);
myservo2.write(angle);
Serial.print("Servo2 -> ");
Serial.println(angle);
} else if (realservo >= 3000 && realservo < 3180) {
int angle = map(realservo, 3000, 3180, 0, 180);
myservo3.write(angle);
Serial.print("Servo3 -> ");
Serial.println(angle);
} else if (realservo >= 4000 && realservo < 4180) {
int angle = map(realservo, 4000, 4180, 0, 90);
myservo4.write(angle);
Serial.print("Servo4 -> ");
Serial.println(angle);
}
}
// Line following logic only if in Follow mode
if (mode == 'F') {
int leftSensor = digitalRead(L_S);
int rightSensor = digitalRead(R_S);
Serial.print("Sensors -> L: ");
Serial.print(leftSensor);
Serial.print(" R: ");
Serial.println(rightSensor);
if (rightSensor == 0 && leftSensor == 0) {
forward();
} else if (rightSensor == 1 && leftSensor == 0) {
turnLeft();
} else if (rightSensor == 0 && leftSensor == 1) {
turnRight();
} else {
Stop();
}
} else {
Stop(); // Make sure motors are stopped in 'S' mode
}
}
// Movement functions
void forward() {
Serial.println("Moving forward");
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
void turnLeft() {
Serial.println("Turning left");
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void turnRight() {
Serial.println("Turning right");
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
void Stop() {
Serial.println("Stopped");
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
