Танк управляемый джойстиком PS-2

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

новый проект

SLOM
Offline
Зарегистрирован: 06.11.2014

чертеж сам делал? в какой программе? 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да сам. solidworks. буду дорабатывать. увеличу толщину для жесткости, уберу отверстия

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

доработал модель

SLOM
Offline
Зарегистрирован: 06.11.2014

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

вот такой 

 

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

 

п.с. не думал сделать клешню побольше, по факту мелкая клешня - просто бутафория, практического применения ей нет, хват слабый, ничего большого не поднять и не удержать, а мелкое чтобы взять нужна точность, с чем тоже проблемы. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да не такая уж маленькая. насчет хвата как соберу видео выложу

а вообще это игрушка. какое практическое применение? химикаты смешивать?))

SLOM
Offline
Зарегистрирован: 06.11.2014

[quote=jeka_tm] какое практическое применение? химикаты смешивать?))[/quote]

 

я бы стержни плутонивые в гараже передвигал бы :))))))

а где там крепление для сервы? 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

никаких серв))) только хардкод. ролики видишь? это для капроновой нитки

SLOM
Offline
Зарегистрирован: 06.11.2014

хм, ну это круто, если будет работать.... клешня получиться легкая, и мощьная если поставить мощьную серву. когда сервы на самой клешне она выходит тяжелой. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

сервы вообще не будет. будут рычаги как на экскаваторе)))

вот что уже есть. только 3 плечо покороче (которое возле клешни). еще основание и рычаги надо сделать. хз когда. блок питания 3д принтера сгорел. попробую запустить от компьютерного блока питания

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

 

SLOM
Offline
Зарегистрирован: 06.11.2014

а чем это все будет приводиться в движение?

не думал насчет гидравлики на шприцах, с трубками а обратные рычаги - шприцы на сервах. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

руками)) можно и на моторах. но не хочу. не так интересно, да и ребенку может понравится

думал, уже планировал следующую версию сделать на шприцах, но без электроники

LinxX
Offline
Зарегистрирован: 08.02.2017

Жека можешь помочь со скетчем? Есть ардуино нано+ драйвер L298n+ мотор-редуктор + серва sg90 + китайский джойстик от PS2 бес проводной  и цель сделать переключение скоростей. Я у виталика смотрел видосы https://www.youtube.com/watch?v=ACtKMtq1-Zg&t=8s выкинул ненужное из скетча с этого видео , оставил мотор редуктор один и серву собрал всё работает. Но потом увидел вот это видео https://www.youtube.com/watch?v=wIpaHNpcjmI а здесь с переключением скоростей. Короче у обоих авторов по разному написаны скетчи у виталия написан по понятнее ,но я не знаю как прописать работу кнопок ,джойстик не видит кнопки только два стика а использовать из за двух стиков как то не целесообразно . Я только начинающий чел в этой среде а с джойстиком вот поторопился купил, надо было на NRFL24L01, но это я уже потом изучил .Вот оригинальный скетч с танка https://drive.google.com/file/d/0B8pAOi0jFtLIM3FGaTBlQndOams/view  я с него брал только серву на поворот и мотор редуктор .А ардуино НАНО потому что машинка не большая , а схемы только в основном на UNO идут . За ранее спасибо.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

уно нано неважно. микроконтроллер один и тот же

NRFL24L01 подразумевает что ты либо пульт самодельный, либо определенный который работает с NRFL24L01

в коде вижу используются 2 кнопки которые на торце вроде

если тебе нужны остальные кнопки делай по правильному: открой пример к библиотеке там все пины использованы, узнай какая функция за какую кнопку отвечает и используй хоть все

я кстати тоже кое что делаю. и думаю подьем дула не стоит того чтобы увеличивать высоту танка

а башня такая странная потому что внутри уже стоит вот это и это шасси

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

