Rover Eda 3

Eda už umí couvat. Činí tak, když má kolem sebe málo místa (< 35 cm). Jako správný rover při tom pípá, protože za sebe nevidí. Bzučák je zapojen na pin A5, jinak zapojení zůstává jako u Edy 2.

#include <Servo.h> // připojení knihovny k programu

#define buzzer A5
#define trig 13
#define echo 12
#define ENA 11
#define IN1 10
#define IN2 9
#define IN3 8
#define IN4 7
#define ENB 6

int pos = 90; // počáteční pozice je 90 stupňů
long levaVzdalenost=0;
long pravaVzdalenost=0;
Servo SG90;

void vpred(){
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void vlevo(){
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void vpravo(){
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void vzad(){
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void stat(){
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

long vzdalenost(){
  long cas, delka;
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  cas = pulseIn(echo, HIGH);
  delka = (cas/2) / 29.1;
  return delka;
}

void setup() {
  SG90.attach(3);   // servo na pinu 3
  for (byte i=6; i<=11;i++) {
    pinMode(i,OUTPUT);
  }
  pinMode(buzzer, OUTPUT); // jako výstup
  pinMode(trig,OUTPUT);
  pinMode(echo,INPUT);
  digitalWrite(ENA,HIGH);
  digitalWrite(ENB,HIGH);
  randomSeed(analogRead(12));
  delay(2000); // odlozeny start o 2 s
}

void loop() {
  if(vzdalenost()<35) {
    stat();
    SG90.write(1);
    delay(500);
    pravaVzdalenost=vzdalenost();
    SG90.write(179);
    delay(500);
    levaVzdalenost=vzdalenost();
    SG90.write(90);
    delay(50);
    if(pravaVzdalenost<35 && levaVzdalenost<35){
      vzad();
      for(byte i=0;i<3;i++){
        tone(buzzer,2400);  // 2400 Hz
        delay(100);         // bzučí 0,1 sec
        noTone(buzzer);     // vypnout bzučák
        delay(100);         // ticho 0,1 sec
      }
    }
    else if(pravaVzdalenost>levaVzdalenost){
      vpravo();
      delay(300);
    }
    else{
      vlevo();
      delay(300);
    }
  }
  else {
    vpred();
    delay(150);
  }
  while(millis() > 120000) { // stop po 2 min
    stat();
  }
}