Нужна помощь в написании скетча управления двумя моторами одним и одним джойстиком

logic
Offline
Зарегистрирован: 16.10.2016
Помогите с программой, есть два мотора которые потключены к АРДУИНО УНО, джойстик который подключённые к аналоговым пинам(0 и 1) Необходимо их заставить синхронно работать, при подачи рычага джойстика вперёд( оба крутит вперёд)В ЭТОМ ЖЕ ПОЛОЖЕНИИ при смещении рычага  в лево( Один затухает второй остаёться на полных оборотах)Ну и в право тоже самое, при подачи назад ( оба крутит назад ), на нейтральном положении хода нет. За схему не пинайте, новичок в этом деле. При использовании моего кода оба двигателя просто крутятся впед на полных оборотах. Схема будет использоваться для управления гусиничной машинкой, в дальнейшем планирую добавить радио модули.
#define axis_X 0    // Ось Х подключена к Analog 0
#define axis_Y 1    // Ось Y подключена к Analog 1
int value_X, value_Y;    // Переменные для хранения значений осей
const int in1 = 2;    // direction pin 1
const int in2 = 4;    // direction pin 2
const int ena = 3;    // PWM pin to change speed
const int in3 = 7;    // direction pin 1
const int in4 = 1;    // direction pin 2
const int enb = 5;    // PWM pin to change speed
int fspeed;           // forward speed 
void setup(){

  pinMode(in1, OUTPUT);      // connection to L298n
  pinMode(in2, OUTPUT);      // connection to L298n
  pinMode(ena, OUTPUT);      // connection to L298n
  
  pinMode(in3, OUTPUT);      // connection to L298n
  pinMode(in4, OUTPUT);      // connection to L298n
  pinMode(enb, OUTPUT);      // connection to L298n
}

void loop(){
   digitalWrite(1, LOW);
   value_X = analogRead(axis_X);
  if (axis_X == 125) analogWrite(ena, 0);
   if (axis_X > 125)
   {
    fspeed = map(axis_X, 125, 255, 0, 255);
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    analogWrite(ena, fspeed);
    
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(enb, fspeed);
  }
  if (axis_X < 125)
  {
   
    fspeed = map(axis_X, 0, 125, 255, 0);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    analogWrite(ena, fspeed);
    
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, fspeed);
  }
  
  value_Y = analogRead(axis_Y);
  if (axis_Y == 125) analogWrite(enb, 0);
  if (axis_Y > 125){
    fspeed = map(axis_Y, 125, 255, 0, 255);
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    analogWrite(ena, fspeed);
    
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, fspeed);
  }
  
  if (axis_Y < 125){
    fspeed = map(axis_Y, 0, 125, 255, 0);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    analogWrite(ena, fspeed);
    
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(enb, fspeed);
  }
  delay(50);
}    

 

Зарание блогодарен.

 

Olllexi
Offline
Зарегистрирован: 04.05.2018

Доброго времени суток,я хотел узнать получилось ли написать эту программу к двум моторам ?

logic
Offline
Зарегистрирован: 16.10.2016

Да получилось, нашёл в сети отрывки кода от управления танком, все оказалось проще чем я думал

Olllexi
Offline
Зарегистрирован: 04.05.2018

Можно ли попросить слить мне эту прошивку, пожалуйста.я в Ардуино совсем новечек ,но мне это нужно. я хочу, также ,сделать управление каляски на этой схеме.если вам не сложно буте добры сделайте это...заранее благодарен.если возможно скиньте здесь или на мыло lehich1984@gmail.com

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Не проверял

/**/
unsigned long mill;// переменая для millis()
//----------------------------------------------------
class Cl_Motor {
  protected:
    const byte axisPin;
    const byte in1Pin, in2Pin, enaPin; // connection to L298n
    unsigned long past;
    void stand() { /*изменить состояние движения моторa*/
      past = mill;
      int value = analogRead(axisPin);
      if (value == 125) analogWrite(enaPin, 0);/*если нейтраль*/
      else if (value > 125) { /*если больше*/
        digitalWrite(in1Pin, LOW);
        digitalWrite(in2Pin, HIGH);
        value = map(value , 125, 255, 0, 255);
        analogWrite(enaPin, value);
      }
      else { /*если меньше*/
        digitalWrite(in1Pin, HIGH);
        digitalWrite(in2Pin, LOW);
        value = map(axisPin, 0, 125, 255, 0);
        analogWrite(enaPin, value);
      }
    }
  public:
    /*конструктор*/
    Cl_Motor(const byte a, const byte in1, const byte in2, const byte e)
      : axisPin(a), in1Pin(in1), in2Pin(in2), enaPin(e) {}
    void init() { /*вставить в setup*/
      pinMode(in1Pin, OUTPUT);      // connection to L298n
      pinMode(in2Pin, OUTPUT);      // connection to L298n
      pinMode(enaPin, OUTPUT);      // connection to L298n
      stand();
    }
    void run() { /*вставить в loop*/
      if (mill - past >= 50) stand();
    }
};
//------------Компоновка---------------------------------
Cl_Motor MotorL(/*Регулировка-пин*/A0,/*пин+*/2,/*пин-*/3,/*пин скорость*/4);
Cl_Motor MotorR(/*Регулировка-пин*/A1,/*пин+*/7,/*пин-*/1,/*пин скорость*/5);
//------------main()--------------------------------
void setup() {
  MotorL.init();
  MotorR.init();
}

void loop() {
  mill = millis();
  MotorL.run();
  MotorR.run();
}
/*Скетч использует 1618 байт (5%) памяти устройства. Всего доступно 30720 байт.
  Глобальные переменные используют 29 байт (1%) динамической памяти, оставляя 2019 байт для локальных переменных. Максимум: 2048 байт.
*/