тоже приобрел 3д принтер, тоже хочу сделать мини танчик, правда пульта нету от пс((( надо искать инфу о самодельном

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016


спасибо почитаю

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

jeka_tm пишет:

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


корпус я планировал распечатать, и сделать под два джостика и пару кнопок, ну или для серв еще потерциометр линейный прицепить, видел в инете корпус с дисплеем 0,96 олед, может такой повторю

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну тогда можно. хотя если планируешь не одну игрушку делать проще купить магазинный. и потратить время на изготовление игрушки. хотя если сам процесс создания пульта привлекает это другой момент

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

jeka_tm пишет:

ну тогда можно. хотя если планируешь не одну игрушку делать проще купить магазинный. и потратить время на изготовление игрушки. хотя если сам процесс создания пульта привлекает это другой момент


готовые пульты достаточно дороги, либо очень примитивны

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

полторы тысячи тот которым я пользуюсь с nrf24l01 внутри. но покупал я его дешевле. а приемник делаешь из nrf24l01 и ардуины

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

jeka_tm пишет:

полторы тысячи тот которым я пользуюсь с nrf24l01 внутри. но покупал я его дешевле. а приемник делаешь из nrf24l01 и ардуины


а то что там квадрик нарисован никак не мешает управлению машинкой?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да ничем. экран по сути нужен только для отображения текущих настроек диапазона регулировок. это те что с процентами. для триммирования и то что передатчик включился. ну может проценты газа, но они особо не важны

возле цены включи отображение в рублях

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

jeka_tm пишет:

да ничем. экран по сути нужен только для отображения текущих настроек диапазона регулировок. это те что с процентами. для триммирования и то что передатчик включился. ну может проценты газа, но они особо не важны

возле цены включи отображение в рублях


у меня на работе комп заблокированый нельзя выбрать там=))) перепутал немного=))) я на бангуде ниразу не заказывал, интересно на алике есть такой, надо посмотреть, спасибо за наводку

LinxX
Offline
Зарегистрирован: 08.02.2017

Жека проблема в том что я не программист код к библиотеке для PS2 я смотрел и честно ни чего не понял а потом как к этой библиотеке в с кетче привязать серву и завести управление на джойстик я не знаю

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

берешь примеры джереми блюма и вперед учится. до 7 урока дойди. а так кто за тебя будет писать. да за кем то повторять один в один не скучно?

LinxX
Offline
Зарегистрирован: 08.02.2017

 спасибо я видел эти уроки

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

видел и сделал все это разные вещи. тебе нужно привыкнуть к языку. мк/ардуина не может сама принять решение или додумать за тебя. нужно прописывать четко каждое действие и т.д. но если ты не знаешь как с ней разговаривать то ты ничего не сможешь сделать

KaraNiero
Offline
Зарегистрирован: 21.02.2019

Ребят, помогите пожалуйста, делаю шасси для 6wd, шасси хорошее, для него есть даже платка, на подобие ардуинки, называеться T-Rex, хочу подключить к джойстику PS, но не могу понять, как это сделать. Поможете?

KaraNiero
Offline
Зарегистрирован: 21.02.2019

Если нужны фото, ссылки, могу скинуть

SLOM
Offline
Зарегистрирован: 06.11.2014

KaraNiero пишет:

Ребят, помогите пожалуйста, делаю шасси для 6wd, шасси хорошее, для него есть даже платка, на подобие ардуинки, называеться T-Rex, хочу подключить к джойстику PS, но не могу понять, как это сделать. Поможете?

 

я такое делал, там все просто, ну почти :) 

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

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


#include <PS2X_lib.h>  //for v1.6
#include <Servo.h>
PS2X ps2x;
int PS2 = 0; 
Servo LXservo;
Servo LYservo;


// задаем пины для левого мотора
#define Dir_L 2
#define Pwm_L 3
#define Brake_L 4
// задаем пины для правого мотора
#define Dir_R 10
#define Pwm_R 11
#define Brake_R 9

// Задаем скорости для движения
byte MaxSpeed = 200; // Максимальная скорость
byte MinSpeed = 90;  // Минимальная скорость

