Вопрос новичка по поводу кода для робота .

kubzero
Offline
Зарегистрирован: 27.10.2015

Доброго времени суток. Уважаемые знатоки есть код для робота .Проблема состоит в том, есть функции иф и при выполнении этого действия хотелось бы чтоб этот код выполнялся в течение определенного времени . Скажем в поворот в течение 1 секунды . Но если банально добавить delay (1000)  тогда тормозится сервопривод с ультразвуковым датчиком . Как лучше сделать чтоб выполнялось действие в течение 1 секунды не мешая сканированию местности. Я в этом новичек и код далеко не идеален но если не сложно помогите .Заранее огромное спасибо .

 

#define trigPin 2       //pin na ultrazvuk
#define echoPin 4       //pim na ultrazvuk 
#define dirmotor1 13          //edem vpered A
#define dirmotor2 12          //nazad A
#define motor1 11        //edem vpered B     BINDIM KNOPKI//
#define motor2 3         //edem nazad B
#define breakmotor1 9        //tormoz
#define breakmotor2 8         //ntormoz
#include <Servo.h>       //servoprivod
Servo Turn;                   // SETUP!!
int pos = 0;                  //
void setup() {                //
  Turn.attach(5);             //    
  Serial.begin(9600);         //
  pinMode(trigPin, OUTPUT);   //PROgRAMiruEM gowaju VihoDI ,SerVOvpRIvoD Iporti
  pinMode(echoPin, INPUT);    //
  pinMode(motor1, OUTPUT);       //
  pinMode(motor2, OUTPUT);       //
  pinMode(dirmotor1, OUTPUT);     //
  pinMode(dirmotor2, OUTPUT);     //   
  pinMode(breakmotor1, OUTPUT);     //
  pinMode(breakmotor2, OUTPUT);
}
void loop() {
  for(pos=0;pos < 180; pos+= 20)
  
  {
    Turn.write(pos);
  delay(60);
   int distance,duration;
digitalWrite(trigPin, HIGH);
delay(15);
digitalWrite(trigPin, LOW);
duration=pulseIn(echoPin, HIGH);
distance=(duration/2)/29.1;
Serial.println("");
Serial.println(distance);
if(distance <= 20 || distance >= 15)  {   //esli distancija menshe 15ilibolwe 0 on delaet povorot vprava ili vlevo
if( pos > 0 || pos < 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 50);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 50);}}
if(distance <= 20 || distance >= 15)  {   //esli distancija menshe 15ilibolwe 0 on delaet povorot vprava ili vlevo
if( pos < 180 || pos > 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 50);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 50);}}
if(distance < 15 || distance > 0)  {   //esli distancija menshe 10ilibolwe 0 
if( pos > 0 || pos < 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);//zdaet zadom pravoj shassi
analogWrite(11, 100);
digitalWrite(12,HIGH);//zdaet zadom pravoj shassi
analogWrite(3, 100);}}
if(distance < 15 || distance > 0)  {   //esli distancija menshe 10ilibolwe 0 
if( pos < 180 || pos > 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,HIGH);//zdaet zadom pravoj shassi
analogWrite(11, 100);
digitalWrite(12,LOW);//zdaet zadom pravoj shassi
analogWrite(3, 100);}}
if(distance > 20 || distance < 0){   
if( pos > 0 || pos < 90){// esli distancija bolwe 15 edem vpered
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 150);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 150);}}
if(distance > 20 || distance < 0){   
if( pos < 180 || pos > 90){// esli distancija bolwe 15 edem vpered
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 150);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 150);}}
  }
  for(pos=180; pos>=1;pos-= 20)
  {
    Turn.write(pos);
    delay(60);
   
     int distance,duration;
digitalWrite(trigPin, HIGH);
delay(15);
digitalWrite(trigPin, LOW);
duration=pulseIn(echoPin, HIGH);
distance=(duration/2)/29.1;
Serial.println("");
Serial.println(distance);
    
if(distance <= 20 || distance >= 15)  {   //esli distancija menshe 15ilibolwe 0 on delaet povorot vprava ili vlevo
if( pos > 0 || pos < 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 200);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 200);}}
if(distance <= 20 || distance >= 15)  {   //esli distancija menshe 15ilibolwe 0 on delaet povorot vprava ili vlevo
if( pos < 180 || pos > 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 200);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 200);}}
if(distance < 15 || distance > 0)  {   //esli distancija menshe 10ilibolwe 0 
if( pos > 0 || pos < 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);//zdaet zadom pravoj shassi
analogWrite(11, 200);
digitalWrite(12,HIGH);//zdaet zadom pravoj shassi
analogWrite(3, 200);}}
if(distance < 15 || distance > 0)  {   //esli distancija menshe 10ilibolwe 0 
if( pos < 180 || pos > 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,HIGH);//zdaet zadom pravoj shassi
analogWrite(11, 200);
digitalWrite(12,LOW);//zdaet zadom pravoj shassi
analogWrite(3, 200);}}
if(distance > 20 || distance < 0){   
if( pos > 0 || pos < 90){// esli distancija bolwe 15 edem vpered
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 85);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 85);}}
if(distance > 20 || distance < 0){   
if( pos < 180 || pos > 90){// esli distancija bolwe 15 edem vpered
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 150);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 150);}}
}}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Где-то на этом форуме на самом видно месте нужно написать:

"Не приступайте к программированию, пока не прочтете это: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay "

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

kubzero пишет:

Проблема состоит в том, есть функции иф ...

Оххх.