#1 2018-12-10 20:08:26

Бодя96
Учасник
Зареєстрований: 2018-10-28
Повідомлень: 24

Кому не лінь, прошу, допоможіть розібратися з проблемою в коді

Всім доброго вечора, пробую зробити паузи через millis () але якось не вірно, один раз зчитуються покази x і y (інфрачервоних датчиків), а другий раз вже пропускаються і відразу йде рух, якщо хто може, дуже прошу поясніть в чому проблема, спасибі

if (incomingByte == '#') //опитується символ при натисканні кнопки чи написанні символа
    {//Auto
     
      x = sensor.readRangeSingleMillimeters();    //присвоюються х
      mySerial.print(x);

      mySerial.println();

      delay(2000);
       y = sensor2.readRangeSingleMillimeters();    //присвоюються y
       mySerial.print(y);

      mySerial.println();
      delay(2000);
      if ( x > y )
      {
      if ((abs( x - y ) > 50) && (abs( x - y ) < 2000))
      {
      while ((abs ( x - y ) > 50) && ((abs ( x - y ) < 2000)))// Якщо відстань зліва більша від відстані справа
     { mySerial.println ("Зліва більша");
     time = millis();
delay(1000);
if (((millis() - time) > 1000) && ((millis() - time) < 2000))
delay(1000);

if (((millis() - time) > 2000) && ((millis() - time) < 3000))
{
x = sensor.readRangeSingleMillimeters();    //присвоюються х
mySerial.print(x);
mySerial.println();
delay(1000);
}

if (((millis() - time) > 4000) && ((millis() - time) < 5000))
{
y = sensor2.readRangeSingleMillimeters();    //присвоюються y
mySerial.print(y);
mySerial.println();
delay(1000);
}

if (((millis() - time) > 5000) && ((millis() - time) < 6000))
delay(1000);

if ((sensor.timeoutOccurred()) || (sensor2.timeoutOccurred())) {
       mySerial.println("Ти не пройдеш! Таймаут датчика");
       resetFunc(); //вызываем reset
      }
      
      else if ((!sensor.timeoutOccurred()) || (!sensor2.timeoutOccurred())) {
       



   /*     if ((abs( x - y ) > 5000 ) && (abs( x - y ) < 7000 ) )    //якщо модуль різниці зліва і справа в межах 5000 7000
{ mySerial.println ("від 7 до 5 м");
          digitalWrite(IN1, HIGH);     
           delay(1000);                               
          digitalWrite(IN3, HIGH);  
          delay(1000);                              
          digitalWrite(IN1, LOW);
          digitalWrite(IN3, LOW); 

          digitalWrite(IN2, HIGH);  
          delay(1000);
          digitalWrite(IN3, HIGH);  
          delay(1000);
           digitalWrite(IN2, LOW);  
          digitalWrite(IN3, LOW);  
}
 if ((abs( x - y ) > 2000 ) && (abs( x - y ) < 5000 ) )    //якщо модуль різниці зліва і справа в межах 2000 5000
{mySerial.println ("від 5 до 2 м");
         
          digitalWrite(IN1, HIGH);  
          delay(1000);
          digitalWrite(IN3, HIGH);  
          delay(500);
           digitalWrite(IN1, LOW);  
          digitalWrite(IN3, LOW);  

          digitalWrite(IN2, HIGH);  
          delay(1000);
          digitalWrite(IN3, HIGH);  
          delay(700);
          digitalWrite(IN2, LOW);  
          digitalWrite(IN3, LOW); 
}*/
 if ((( x - y ) > 50) && (( x - y ) < 2000))     //якщо модуль різниці зліва і справа в межах 50 2000
{mySerial.println ("від 50 до 2 м");
        digitalWrite(IN1, HIGH);  // Вліво
          delay(100);
          digitalWrite(IN1, LOW); // Повернуло
          digitalWrite(IN3, HIGH);  // Вперед
          delay(500);
          digitalWrite(IN3, LOW);  // Під'їхало

          digitalWrite(IN2, HIGH);  // Вправо
          delay(100);
          digitalWrite(IN2, LOW);  // Повернуло
          digitalWrite(IN3, HIGH);  // Вперед
          delay(200);
          digitalWrite(IN3, LOW);  // Під'їхало
}
if  ( abs(x - y) <= 50 ){
    mySerial.println ("Середина досягнута");
break;}
}

else if (abs( x - y) > 2000){
  goto label;
  }
  }}
}

if ( y > x )
      {
      if ((abs( x - y ) > 50) && (abs( x - y ) < 2000))
      {
      while ((abs ( x - y ) > 50) && ((abs ( x - y ) < 2000)))// Якщо відстань зліва більша від відстані справа
     { mySerial.println ("Справа більша");
     time = millis();
delay(1000);
if (((millis() - time) > 1000) && ((millis() - time) < 2000))
delay(1000);

if (((millis() - time) > 2000) && ((millis() - time) < 3000))
{
x = sensor.readRangeSingleMillimeters();    //присвоюються х
         mySerial.print(x);
      mySerial.println();
delay(1000);
}
if (((millis() - time) > 3000) && ((millis() - time) < 4000))
{
y = sensor2.readRangeSingleMillimeters();    //присвоюються y
mySerial.print(y);
mySerial.println();
delay(1000);
}
if (((millis() - time) > 4000) && ((millis() - time) < 5000))
delay(1000);
if ((sensor.timeoutOccurred()) || (sensor2.timeoutOccurred())) {
       mySerial.println("Ти не пройдеш! Таймаут датчика");
       resetFunc(); //вызываем reset
      }
      
      else if ((!sensor.timeoutOccurred()) || (!sensor2.timeoutOccurred())) {
        

     /*   if ((abs( y - x) > 5000 ) && (abs(y - x) < 7000 ) )
{
          digitalWrite(IN2, HIGH);  
          delay(1000);
          digitalWrite(IN3, HIGH);  
          delay(1000);
          digitalWrite(IN2, LOW);  
          digitalWrite(IN3, LOW);  

          digitalWrite(IN1, HIGH);  
          delay(1000);
          digitalWrite(IN3, HIGH);  
          delay(1000);
          digitalWrite(IN1, LOW);  
          digitalWrite(IN3, LOW);  
}
 if ((abs( y - x ) > 2000 ) && ( abs( y - x ) < 5000 ) )
{
          digitalWrite(IN2, HIGH);  //Вліво
          delay(200);
          digitalWrite(IN3, HIGH);  // Вперед
          delay(500);
           digitalWrite(IN2, LOW);  //Повернуло
          digitalWrite(IN3, LOW);  // Під'їхало

          digitalWrite(IN1, HIGH);  //Вправо
          delay(200);
          digitalWrite(IN3, HIGH);  // Вперед
          delay(700);
           digitalWrite(IN1, LOW);  //Повернуло
          digitalWrite(IN3, LOW);  // Під'їхало
}*/
 if ((abs( y - x ) > 50 ) && ( abs(y - x)  < 2000 ) )
{
          mySerial.println ("від 50 до 2 м");
          digitalWrite(IN2, HIGH);  //Вправо
          delay(100);
           digitalWrite(IN2, LOW);  //Повернуло
          digitalWrite(IN3, HIGH);  // Вперед
          delay(400);
          digitalWrite(IN3, LOW);  // Під'їхало

          digitalWrite(IN1, HIGH);  //Вліво
          delay(100);
            digitalWrite(IN2, LOW);  //Повернуло
          digitalWrite(IN3, HIGH);  // Вперед
          delay(200);
           digitalWrite(IN1, LOW);  //Повернуло
          digitalWrite(IN3, LOW);  // Під'їхало
}

}
if  ( abs (x - y) <= 50 ){
    mySerial.println ("Середина досягнута");
break;}
}}
else if (abs( x - y) > 2000){
  goto label;
  }}}