int forw_back = 0;
int righ_left = 0;

byte step_fb = 50;     // Шаг изменения скорости движения вперед - назад
byte step_stop = 50;  // Шаг изменения скорости остановки
byte step_rl =  50;    // Шаг изменения скорости движения вправо - влево
byte step_dir = 50;   // Шаг изменения скорости выравнивания

byte xL;
byte yL;
byte xR;
byte yR;

float deltaAnglLR = 0.0002;  // настройка - от времени лупа и сервы
float startAnglLR = 50.0;
float deltaAnglUD = 0.0002;  // настройка - от времени лупа и сервы
float startAnglUD = 90.0;
Servo servoLR;
Servo servoUD;


enum States
{
    WAITING,
    READING,
    RUNNING,
    ERROR,
    TIMEOUT
};

States state;
States onWait();
States onRead();
States onRun();
States onError();

States onTimeout();

int mass[4];      //здесь будем хранить значения для скоростей и направлений
                  //mass[0]   лев.напр.
                  //mass[1]   лев.скор.
                  //mass[2]   прав.напр.
                  //mass[3]   прав.скор.
                 
void setup(){
  // LXservo.attach(12);
  // LYservo.attach(13);
  
  servoLR.attach( 12 );
  servoUD.attach( 13 );
  
  PS2 = ps2x.config_gamepad(8,6,7,5, true, true);   //Настройка выводов: (clock, command, attention, data, true, true)

  //Моторы
    pinMode (Pwm_L, OUTPUT);
    pinMode (Dir_L, OUTPUT);
    pinMode (Brake_L, OUTPUT);
    
    pinMode (Pwm_R, OUTPUT);
    pinMode (Dir_R, OUTPUT);
    pinMode (Brake_R, OUTPUT);
    
    digitalWrite (Pwm_L, LOW);
    digitalWrite (Pwm_R, LOW);
    
    digitalWrite (Brake_L, LOW);
    digitalWrite (Brake_R, LOW);

}

