Jump to content
Guest Дмитрий

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

Recommended Posts

Guest Дмитрий

#include <PS2X_lib.h>

//电机引脚

# define PWMA 12 / / A电机转速

# определить DIRA1 34

#define DIRA2 35 //A电机方向

# define PWMB 8 / / B电机转速

# определить DIRB1 37

# define DIRB2 36 / / B电机方向

# определите PWMC 9 / / C电机转速

# определить DIRC1 43

# define DIRC2 42 / / C电机方向

# определите PWMD 5 // D电机转速

# определить DIRD1 A4 / / 26

# определить DIRD2 A5 // 27 //D电机方向

//PS2

# define PS2_DAT 52 / / 14

# define PS2_CMD 51 / / 15

# define PS2_SEL 53 / / 16

# определить PS2_CLK 50 / / 17

скорость char;

// #определить давление true

# определить давление false

// #define rumble true

#define rumble false

PS2X ps2x; / / создать класс контроллера PS2

int error = 0;

byte type = 0;

byte vibrate = 0;

void (* resetFunc) (void) = 0;

#define MOTORA_FORWARD(pwm) do{digitalWrite(DIRA1,LOW); digitalWrite(DIRA2,HIGH);analogWrite(PWMA,pwm);}while(0)

#define MOTORA_STOP(x) do{digitalWrite(DIRA1,LOW); digitalWrite(DIRA2,LOW); analogWrite(PWMA,0);}while(0)

#define MOTORA_BACKOFF(pwm) do{digitalWrite(DIRA1,HIGH);digitalWrite(DIRA2,LOW); analogWrite(PWMA,pwm);}while(0)

#define MOTORB_FORWARD(pwm) do{digitalWrite(DIRB1,HIGH); digitalWrite(DIRB2,LOW);analogWrite(PWMB,pwm);}while(0)

#define MOTORB_STOP(x) do{digitalWrite(DIRB1,LOW); digitalWrite(DIRB2,LOW); analogWrite(PWMB,0);}while(0)

#define MOTORB_BACKOFF(pwm) do{digitalWrite(DIRB1,LOW);digitalWrite(DIRB2,HIGH); analogWrite(PWMB,pwm);}while(0)

#define MOTORC_FORWARD(pwm) do{digitalWrite(DIRC1,LOW); digitalWrite(DIRC2,HIGH);analogWrite(PWMC,pwm);}while(0)

#define MOTORC_STOP(x) do{digitalWrite(DIRC1,LOW); digitalWrite(DIRC2,LOW); analogWrite(PWMC,0);}while(0)

#define MOTORC_BACKOFF(pwm) do{digitalWrite(DIRC1,HIGH);digitalWrite(DIRC2,LOW); analogWrite(PWMC,pwm);}while(0)

#define MOTORD_FORWARD(pwm) do{digitalWrite(DIRD1,HIGH); digitalWrite(DIRD2,LOW);analogWrite(PWMD,pwm);}while(0)

#define MOTORD_STOP(x) do{digitalWrite(DIRD1,LOW); digitalWrite(DIRD2,LOW); analogWrite(PWMD,0);}while(0)

#define MOTORD_BACKOFF(pwm) do{digitalWrite(DIRD1,LOW);digitalWrite(DIRD2,HIGH); analogWrite(PWMD,pwm);}while(0)

#define SERIAL Serial

#define LOG_DEBUG

#ifdef LOG_DEBUG

#define M_LOG SERIAL.print

#else

#define M_LOG

#endif

#define MAX_PWM 200

#define MIN_PWM 130

int Motor_PWM = 130;

//控制电机运动 宏定义

// ↑A-----B↑

// | ↑ |

// | | |

// ↑C-----D↑

void ADVANCE()

{

MOTORA_FORWARD(Motor_PWM);MOTORB_FORWARD(Motor_PWM);

MOTORC_FORWARD(Motor_PWM);MOTORD_FORWARD(Motor_PWM);

}

// ↓A-----B↓

// | | |

// | ↓ |

// ↓C-- - - - D↓

пустота назад()

{

MOTORA_BACKOFF(Motor_PWM);MOTORB_BACKOFF(Motor_PWM);

MOTORC_BACKOFF(Motor_PWM);MOTORD_BACKOFF(Motor_PWM);

}

