Проблемы в сборке Robocar-3 Bluetooth arduino uno

strinsolit
Offline
Зарегистрирован: 08.03.2022

Добрый день. Я новичок в сборке роботов. Я собрала робота, всё работает, залила прошивку, но робот неправильно реагирует на клавиши. При нажатии "вперед" "назад" робот должен ехать по нужному направлению, а при нажатии "право" "лево" должен поворачить. Но при нажатии "вперед" робот крутится в правую сторону, а при нажатии "назад" крутится в левую сторону. При нажатии "право" и "лево" поворачивается только в правую сторону (или при удержании -крутится в неё). 

Прошивка написана на языке "С", я скопировала её из документов, на сайте где заказывали этого робота.  Подскажите пожалуйста, как можно решить эту проблему? 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018
strinsolit
Offline
Зарегистрирован: 08.03.2022
[code]
char getstr; 
int Left_motor_go=8;     //Левый мотор вперед(IN1)
int Left_motor_back=9;     //Задний левый мотор(IN2)
int Right_motor_go=10;    // Правый мотор вперед(IN3)
int Right_motor_back=11;    // Задний правый мотор(IN4)

void setup()
{
  //Инициализирует привод мотора IO как режим выхода
   Serial.begin(9600);
  pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)
  pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
  pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) 
  pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)
}
void run()
{
  digitalWrite(Right_motor_go,HIGH);  // Правый мотор вперед
  digitalWrite(Right_motor_back,LOW);     
 //analogWrite(Right_motor_go,150);//PWM 0 ~ 255 скорость
  //analogWrite(Right_motor_back,0);
  digitalWrite(Left_motor_go,LOW);  // Левый мотор вперед
  digitalWrite(Left_motor_back,HIGH);
  //analogWrite(Left_motor_go,0);//PWM 0 ~ 255 скорость
  //analogWrite(Left_motor_back,150);
  //delay(time * 100);   //Время выполнения можно отрегулировать  
}

void brake()         //Тормоз, стоянка
{
  digitalWrite(Right_motor_go,LOW);
  digitalWrite(Right_motor_back,LOW);
  digitalWrite(Left_motor_go,LOW);
  digitalWrite(Left_motor_back,LOW);
  
}

void left()
{
  digitalWrite(Right_motor_go,HIGH);	// Правый мотор вперед
  digitalWrite(Right_motor_back,LOW);
  //analogWrite(Right_motor_go,150); 
  //analogWrite(Right_motor_back,0);//PWM比例0~255调速
  digitalWrite(Left_motor_go,LOW);   //Задняя часть левого колеса
  digitalWrite(Left_motor_back,LOW);
  //analogWrite(Left_motor_go,0); 
  //analogWrite(Left_motor_back,0);//PWM比例0~255调速
  //delay(time * 100);	//Время выполнения можно отрегулировать  
}

void spin_left(int time)         //Повернуть налево (левое колесо назад, правое колесо вперед)
{
  digitalWrite(Right_motor_go,HIGH);	// Правый мотор вперед
  digitalWrite(Right_motor_back,LOW);
  //analogWrite(Right_motor_go,200); 
  //analogWrite(Right_motor_back,0);//PWM比例0~255调速
  digitalWrite(Left_motor_go,HIGH);   //Задняя часть левого колеса
  digitalWrite(Left_motor_back,LOW);
  //analogWrite(Left_motor_go,200); 
  //analogWrite(Left_motor_back,0);//PWM比例0~255调速
  //delay(time * 100);	//Время выполнения можно отрегулировать  
}
void right()
{
  digitalWrite(Right_motor_go,LOW);   //右电机后退
  digitalWrite(Right_motor_back,LOW);
  //analogWrite(Right_motor_go,0); 
 // analogWrite(Right_motor_back,0);//PWM比例0~255调速
  digitalWrite(Left_motor_go,LOW);//左电机前进
  digitalWrite(Left_motor_back,HIGH);
  //analogWrite(Left_motor_go,0); 
  //analogWrite(Left_motor_back,150);//PWM比例0~255调速
  //delay(time * 100);	//执行时间,可以调整  
}

void spin_right(int time)        //Повернуть направо (правое колесо назад, левое колесо вперед)
{
  digitalWrite(Right_motor_go,LOW);   //右电机后退
  digitalWrite(Right_motor_back,HIGH);
  //analogWrite(Right_motor_go,0); 
 // analogWrite(Right_motor_back,200);//PWM比例0~255调速
  digitalWrite(Left_motor_go,LOW);//左电机前进
  digitalWrite(Left_motor_back,HIGH);
 // analogWrite(Left_motor_go,0); 
 // analogWrite(Left_motor_back,200);//PWM比例0~255调速
  //delay(time * 100);	//执行时间,可以调整    
}
void back()
{
  digitalWrite(Right_motor_go,LOW);  //右轮后退
  digitalWrite(Right_motor_back,HIGH);
 // analogWrite(Right_motor_go,0);
 // analogWrite(Right_motor_back,150);//PWM比例0~255调速
  digitalWrite(Left_motor_go,HIGH);  //左轮后退
  digitalWrite(Left_motor_back,LOW);
  //analogWrite(Left_motor_go,150);
  //analogWrite(Left_motor_back,0);//PWM比例0~255调速
  //delay(time * 100);     //执行时间,可以调整  
}
void loop()
{
  getstr=Serial.read(); // 
  if(getstr=='A') 
  { 
    Serial.println("go forward!"); 
    run();
  } 
  else if(getstr=='B'){ 
    Serial.println("go back!"); 
   back(); 
  } 
  else if(getstr=='C'){ 
    Serial.println("go left!"); 
   left();
  } 
  else if(getstr=='D'){ 
    Serial.println("go right!"); 
   right();
     
  } 
   else if(getstr=='F'){ 
    Serial.println("Stop!"); 
   brake();  
     
  } 
   else if(getstr=='E'){ 
    Serial.println("Stop!"); 
   brake();  
  } 
}



[/code]

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Какая-то путаница. Уж не знаю кто её внёс. Китайские друзья на сайте или автор вопроса уже что-то подправил...

Процедура run() видимо должна двигать машинку вперёд. Если переменные названы осмысленно и двигатели подключены правильно, то уж если Right_motor_go ставим в HIGH а Right_motor_back в LOW, то и Left_motor_go должно быть HIGH а Left_motor_back в LOW. А сейчас они противоположные, вот и крутятся в разные стороны

Дальше не глядел, наверное во всех командах такое есть. Вот почитайте, чтобы осмысленно управление писать:

https://create.arduino.cc/projecthub/ryanchan/how-to-use-the-l298n-motor-driver-b124c5

p.s. Можно конечно у одного из двигателей полярность подлключения (или номера выводов в скетче) поменять, оно и поедет, но тогда логика именования переменных потеряется. Скетч совсем непонятным станет.

 

b707
Offline
Зарегистрирован: 26.05.2017

да там вообще полный бардак, кто-то это явно уже неумело редактировал.

процедуры spin_left() и spin_right() вообще в программе не используются. а между тем именно они как раз выполняют движения вперед и назад :)

ИМХО, тут проще всего переназвать процедуры :)  - взаимно поменять spin_left() и run() , и точно так же spin_right() и back()

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Для начала хотелось бы понять, что за робот...
Проверил вперёд-назад, логически там всё правильно, левая сторона имеет обратное вращение жеж