Я пишу код для беспроводного робота с дистанционным управлением с механизмом предотвращения препятствий и краев. Таким образом, здесь мы управляем роботом с помощью мобильного устройства, и теперь, если перед ним находится препятствие или он собирается упасть с высоты, он избежит его. Здесь для предотвращения препятствий я использовал ультразвуковой датчик HC-05. Но я получаю расстояние, пройденное ультразвуковым датчиком ноль. Зачем?
`
#include<Servo.h>
Servo myservo;
const int trigPin = 2;
const int echoPin = 4;
String voice;
long duration;
int distance;
int
M11 = 13,
M12 = 12,
M21 = 11,
M22 = 10;
void stay(){
digitalWrite(M11, LOW);
digitalWrite(M12, LOW);
digitalWrite(M21, LOW);
digitalWrite(M22, LOW);
}
void forward() {
digitalWrite(M11, HIGH);
digitalWrite(M12, LOW);
digitalWrite(M21, HIGH);
digitalWrite(M22, LOW);
}
void backward(){
digitalWrite(M11, LOW);
digitalWrite(M12, HIGH);
digitalWrite(M21, LOW);
digitalWrite(M22, HIGH);
}
void left(){
digitalWrite(M11, LOW);
digitalWrite(M12, LOW);
digitalWrite(M21, HIGH);
digitalWrite(M22, LOW);
delay(1000);
digitalWrite(M11,HIGH);
}
void right(){
digitalWrite(M11, HIGH);
digitalWrite(M12, LOW);
digitalWrite(M21, LOW);
digitalWrite(M22, LOW);
delay(1000);
digitalWrite(M21,HIGH);
}
int dist()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance= duration*0.034/2;
Serial.println(distance);
return distance;
}
void Avoid(int d)
{
int d1,d2;
if(d<18 || (digitalRead( 9)==1) || (digitalRead( 8)==0))
{
stay();
delay(500);
backward();
delay(650);
stay();
myservo.write(25);
d1=dist();
delay(650);
myservo.write(90);
delay(500);
myservo.write(180);
d2=dist();
delay(650);
myservo.write(140);
if(d1>d2)
{
left();
delay(800);
}
else
{
right();
delay(800);
}
}
}
void setup() {
Serial.begin(9600);
myservo.attach(7);
pinMode(8,INPUT);
pinMode(9,INPUT);
pinMode(M11, OUTPUT);
pinMode(M12, OUTPUT);
pinMode(M21, OUTPUT);
pinMode(M22, OUTPUT);
}
void loop() {
int d,d1,d2;
d=dist();
Serial.println("D:");
Serial.println(d);
myservo.write(140);
while (Serial.available())
{ //Check if there is an available byte to
read
delay(10); //Delay added to make thing stable
char c = Serial.read();
if (c == '#') {break;}
voice += c;
}
if (voice.length() > 0) {
Serial.println(voice);
if(voice == "forward") {forward();} //Move Robot Forward (Call
Function)
else if(voice == "backward"){backward();} //Move Robot Backward
(Call Function)
else if(voice == "left"){left();} //Move Robot Left (Call
Function)
else if(voice == "right"){right();} //Move Robot right (Call
Function)
else if(voice == "stop"){stay();} //Stop Robot (Call Function)
voice="";
}
Avoid(d);
}