// =A-- - - - B↑

// | ↖ |

// | ↖ |

// ↑C-- - - - D=

пустота СЛЕВА_1()

{

MOTORA_STOP(Motor_PWM);MOTORB_FORWARD(Motor_PWM);

MOTORC_FORWARD(Motor_PWM);MOTORD_STOP(Motor_PWM);

}

// ↓A-- - - - B↑

// | ← |

// | ← |

// ↑C-- - - - D↓

пустота СЛЕВА_2()

{

MOTORA_BACKOFF(Motor_PWM);MOTORB_FORWARD(Motor_PWM);

MOTORC_FORWARD(Motor_PWM);MOTORD_BACKOFF(Motor_PWM);

}

// ↓A-- - - - B=

// | ↙ |

// | ↙ |

// =C-- - - - D↓

пустота СЛЕВА_3()

{

MOTORA_BACKOFF(Motor_PWM);MOTORB_STOP(Motor_PWM);

MOTORC_STOP(Motor_PWM);MOTORD_BACKOFF(Motor_PWM);

}

// ↑A-- - - - B=

// | ↗ |

// | ↗ |

// =C-- - - - D↑

void RIGHT_1()

{

MOTORA_FORWARD(Motor_PWM);MOTORB_STOP(Motor_PWM);

MOTORC_STOP(Motor_PWM);MOTORD_FORWARD(Motor_PWM);

}

// ↑A-----B↓

// | → |

// | → |

// ↓C-----D↑

void RIGHT_2()

{

MOTORA_FORWARD(Motor_PWM);MOTORB_BACKOFF(Motor_PWM);

MOTORC_BACKOFF(Motor_PWM);MOTORD_FORWARD(Motor_PWM);

}

// =A-----B↓

// | ↘ |

// | ↘ |

// ↓C-----D=

void RIGHT_3()

{

MOTORA_STOP(Motor_PWM);MOTORB_BACKOFF(Motor_PWM);

MOTORC_BACKOFF(Motor_PWM);MOTORD_STOP(Motor_PWM);

}

// ↓A-----B↑

// | |

// | |

// ↓C-----D↑

void TURN_LEFT()

{

MOTORA_BACKOFF(Motor_PWM);MOTORB_FORWARD(Motor_PWM);

MOTORC_BACKOFF(Motor_PWM);MOTORD_FORWARD(Motor_PWM);

}

// ↑A-----B↓

// | |

// | |

// ↑C-----D↓

void TURN_RIGHT()

{

MOTORA_FORWARD(Motor_PWM);MOTORB_BACKOFF(Motor_PWM);

MOTORC_FORWARD(Motor_PWM);MOTORD_BACKOFF(Motor_PWM);

}

// =A-- - - - B=

// | = |

// | = |

// =C-- - - - D=

вакуумная остановка ()

{

MOTORA_STOP(Motor_PWM);MOTORB_STOP(Motor_PWM);

MOTORC_STOP(Motor_PWM);MOTORD_STOP(Motor_PWM);

}

void UART_Control()

{

char Uart_Date=0;

если (серийно.доступно())

{

Uart_Date = серийный номер.читать();

}

переключатель (Uart_Date)

{

случай 'A': ADVANCE (); M_LOG ("Run!\r\n "); перерыв;

случай 'B': RIGHT_1 (); M_LOG ("правильно!\r\n "); перерыв;

случай 'C': RIGHT_2 (); M_LOG ("правильно!\r\n "); перерыв;

случай 'D': RIGHT_3 (); M_LOG ("прямо вниз!\r\n "); перерыв;

случай 'E': BACK (); M_LOG ("Run!\r\n "); перерыв;

дело 'F': LEFT_3 (); M_LOG ("слева вниз!\r\n "); перерыв;

случай 'G': LEFT_2 (); M_LOG ("левый!\r\n "); перерыв;

случай 'H': LEFT_1 (); M_LOG ("левый вверх!\r\n "); перерыв;

случай 'Z': STOP (); M_LOG ("стоп!\r\n "); перерыв;

случай 'L': Motor_PWM = 240; перерыв;

случай 'M': Motor_PWM = 130; перерыв;

}

}

void IO_init()

