Code Sharing Forum
Code Sharing Forum
1
#include <Servo.h>
// IR sensor pins
const int leftIR = A0; // Analog pin for left IR sensor
const int rightIR = A1; // Analog pin for right IR sensor
int leftIRValue = 0;
int rightIRValue = 0;
float distance = 0.0;
Servo myservo;
void setup() {
pinMode(enAPin, OUTPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(enBPin, OUTPUT);
pinMode(in3Pin, OUTPUT);
pinMode(in4Pin, OUTPUT);
pinMode(leftIR, INPUT);
pinMode(rightIR, INPUT);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(servoPin, OUTPUT);
myservo.attach(servoPin);
myservo.write(servoPosition);
Serial.begin(9600);
Serial.println("Initializing...");
}
void loop() {
// Rotate forward
for (servoPosition = 0; servoPosition <= 180; servoPosition += 15) {
rotateServo(servoPosition);
readSensorsAndPrint();
controlMotors();
delay(500);
}
// Rotate backward
for (servoPosition = 180; servoPosition >= 0; servoPosition -= 15) {
rotateServo(servoPosition);
readSensorsAndPrint();
controlMotors();
delay(500);
}
}
void readSensorsAndPrint() {
leftIRValue = analogRead(leftIR);
rightIRValue = analogRead(rightIR);
distance = getUltrasonicDistance();
Serial.print("Distance at ");
Serial.print(servoPosition);
Serial.print(" degrees: ");
Serial.print(distance);
Serial.println(" cm");
}
float getUltrasonicDistance() {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
return distance;
}
void controlMotors() {
if (leftIRValue > 500 && rightIRValue > 500) {
moveForward();
} else if (leftIRValue < 500 && rightIRValue > 500) {
turnLeft();
} else if (leftIRValue > 500 && rightIRValue < 500) {
turnRight();
} else if (distance < 50) {
moveBackward();
} else {
stopMotors();
}
}
void moveForward() {
digitalWrite(in1Pin, HIGH);
digitalWrite(in2Pin, LOW);
digitalWrite(in3Pin, HIGH);
digitalWrite(in4Pin, LOW);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed);
}
void turnLeft() {
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, HIGH);
digitalWrite(in3Pin, HIGH);
digitalWrite(in4Pin, LOW);
analogWrite(enAPin, leftMotorSpeed / 2);
analogWrite(enBPin, rightMotorSpeed);
}
void turnRight() {
digitalWrite(in1Pin, HIGH);
digitalWrite(in2Pin, LOW);
digitalWrite(in3Pin, LOW);
digitalWrite(in4Pin, HIGH);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed / 2);
}
void moveBackward() {
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, HIGH);
digitalWrite(in3Pin, LOW);
digitalWrite(in4Pin, HIGH);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed);
}
void stopMotors() {
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, LOW);
digitalWrite(in3Pin, LOW);
digitalWrite(in4Pin, LOW);
analogWrite(enAPin, 0);
analogWrite(enBPin, 0);
}
#include <Servo.h>
// IR sensor pins
const int leftIR = A0; // Analog pin for left IR sensor
const int rightIR = A1; // Analog pin for right IR sensor
int leftIRValue = 0;
int rightIRValue = 0;
float distance = 0.0;
Servo myservo;
void setup() {
pinMode(enAPin, OUTPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(enBPin, OUTPUT);
pinMode(in3Pin, OUTPUT);
pinMode(in4Pin, OUTPUT);
pinMode(leftIR, INPUT);
pinMode(rightIR, INPUT);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(servoPin, OUTPUT);
myservo.attach(servoPin);
myservo.write(servoPosition);
Serial.begin(9600);
Serial.println("Initializing...");
}
void loop() {
for (servoPosition = 0; servoPosition <= 180; servoPosition += 15) {
rotateServo(servoPosition);
delay(500); // Wait for the servo to reach the position
readSensorsAndPrint();
controlMotors();
delay(500);
}
}
void readSensorsAndPrint() {
leftIRValue = analogRead(leftIR);
rightIRValue = analogRead(rightIR);
distance = getUltrasonicDistance();
Serial.print("Distance at ");
Serial.print(servoPosition);
Serial.print(" degrees: ");
Serial.print(distance);
Serial.println(" cm");
delay(100); // Delay added for better readability
}
float getUltrasonicDistance() {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
float duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.034 / 2;
return distance;
}
void controlMotors() {
if (distance > 20) {
moveForward();
} else {
avoidObstacle();
}
}
void moveForward() {
digitalWrite(in1Pin, HIGH);
digitalWrite(in2Pin, LOW);
digitalWrite(in3Pin, HIGH);
digitalWrite(in4Pin, LOW);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed);
}
void moveBackward() {
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, HIGH);
digitalWrite(in3Pin, LOW);
digitalWrite(in4Pin, HIGH);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed);
}
void stopMotors() {
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, LOW);
digitalWrite(in3Pin, LOW);
digitalWrite(in4Pin, LOW);
analogWrite(enAPin, 0);
analogWrite(enBPin, 0);
}
void turnRight() {
digitalWrite(in1Pin, HIGH);
digitalWrite(in2Pin, LOW);
digitalWrite(in3Pin, LOW);
digitalWrite(in4Pin, HIGH);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed);
}
void turnLeft() {
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, HIGH);
digitalWrite(in3Pin, HIGH);
digitalWrite(in4Pin, LOW);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed);
}
void avoidObstacle() {
stopMotors();
delay(500);
#include <Servo.h>
// IR sensor pins
const int frontLeftIR = A0;
const int frontRightIR = A1;
// Servo pin
const int servoPin = 4;
// Motor speeds
int leftMotorSpeed = 200;
int rightMotorSpeed = 200;
void setup() {
pinMode(frontLeftIR, INPUT);
pinMode(frontRightIR, INPUT);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(enAPin, OUTPUT);
// pinMode(LeftMtrIn1, OUTPUT); // Removed this line
// pinMode(LeftMtrIn2, OUTPUT); // Removed this line
pinMode(enBPin, OUTPUT);
pinMode(RightMtrIn1, OUTPUT);
pinMode(RightMtrIn2, OUTPUT);
ultrasonicServo.attach(servoPin);
Serial.begin(9600);
Serial.println("Initializing...");
}
void loop() {
// Read sensor values
int frontLeftIRValue = analogRead(frontLeftIR);
int frontRightIRValue = analogRead(frontRightIR);
void moveForward() {
digitalWrite(RightMtrIn1, LOW);
digitalWrite(RightMtrIn2, HIGH);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed);
}
void moveBackward() {
digitalWrite(RightMtrIn1, HIGH);
digitalWrite(RightMtrIn2, LOW);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed);
}
void stopMotors() {
digitalWrite(RightMtrIn1, LOW);
digitalWrite(RightMtrIn2, LOW);
analogWrite(enAPin, 0);
analogWrite(enBPin, 0);
}
void turnRight() {
digitalWrite(RightMtrIn1, LOW);
digitalWrite(RightMtrIn2, LOW);
analogWrite(enAPin, leftMotorSpeed);
analogWrite(enBPin, rightMotorSpeed);
}
void scanUltrasonic() {
for (int angle = 0; angle <= 180; angle += 15) {
ultrasonicServo.write(angle);
delay(500); // Adjust as needed
distanceValue = getUltrasonicDistance();
if (distanceValue < 20) {
break;
}
}
}
float getUltrasonicDistance() {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);