Перейти к содержанию

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


Гость Дмитрий

Рекомендуемые сообщения

Гость Дмитрий

#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);

}

}

}

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

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

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Переубедить Вас мне не удастся, поэтому сразу перейдем к оскорблениям.

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

 

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

не в теме

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

Изменено пользователем солар

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

Ссылка на комментарий
Поделиться на другие сайты

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

Переубедить Вас мне не удастся, поэтому сразу перейдем к оскорблениям.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...