void loop(){
  
  
 
  
  
    int x;
        int y;
  
   
    
    
// управление башней вправо-влево
    xL = ps2x.Analog( PSS_RX );                             Serial.println( xL, DEC );
    if( xL < 127 )
      {
        x = xL - 127;
        startAnglLR = startAnglLR - x * x * deltaAnglLR;    Serial.println( startAnglLR );
        if( startAnglLR < 0 ) startAnglLR = 0;
      }
    if( xL > 127 )
      {
        x = xL - 128;
        startAnglLR = startAnglLR + x * x * deltaAnglLR;    Serial.println( startAnglLR );   Serial.println( ' ' );
        if( startAnglLR > 110 ) startAnglLR = 110;
         if( startAnglLR < 55 ) startAnglLR = 55;
      }
    if( ps2x.Button( PSB_R3 ) )    // по кнопке джойстика - в исходное
      {
        startAnglLR = 50.0;
      }
    servoLR.write( startAnglLR );
// управление стволом пушки вверх-вниз
    yL = ps2x.Analog( PSS_RY );                             Serial.println( yL, DEC );
    if( xL < 127 )
      {
        y = yL - 127;
        startAnglUD = startAnglUD - y * y * deltaAnglUD;    Serial.println( startAnglUD );
        if( startAnglUD < 0 ) startAnglUD = 0;
      }
    if( yL > 127 )
      {
        y = yL - 128;
        startAnglUD = startAnglUD + y * y * deltaAnglUD;    Serial.println( startAnglUD );   Serial.println( ' ' );
        if( startAnglUD > 170 ) startAnglUD = 170;
          if( startAnglUD < 90 ) startAnglUD = 90;
      }
    if( ps2x.Button( PSB_R3 ) )    // по кнопке джойстика - в исходное
      {
        startAnglUD = 120.0;
      }
    servoUD.write( startAnglUD );
  
  
   if( ps2x.Button( PSB_TRIANGLE ) )    // по кнопке джойстика - рука опустить
      {
        startAnglUD = 70.0;
      }
  
   if( ps2x.Button( PSB_CROSS ) )    // по кнопке джойстика - рука поднять
      {
        startAnglUD = 170.0;
      }
  
  
    if( ps2x.Button( PSB_SQUARE ) )    // по кнопке джойстика - клешня разжать
      {
         startAnglLR = 55;
      }
  
   if( ps2x.Button( PSB_CIRCLE ) )    // по кнопке джойстика - клешня сжать
      {
         startAnglLR = 110.0;
      }
  
  
  //этот код для меня темный лес, мне его дали для плавного старта и торможения моторов. если ехать вперед и резко нажать кнопку назад, машина продолжит ехать вперед, плавно остановиться и только потом поедет назад, это спасает редуктора от разрушения. 
 //если ктото знает что тут к чему, прокоментируйте пожалуйста, чтоб я тоже понимал :)
  static unsigned long pre_millis = 0;
  if(millis()-pre_millis > 50)
  {
    pre_millis = millis();
    
     if(ps2x.Button(PSB_PAD_UP))
    {
      forw_back += step_fb;
      if(forw_back > 0 && forw_back < MinSpeed) forw_back = MinSpeed;
    }
    else  if(ps2x.Button(PSB_PAD_DOWN))
    {
      forw_back -= step_fb;
      if(forw_back < 0 && forw_back > MinSpeed*-1) forw_back = MinSpeed*-1;
    }
    else 
    {
      if(forw_back < 0) forw_back += step_stop;
      else if(forw_back > 0) forw_back -= step_stop;
      if(abs(forw_back) < MinSpeed) forw_back = 0;
    }
    forw_back = constrain(forw_back, MaxSpeed*-1, MaxSpeed);


    if(ps2x.Button(PSB_PAD_RIGHT))
    {
      righ_left += step_rl;
      if(righ_left > 0 && righ_left < MinSpeed) righ_left = MinSpeed;
    }
    else if(ps2x.Button(PSB_PAD_LEFT))
    {
      righ_left -= step_rl;
      if(righ_left < 0 && righ_left > MinSpeed*-1) righ_left = MinSpeed*-1;
    }
    else 
    {
      if(righ_left < 0) righ_left += step_dir;
      else if(righ_left > 0) righ_left -= step_dir;
      if(abs(righ_left) < MinSpeed) righ_left = 0;
    }
    righ_left = constrain(righ_left, MaxSpeed*-1, MaxSpeed);


    int pwm_l = forw_back + righ_left;
    int pwm_r = forw_back - righ_left;
    pwm_l = constrain(pwm_l, MaxSpeed*-1, MaxSpeed);
    pwm_r = constrain(pwm_r, MaxSpeed*-1, MaxSpeed);

    digitalWrite(Dir_L, (pwm_l<0)?0:1);
    digitalWrite(Dir_R, (pwm_r<0)?0:1);
    analogWrite(Pwm_L, abs(pwm_l));
    analogWrite(Pwm_R, abs(pwm_r));
  }
  
  
  
  
  
  LXservo.write(map(ps2x.Analog(PSS_LX), 255, 0, 0, 180)); ; 
 delay(50); 
  ps2x.read_gamepad(false, 0);
  
  LYservo.write(map(ps2x.Analog(PSS_LY), 0, 255, 0, 90)); ; 
 delay(50); 
  ps2x.read_gamepad(false, 0);
  
  
   // dir_pwm(ps2x.Analog(PSS_RY),2);   //обрабатываем правый джойстик
  //digitalWrite(R_dir, mass[2]);
  //analogWrite(R_pwm, mass[3]);
}    

схема подключения примерно такая, я брал статью в инете 

http://robocontroller.ru/news/besprovodnoj_dzhojstik_ot_playstation_arduino/2013-10-19-32

 

п.с. для 6 колесной машины нужен мощьный акум! 

вот моя версия:

https://www.youtube.com/watch?v=mBMEWrdachI