те як працювала програма нижче:

1156
204
1134
623
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
Зліва більша
від 50 до 2 м
00
01
02
03
04
addresses set

Неактивний

#2 2019-01-31 19:28:36

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 411

Re: Кому не лінь, прошу, допоможіть розібратися з проблемою в коді

Що? Усім лінь?

Неактивний

#3 2019-01-31 19:44:44

qwone
Учасник
Зареєстрований: 2016-07-25
Повідомлень: 143

Re: Кому не лінь, прошу, допоможіть розібратися з проблемою в коді

дивлюся на код та й думку гадаю, навіщо автор скетчу лайно написав.

Неактивний

#4 2019-01-31 21:39:54

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 874

Re: Кому не лінь, прошу, допоможіть розібратися з проблемою в коді

Бодя, вы бы сначала разъяснили свою задачу, потом что у вас не получается как задумано.
а так сидеть и додумывать что в вашем коде происходит вряд ли кто будет.

Неактивний

#5 2019-02-04 21:45:24

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: Кому не лінь, прошу, допоможіть розібратися з проблемою в коді

К сожалению я не силен в  украинском, но как понял вы пытаетесь сделать паузы с millis.
Хочу посоветовать хорошую библиотеку "SimpleTimer.h". https://playground.arduino.cc/Code/SimpleTimer
сам часто ей пользуюсь и не надо заморачиваться с millis.

Остання редакція Selen (2019-02-04 21:45:57)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму