From e0c684f7522d96bc58d34d892a7312d1dda6a202 Mon Sep 17 00:00:00 2001 From: Eb171767 Date: Wed, 23 Jul 2025 12:30:40 +0300 Subject: [PATCH] Create Jordan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #include const int trigPin = 9; const int echoPin = 10; const int motorLeft = 5; const int motorRight = 6; const int servoPin = 3; const int angleCenter = 90; const int angleLeft = 150; const int angleRight = 30; Servo servo; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(motorLeft, OUTPUT); pinMode(motorRight, OUTPUT); Serial.begin(9600); servo.attach(servoPin); servo.write(angleCenter); } long getDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); return pulseIn(echoPin, HIGH, 20000) * 0.034 / 2; // Timeout added } 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.print("Center: "); 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(angleLeft); int right = scanAngle(angleRight); servo.write(angleCenter); delay(200); // العودة للمنتصف Serial.print("Left: "); Serial.print(left); Serial.print(" | Right: "); Serial.println(right); // اتخاذ القرار if (left > right) { // انعطاف لليسار digitalWrite(motorLeft, LOW); digitalWrite(motorRight, HIGH); delay(500); } else { // انعطاف لليمين digitalWrite(motorLeft, HIGH); digitalWrite(motorRight, LOW); delay(500); } } else { // السير للأمام digitalWrite(motorLeft, HIGH); digitalWrite(motorRight, HIGH); } delay(50); } --- Jordan | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Jordan diff --git a/Jordan b/Jordan new file mode 100644 index 00000000..ceb679e5 --- /dev/null +++ b/Jordan @@ -0,0 +1,94 @@ +#include + +const int trigPin = 9; +const int echoPin = 10; +const int motorLeft = 5; +const int motorRight = 6; +const int servoPin = 3; + +const int angleCenter = 90; +const int angleLeft = 150; +const int angleRight = 30; + +Servo servo; + +void setup() { + pinMode(trigPin, OUTPUT); + pinMode(echoPin, INPUT); + pinMode(motorLeft, OUTPUT); + pinMode(motorRight, OUTPUT); + Serial.begin(9600); + + servo.attach(servoPin); + servo.write(angleCenter); +} + +long getDistance() { + digitalWrite(trigPin, LOW); + delayMicroseconds(2); + digitalWrite(trigPin, HIGH); + delayMicroseconds(10); + digitalWrite(trigPin, LOW); + return pulseIn(echoPin, HIGH, 20000) * 0.034 / 2; // Timeout added +} + +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.print("Center: "); 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(angleLeft); + int right = scanAngle(angleRight); + servo.write(angleCenter); + delay(200); // العودة للمنتصف + + Serial.print("Left: "); Serial.print(left); + Serial.print(" | Right: "); Serial.println(right); + + // اتخاذ القرار + if (left > right) { + // انعطاف لليسار + digitalWrite(motorLeft, LOW); + digitalWrite(motorRight, HIGH); + delay(500); + } else { + // انعطاف لليمين + digitalWrite(motorLeft, HIGH); + digitalWrite(motorRight, LOW); + delay(500); + } + } else { + // السير للأمام + digitalWrite(motorLeft, HIGH); + digitalWrite(motorRight, HIGH); + } + + delay(50); +}