KaraNiero
Offline
Зарегистрирован: 21.02.2019

Да, да у меня тоже с манипулятором будет, на соревнования

KaraNiero
Offline
Зарегистрирован: 21.02.2019

И при чём на таком же шасси

KaraNiero
Offline
Зарегистрирован: 21.02.2019

С этим всё понятно, но будет ли T-Rex вести себя как ардуинка?

 

SLOM
Offline
Зарегистрирован: 06.11.2014

KaraNiero пишет:

С этим всё понятно, но будет ли T-Rex вести себя как ардуинка?

это и есть ардуино... просто подругому распаяная на своей плате сразу с мотор драйвером и датчиками, которые по факту непригодились... 

SLOM
Offline
Зарегистрирован: 06.11.2014

Почитайте тут описание проекта... поэтапное... 

http://roboforum.ru/forum10/topic14711.html

 

 

на выходе у меня была 6 колесная машина управляемая 2мя пультами пс2 

один пульт управлял движением и манипулятором, второй пульт управлял водометом (стрелял до 2го этажа) и пушкой с 6мм шариками, пробивала несколько листов бумаги... 

KaraNiero
Offline
Зарегистрирован: 21.02.2019

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

SLOM
Offline
Зарегистрирован: 06.11.2014

у меня много версий скетю, один из них я скинул... 

схемы у меня нет, не делал, но ее можно понять почитав скетч, там написано какие контакты на какие выводы тирекса подключать. 

подключите моторы. батарею. посмотрев скетч подсоедените нужные выводы к приемникам СП2 

вот две сервы манипулятора:

066 void setup(){
067   // LXservo.attach(12);
068   // LYservo.attach(13);

а вот подключение приемника от пульта:

073

  PS2 = ps2x.config_gamepad(8,6,7,5, truetrue);   //Настройка выводов: (clock, command, attention, data, true, true)

заливайте скетч и пробуйте.... 

 

п.с. дам совет будьте осторожны с серво приводами на клешне манипуляторе, я пока настраивал правильные углы, незаметил, что серва на сжатие была минуты 3 в постоянном напряге, она уперлась в крайнее положение и продолжала пытаться двигаться дальше, и сгорела... 

 

 

KaraNiero
Offline
Зарегистрирован: 21.02.2019

Сожалею о спалённой серве, и спасибо за скечи, просто реально трудно было найти всё самому

 

SLOM
Offline
Зарегистрирован: 06.11.2014

KaraNiero пишет:

спасибо за скечи, просто реально трудно было найти всё самому

на здоровье! я пол года потратил на все это дело.... :)

Женя7777777
Offline
Зарегистрирован: 22.01.2017
Доброго времени суток!
В этой ветки нашёл почти весь код который мне нужен.
Вот он:
#include <PS2X_lib.h>  //for v1.6
#include <Servo.h>
PS2X ps2x;
int PS2 = 0; 
Servo Zservo;

#define  in1  2   // direction pin 1
#define  in2  4    // direction pin 2
#define  ena  3    // PWM pin to change speed
#define  in3  7    // direction pin 1
#define  in4  1    // direction pin 2
#define  enb  5    // PWM pin to change speed

byte L_speed;      // forward speed 
byte R_speed;      // forward speed 
 
void setup(){
  PS2 = ps2x.config_gamepad(13,11,8,12, true, true);   //Настройка выводов: (clock, command, attention, data, true, true)
  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

  Zservo.attach(6);
}
void loop(){
  ps2x.read_gamepad(false, false);
     

  if (ps2x.Analog(PSS_LX) == 128) analogWrite(ena, 0);
  if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0);
  
 //==========================================================мотор1
  if (ps2x.Analog(PSS_LX) > 128){
    L_speed = ps2x.Analog(PSS_LX)*2-255;
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    analogWrite(ena, L_speed);
  }
  if (ps2x.Analog(PSS_LX) < 128){
    L_speed = 255-ps2x.Analog(PSS_LX)*2;
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    analogWrite(ena, L_speed);
  }
  
  //==========================================================мотор2
  if (ps2x.Analog(PSS_LY) > 128){
    R_speed = ps2x.Analog(PSS_LY)*2-255;
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, R_speed);
  }
  if (ps2x.Analog(PSS_LY) < 128){
    R_speed = 255-ps2x.Analog(PSS_LY)*2;
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(enb, R_speed);

    Zservo.write(map(ps2x.Analog(PSS_RY), 0, 255, 180, 0));
  }
   delay(50);
}

