Опять и снова плавный пуск движков

stupidDemon
Offline
Зарегистрирован: 31.01.2020

Народ, делаю танк с аля автопилотом и уткнулся в проблему плавного пуска и торможения. Подскажите способ записи который не будет постоянно сбрасываться и не будет зацикливаться только на одной ситуации.

Проблема в том, что как только я пытаюсь вписать плавный разгон. Он либо начинает плавно разгоняться и сбрасывать скорость, либо просто разгонится и при появлении препятствия не видит его. Это рабочая версия кода, без плавностей

Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему), 

 
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Вставьте код правильно. Как это сделать - есть приколоченная тема на форуме.

stupidDemon
Offline
Зарегистрирован: 31.01.2020

#include <NewPing.h>
#define PIN_TRIG 12
#define PIN_ECHO 11
#define MAX_DISTANCE 400
#define SMOOTH_TIME 200
NewPing sonar(PIN_TRIG, PIN_ECHO, MAX_DISTANCE);
unsigned long currentTime;
 
 
const int PIN_IK_LEFT = 6;
const int PIN_IK_RIGHT = 7;
// Данные с датчика Y63
 
 
void setup() {
  delay(400);
  Serial.begin(9600);
  pinMode (5, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (8, OUTPUT);
  pinMode (2, OUTPUT);
  pinMode (PIN_TRIG, OUTPUT);
  pinMode (PIN_ECHO, INPUT);
pinMode(PIN_IK_LEFT, INPUT);
pinMode(PIN_IK_RIGHT, INPUT);
 
}
void loop() {
 
  // Получаем значение от датчика расстояния и сохраняем его в переменную
unsigned int distance = sonar.ping_cm();
  // Печатаем расстояние в мониторе порта
  //Serial.print(distance);
  //Serial.println("см");
boolean left = digitalRead(PIN_IK_LEFT);
boolean right = digitalRead(PIN_IK_RIGHT);
if (millis() - currentTime > 50)
      {
      currentTime = millis();
      if (distance >= 11 && left == true && right == true)
      {
      Serial.print(distance);
      Serial.println("см");  
      digitalWrite (8, HIGH);
      digitalWrite (5, HIGH);
      digitalWrite (4, LOW);
      digitalWrite (2, LOW);    
        
      }
      else if (distance < 10 && left == true && right == true)
      {
      Serial.println("смAAAAAA");
      digitalWrite (8, LOW);
      digitalWrite (5, HIGH);
      digitalWrite (4, LOW);
      digitalWrite (2, LOW); 
  
      }
      
      else if (distance >= 11 && left == false && right == true)
      {
      Serial.println("bbbbb");
      Serial.println("BBBBB");
      digitalWrite (8, LOW);
      digitalWrite (5, HIGH);
      digitalWrite (4, HIGH);
      digitalWrite (2, LOW); 
      }
      else if (distance < 10 && left == false && right == true)
      {
      Serial.println("ccccccc1");
      Serial.println("CCCCCCC12");
      digitalWrite (8, LOW);
      digitalWrite (5, HIGH);
      digitalWrite (4, HIGH);
      digitalWrite (2, LOW); 
      }
      else if (distance >= 11 && left == true && right == false)
      {
      Serial.println("12");
      Serial.println("21");
      digitalWrite (8, HIGH);
      digitalWrite (5, LOW);
      digitalWrite (4, LOW);
      digitalWrite (2, HIGH); 
      }
      else if (distance < 10 && left == true && right == false)
      {
      Serial.println("rrrrrrr2");
      Serial.println("RRRRRRR23");
      digitalWrite (8, HIGH);
      digitalWrite (5, LOW);
      digitalWrite (4, LOW);
      digitalWrite (2, HIGH);
      }
      else if (distance < 10 && left == false && right == false)
      {
      Serial.println("zzzzz3");
      Serial.println("ZZZZZ34");
      digitalWrite (8, LOW);
      digitalWrite (5, LOW);
      digitalWrite (4, HIGH);
      digitalWrite (2, HIGH);
      }
      else if (distance >= 10 && left == false && right == false)
      {
      Serial.println("xxxxx4");
      Serial.println("XXXXX45");
      digitalWrite (8, HIGH);
      digitalWrite (5, LOW);
      digitalWrite (4, LOW);
      digitalWrite (2, HIGH);
      }
  }
}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

stupidDemon пишет:

Проблема в том, что как только я пытаюсь вписать плавный разгон.

Т.е. проблема в плавном разгоне?

stupidDemon пишет:

Это рабочая версия кода, без плавностей

И что она здесь делает? Нахрена она нам, если она не показывает проблемы?