Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 85 additions & 0 deletions Jordan
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#include <Servo.h>

const int trigPin = 9;
const int echoPin = 10;
const int motorLeft = 5;
const int motorRight = 6;

Servo servo;
int angleCenter = 90;

void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(motorLeft, OUTPUT);
pinMode(motorRight, OUTPUT);
Serial.begin(9600);
servo.attach(3);
servo.write(angleCenter);
}

long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
return pulseIn(echoPin, HIGH) * 0.034 / 2;
}

long getAverageDistance() {
long total = 0;
for (int i = 0; i < 5; i++) {
total += getDistance();
delay(10);
}
return total / 5;
}

int scanAngle(int angle) {
servo.write(angle);
delay(300);
return getAverageDistance();
}

void loop() {
long distance = getAverageDistance();
Serial.println(distance);

if (distance == 0 || distance > 300) {
digitalWrite(motorLeft, LOW);
digitalWrite(motorRight, LOW);
return;
}

if (distance < 20) {
// توقّف مؤقت
digitalWrite(motorLeft, LOW);
digitalWrite(motorRight, LOW);
delay(200);

// فحص الاتجاهات
int left = scanAngle(150);
int right = scanAngle(30);
servo.write(angleCenter);
delay(100);

if (left > right) {
// انعطاف لليسار
digitalWrite(motorLeft, HIGH);
digitalWrite(motorRight, LOW);
} else {
// انعطاف لليمين
digitalWrite(motorLeft, LOW);
digitalWrite(motorRight, HIGH);
}

delay(500); // وقت الانعطاف
} else {
// حركة أمامية
digitalWrite(motorLeft, HIGH);
digitalWrite(motorRight, HIGH);
}

delay(50); // تخفيف الضغط على الحلقة
}