Нужна помощь в написании скетча управления двумя моторами одним и одним джойстиком
- Войдите на сайт для отправки комментариев
Вс, 16/10/2016 - 19:26
Помогите с программой, есть два мотора которые потключены к АРДУИНО УНО, джойстик который подключённые к аналоговым пинам(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);
}
Зарание блогодарен.

Доброго времени суток,я хотел узнать получилось ли написать эту программу к двум моторам ?
Да получилось, нашёл в сети отрывки кода от управления танком, все оказалось проще чем я думал
Можно ли попросить слить мне эту прошивку, пожалуйста.я в Ардуино совсем новечек ,но мне это нужно. я хочу, также ,сделать управление каляски на этой схеме.если вам не сложно буте добры сделайте это...заранее благодарен.если возможно скиньте здесь или на мыло lehich1984@gmail.com
Не проверял
/**/ 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 байт. */