Делаю робот-пылесос и для определения препятствий стоят два датчика HC-SR04.Глаза должны работать по отдельности для поворота в определённую сторону.Но работают сразу два.В Из-за этого если препятствие видно отдельно на левом или правом ,то робот не поворачивает. Помогите пожалуйста. Вот код: //Глаза //Левый #define left_trig 2;//левый выход #define left_echo 3;//левый вход //Правый #define right_trig 4;//правый выход #define right_echo 5;//правый вход //Двигатель //Левый #define ENA 6 #define IN1 7 #define IN2 8 //Правый #define ENB 9 #define IN3 10 #define IN4 11 //переменные для расчётов unsigned int impulseTime_left=0;//Имульс левого глаза unsigned int impulseTime_right=0;//Импульс правого глаза unsigned int distance_left_cm=0;//дистанция с левого глаза unsigned int distance_right_cm=0;//дистанция с правого глаза int xx=2; //делитель void setup() { //Назначение пинов pinMode(2,OUTPUT);//левый выход pinMode(4,OUTPUT);//правый выход pinMode(3,INPUT);//левый вход pinMode(5,INPUT);//правый вход pinMode(6,OUTPUT);//обороты левого pinMode(9,OUTPUT);//обороты правого pinMode(7,OUTPUT);//двигатель pinMode(8,OUTPUT);//двигатель pinMode(10,OUTPUT);//двигатель pinMode(11,OUTPUT);//двигатель } void w(){ //вперёд digitalWrite(7, LOW); digitalWrite(8, HIGH); digitalWrite(10, LOW); digitalWrite(11, HIGH); analogWrite(6, 50); analogWrite(9, 50); analogWrite(6, 100); analogWrite(9, 100); } void a(){ //налево digitalWrite(7, HIGH); digitalWrite(8, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); analogWrite(6, 50); analogWrite(9, 50); analogWrite(6, 100); analogWrite(9, 100); } void d(){ //направо digitalWrite(7, LOW); digitalWrite(8, HIGH); digitalWrite(10, HIGH); digitalWrite(11, LOW); analogWrite(6, 50); analogWrite(9, 50); analogWrite(6, 100); analogWrite(9, 100); } //Бесконечный цикл void loop() { //Глаза смотрят/проверяют //Левый глаз digitalWrite(2, HIGH);//вкл и импульс вышел delayMicroseconds(10);//длинна импулся 10милисекунд digitalWrite(2, LOW);//выкл impulseTime_left=pulseIn(3, HIGH);//приёмник вкл distance_left_cm=impulseTime_left/58; //перевод дистаниции в см delay(100);// минус помехи delay(200);//на всякий случай digitalWrite(4, HIGH);//вкл и импульс вышел delayMicroseconds(10);//длинна импулся 10милисекунд digitalWrite(4, LOW);//выкл impulseTime_right=pulseIn(5, HIGH);//приёмник вкл distance_right_cm=impulseTime_right/58; //перевод дистаниции в см delay(100);//минус помехи //Направление движения if (distance_left_cm <= 15 && distance_right_cm <= 15 ) {w(); } //нет препятствий //вперёд if(distance_left_cm <= 15 && distance_right_cm <= 5 ) {d();} //препятствие с права //поворот на право if(distance_left_cm <= 5 && distance_right_cm <= 15 ) {a();} //препятствие слева //поворот на лево if (distance_left_cm <= 5 && distance_right_cm <= 5 ) { if (random(0,100)%xx ) {a();} } else{d();} //препятствие в плотную // }
Ну, сам-то смотри. Вот твои условия 1. if (distance_left_cm <= 15 && distance_right_cm <= 15 ) 2. if(distance_left_cm <= 15 && distance_right_cm <= 5 ) 3. if(distance_left_cm <= 5 && distance_right_cm <= 15 ) 4. if (distance_left_cm <= 5 && distance_right_cm <= 5 ) Подумай, какое условие сработает, если левое 4, а правое = 10. Одно сработает? Или несколько сразу?