gabbyshimoni icon

מבריח יונים

gabbyshimoni | PRO | 04/29/18 06:30:09 AM UTC | 0 ⭐ | 369 👁️ | Never ⏰ | []
C++ |

3.44 KB

|

None

|

0 👍

/

0 👎

// הגדרת מנוע סרוו לתנועות הפחדה
#include <Servo.h>
Servo handsServo;
#define srvPin 10
 
// משתנים לחיישן אולטראסוני
#define trigPin 8
#define echoPin 9
long duration, distance;
 
// נורות חיווי על מצב הפעלה
#define powerOnLed 3
#define yonaLed 4
 
// משתנים של מפסקי גבול סוף מסילה
#define startLSPin 5
#define endLSPin 6
int startLSValue = 0;
int endLSValue = 0;
 
//משתנים למנוע רכב רובוטי
#define motorPin1 11
#define motorPin2 12
 
// משתנה לחיבור הזמזם
#define buzPin 7
 
// משתנה כיוון הנסיעה
int dir = 0; // 0- back or stop, 1 - froward
 
void setup() {
  Serial.begin(9600);
  handsServo.attach(srvPin);
  // מצב התחלתי של זרועות הדחליל
  handsServo.write(0);
 
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
  pinMode(powerOnLed, OUTPUT);
  // הדלק נורה כאשר יש מתח במערכת
  digitalWrite(powerOnLed, HIGH);
  pinMode(yonaLed, OUTPUT);
  // מצב התחלתי לא זוהתה יונה
  digitalWrite(yonaLed, LOW);
 
  pinMode(startLSPin, INPUT);
  pinMode(endLSPin, INPUT);
 
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
 
}
 
void loop() {
 
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration / 2 / 29.1;
 
  if (distance < 100) {
    //זוהתה יונה במרחק של פחות ממטר אחד
    endLSValue = digitalRead(endLSPin);
    // כל עוד הרכב לא היגיע לקצה המסילה תבצע את הפעולות הבאות
    while (endLSValue == LOW) {
      // הפעל מנועים בנסיעה קדימה
      digitalWrite(motorPin1, HIGH);
      digitalWrite(motorPin2, LOW);
      // הפעל זמזם להבריח יונים
      tone(buzPin, 4000);
      // הדלק נורת זיהוי יונה
      digitalWrite(yonaLed, HIGH);
      // הפעל מנוע ידי דחליל הלוך וחזור
      handsServo.write(90);
      delay(200);
      handsServo.write(00);
      delay(200);
 
      // קרא מפסקי גבול כדי לוודא שהרכב נמצא בתחילת המסילה
      endLSValue = digitalRead(endLSPin);
    }
    // עצור מנועים עם ההגעה לקצה המסילה
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
 
    startLSValue = digitalRead(startLSPin);
    // כל עוד הרובוט לא שב עד קצה המסילה תבצע את הפעולות הבאות
    while (startLSValue == LOW) {
      // הפעל מנועים בנסיעה לאחור
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, HIGH);
      // השתק זמזם
      noTone(buzPin);
      // כבה יונה חיווי על המסילה
      digitalWrite(yonaLed, LOW);
      // עצור ידי דחליל
      handsServo.write(0);
      delay(200);
 
      // קרא מפסקי גבול כדי לוודא שהרכב נמצא בתחילת המסילה
      startLSValue = digitalRead(startLSPin);
    }
    // עצור מנועים עם ההגעה לקצה המסילה
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
 
  }
 
  else {
    digitalWrite(yonaLed, LOW);
  }
}

Comments