{

pinMode(PWMA, OUTPUT);

pinMode(DIRA1, OUTPUT);

pinMode(DIRA2, OUTPUT);

pinMode(PWMB, OUTPUT);

pinMode(DIRB1, OUTPUT);

pinMode(DIRB2, OUTPUT);

pinMode(PWMC, OUTPUT);

pinMode(DIRC1, OUTPUT);

pinMode(DIRC2, OUTPUT);

pinMode(PWMD, OUTPUT);

pinMode(DIRD1, OUTPUT);

pinMode(DIRD2, OUTPUT);

Стоп!();

}

пустая настройка()

{

Серийный.начало ( 9600);

задержка ( 300 ); / / добавлена задержка, чтобы дать беспроводной модуль ps2 некоторое время для запуска, прежде чем настроить его

// Изменения для v1. 6 здесь!!! **************ОБРАТИТЬ ВНИМАНИЕ*************

// настройка контактов и настроек: геймпад (часы, команда, внимание, данные, давление?- Грохот?) проверьте наличие ошибок

ошибка = ps2x. config_gamepad (PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, давление, грохот);

если (ошибка = = 0) {

Серийный.печать ("найден контроллер, настроен успешно ");

Серийный.печать ("pressures = ");

если (давление)

Серийный.println ("true ");

еще

Серийный.println ("false ");

Серийный.печать ("rumble = ");

если (грохот)

Серийный.println ("true) ");

еще

Серийный.println ("false ");

Серийный.println ("попробуйте все кнопки, X будет вибрировать контроллер, быстрее, как вы нажимаете сильнее; ");

Серийный.println ("удержание L1 или R1 выведет значения аналогового джойстика.");

Серийный.println ("Примечание: перейти к www.billporter.info для обновлений и сообщать об ошибках.");

}

иначе если (ошибка = = 1)

{

Серийный.println ("контроллер не найден, проверьте проводку, см. readme.txt для включения отладки. визит www.billporter.info для устранения неполадок советы ");

resetFunc();

}

иначе если (ошибка = = 2)

Серийный.println ("контроллер найден, но не принимает команды. смотрите readme.txt для включения отладки. Визит www.billporter.info для устранения неполадок советы ");

иначе если (ошибка = = 3)

Серийный.println ("контроллер, отказывающийся войти в режим давления, может не поддерживать его. ");

/- Серийный номер.печать (ps2x.Analog(1), HEX);

type = ps2x.readType();

переключатель (тип) {

дело 0:

Серийный.печать ("найден неизвестный тип контроллера ");

перерыв;

дело 1:

Серийный.печать ("найден контроллер DualShock");

перерыв;

дело 2:

Серийный.печать ("найден контроллер GuitarHero ");

перерыв;

дело 3:

Серийный.печать ("найден беспроводной контроллер Sony DualShock ");

перерыв;

}

IO_init();

/- Серийный номер.печать ("Start");

}