Этот код рабочий, но нужно к нему ещё добавить возможность управления мотором с кнопок джойстика PS2. Пример того, как должен выглядеть такой код я нигде не нашёл.
Нужно что бы при однократном нажатии на кнопку с квадратом, мотор1 постоянно бы крутился влево ,а при однократном нажатии на кнопку с кругом мотор1 постоянно бы крутился вправо. И при однократном нажатии на кнопку с крестом мотор1 остонавливался бы.
Я пробовал написать код сам, но ничего не получается.
Примерно так он должен выглядеть:
if(ps2x.ButtonPressed(PSB_SQUARE)) 
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  analogWrite(ena, 255);
 

  if(ps2x.ButtonPressed(PSB_CROSS)) 
  digitalWrite(in1 LOW);
  digitalWrite(in2, LOW);
  analogWrite(ena, 0);
    
  if(ps2x.ButtonPressed(PSB_CIRCLE)) 
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(ena, 255);

Помогите пожалуйста правильно написать.

 

SLOM
Offline
Зарегистрирован: 06.11.2014

Женя7777777 пишет:

Помогите пожалуйста правильно написать.

 

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

конкрктно кусок кода выглядит так 


 static unsigned long pre_millis = 0;
  if(millis()-pre_millis > 50)
  {
    pre_millis = millis();
    
     if(ps2x.Button(PSB_PAD_UP))
    {
      forw_back += step_fb;
      if(forw_back > 0 && forw_back < MinSpeed) forw_back = MinSpeed;
    }
    else  if(ps2x.Button(PSB_PAD_DOWN))
    {
      forw_back -= step_fb;
      if(forw_back < 0 && forw_back > MinSpeed*-1) forw_back = MinSpeed*-1;
    }
    else 
    {
      if(forw_back < 0) forw_back += step_stop;
      else if(forw_back > 0) forw_back -= step_stop;
      if(abs(forw_back) < MinSpeed) forw_back = 0;
    }
    forw_back = constrain(forw_back, MaxSpeed*-1, MaxSpeed);


    if(ps2x.Button(PSB_PAD_RIGHT))
    {
      righ_left += step_rl;
      if(righ_left > 0 && righ_left < MinSpeed) righ_left = MinSpeed;
    }
    else if(ps2x.Button(PSB_PAD_LEFT))
    {
      righ_left -= step_rl;
      if(righ_left < 0 && righ_left > MinSpeed*-1) righ_left = MinSpeed*-1;
    }
    else 
    {
      if(righ_left < 0) righ_left += step_dir;
      else if(righ_left > 0) righ_left -= step_dir;
      if(abs(righ_left) < MinSpeed) righ_left = 0;
    }
    righ_left = constrain(righ_left, MaxSpeed*-1, MaxSpeed);


    int pwm_l = forw_back + righ_left;
    int pwm_r = forw_back - righ_left;
    pwm_l = constrain(pwm_l, MaxSpeed*-1, MaxSpeed);
    pwm_r = constrain(pwm_r, MaxSpeed*-1, MaxSpeed);

    digitalWrite(Dir_L, (pwm_l<0)?0:1);
    digitalWrite(Dir_R, (pwm_r<0)?0:1);
    analogWrite(Pwm_L, abs(pwm_l));
    analogWrite(Pwm_R, abs(pwm_r));
  }
Женя7777777
Offline
Зарегистрирован: 22.01.2017

Спасибо, попробую разобратся.