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();
}
}