void loop() {

/* You must Read Gamepad to get new values and set vibration values

ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)

if you don't enable the rumble, use ps2x.read_gamepad(); with no values

You should call this at least once a second

*/

UART_Control();//串口接收处理

если (ошибка == 1 ) // пропустить цикл, если контроллер не найден

возвращение;

if (type == 2) {//Guitar Hero контроллер

возвращение;

}

else {//регулятор DualShock

ps2x. read_gamepad (false, vibrate); / / контроллер чтения и установить большой двигатель для вращения на скорости " вибрировать

//start 开始运行,电机初PWM为120;

если (ps2x. Button (PSB_START)) {

Серийный.println ("старт проводится ");

Motor_PWM = 90;

Заранее();

}

// 电机正转;

если (ps2x. Button (PSB_PAD_UP)) {

Серийный.println ("вверх держал это крепко: ");

Motor_PWM = 120;

Заранее();

}

// 电机反转;

если (ps2x. Button (PSB_PAD_DOWN)) {

Серийный.println ("вниз держал это крепко: ");

Motor_PWM = 120;

Назад();

}

//左转;

если (ps2x. Button (PSB_PAD_LEFT)) {

Серийный.println ("повернуть налево ");

Motor_PWM = 120 ; / / 200

LEFT_1();

}

//右转;

если (ps2x. Button (PSB_PAD_RIGHT)) {

Серийный.println ("повернуть направо ");

Motor_PWM = 120 ; / / 200

RIGHT_1();

}

// Стоп

если (ps2x. Button (PSB_SELECT)) {

Серийный.println ("стоп ");

Стоп!();

}

// 左平移

если (ps2x. Button (PSB_PINK)) {

Серийный.println ("motor_pmove_left ");

LEFT_2();

}

// 右平移

если (ps2x. Button (PSB_RED)) {

Серийный.println ("motor_pmove_right ");

RIGHT_2();

}

// Поверните налево

если (ps2x. Button (PSB_GREEN)) {

Серийный.println ("повернуть налево ");

TURN_LEFT();

}

// Поверните направо

если (ps2x. Button (PSB_BLUE)) {

Серийный.println ("повернуть направо ");

TURN_RIGHT();

}

задержка ( 20);

}

if (ps2x. Button (PSB_L1) / / ps2x. Button (PSB_R1)) {//print stick values if either is TRUE

Серийный.печать ("значения палочки: ");

Серийный.печать (ps2x. Analog (PSS_LY), DEC); / / левый джойстик, ось Y. Другие варианты: LX, RY, RX

Серийный.print(",");

Серийный.печать (ps2x. Analog (PSS_LX), DEC);

Серийный.print(",");

Серийный.print(ps2x.Analog(PSS_RY), DEC);

Серийный.print(",");

Серийный.println(ps2x.Analog(PSS_RX), DEC);

int LY = ps2x.Analog(PSS_LY);

int LX = ps2x. аналоговый (PSS_LX);

int RY = ps2x.Analog(PSS_RY);

int RX = ps2x. аналоговый (PSS_RX);

if (LY < 127) //前进

{

Motor_PWM = 1.5 * (127-LY);

Заранее();

задержка ( 20);

}

//后退

если (LY > > 127)

{

Motor_PWM = 1.5 * (LY-128);

Назад();

задержка ( 20);

}

//左转

если (LX < 128)

{

Motor_PWM = 1.5 * (127-LX);

LEFT_1();

задержка ( 20);

}

//右转

если (LX > > 128)

{

Motor_PWM = 1.5 * (LX-128);

RIGHT_3();

задержка ( 20);

}

//如果摇杆居中

если (LY > = > 128 && LY <= 128 && LX >= > 128 && LX <= 128)

{

Стоп!();

задержка ( 20);

}

}

}

Share this post


Link to post
Share on other sites

Спрячьте прогу под спойлер и задайте вопрос внятно


Умный любит учиться, а дурак - учить

Share this post


Link to post
Share on other sites

давайте свои координаты.


Пока ты жив, надежда есть.

Share this post


Link to post
Share on other sites

Вебинар «Каждому ключу — свой драйвер» (13.08.2020)

Компания КОМПЭЛ приглашает вас принять участие в вебинаре, который будет посвящен теме драйверов управления транзисторами компании Infineon. Мы рассмотрим четыре различных технологии изготовления микросхем драйверов, в чём их отличия и особенности.

Подробнее

"коднаписал"

9 часов назад, Гость Дмитрий сказал:

//电机引脚

Силён! Респект и уважуха!


Я не раздаю удочки. Я продаю рыбу.

Share this post


Link to post
Share on other sites

Новый ХИТ FANSO CR123A/SN

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

Подробнее

Сетевой источник питания с расширенным диапазоном входных напряжений на основе VIPER26xK

Питание стационарных устройств чаще осуществляется напряжением 220 В, получаемым от одной фазы трехфазной промышленной сети. Однако существует ряд приложений, которым необходима энергия из всех трех фаз, в т.ч. и в аварийных режимах. Решение этой задачи обычно требует введение в модули питания дополнительных узлов, увеличивающих как их размеры, так и стоимость. Упростить схемы источников питания от трехфазной сети переменного тока либо от других высоковольтных источников, позволяет использование преобразователей с расширенным диапазоном входного напряжения.

Подробнее

Posted (edited)

 

26 минут назад, DoG70 сказал:

не в теме

Аккуратнее с выводами. С утра уже прочитано на хабре.

Edited by солар

Я не раздаю удочки. Я продаю рыбу.

Share this post


Link to post
Share on other sites

Ну ладно, признаю, погорячился с выводами. А на хабре только сегодня появилось что ли? По ссылке новость от февраля :unknw:

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...