Там где "analogWrite(ena,HIGH );" - мотор в эту сторону вообще ни как не крутится. Если прописывать это условие и для другого мотора - ПРОВОРОТОВ ВООЩЕ НЕТ! jeka_tm Может я не туда пишу?
Попробовал как Вы сказали совсем ПРОПАЛ задний ход!
Сам то посмотри что я написал, найди такое начало в старом коде, если вставлять где попало конечно не будет ездить
И скинь фото что за механика такая тяжёлая, что такая инерция
А также разберись что делает код, понимания похоже нет
Попробовал как Вы сказали совсем ПРОПАЛ задний ход!
Сам то посмотри что я написал, найди такое начало в старом коде, если вставлять где попало конечно не будет ездить И скинь фото что за механика такая тяжёлая, что такая инерция А также разберись что делает код, понимания похоже нет
Вставил то я код именно туда куда надо! Мы(вернее я) сейчас делаем тормоза на основное движение в перёд-назад. Вставлено для примера в движение назад. И как раз задний ход и пропадает! Пробую вставляю в передний ход - нет переднего! В повороты - нет поворотов!
"понимания похоже нет" - точно! Вот почему и прошу указать именно куда вставить!
Вместо
if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0);
Вставьте мой код, а код движения пока не трогай. Получится стояночный тормоз
Вместо if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0); if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0); Вставьте мой код, а код движения пока не трогай. Получится стояночный тормоз
Так? Вот всё полностью .
#include <PS2X_lib.h> //for v1.6
#include <Servo.h>
PS2X ps2x;
int PS2 = 0;
Servo VVservo;
Servo VNservo;
Servo Shoot;
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(){
VVservo.attach(9);
VNservo.attach(6);
Shoot.attach(10);
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
pinMode(0, OUTPUT); // Лазер
}
void loop(){
ps2x.read_gamepad();
if (ps2x.Analog(PSS_LY) == 128) {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
analogWrite(ena, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
analogWrite(enb, HIGH);
}
if (ps2x.Analog(PSS_LY) > 128){
fspeed = map(ps2x.Analog(PSS_LY), 129, 255, 0, 255);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(ena, fspeed);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enb, fspeed);
}
if (ps2x.Analog(PSS_LY) < 128){
fspeed = map(ps2x.Analog(PSS_LY), 0, 127, 255, 0);
digitalWrite(in1, HIGH);
digitalWrite(in2,LOW );
analogWrite(ena, fspeed);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enb, fspeed);
}
if (ps2x.Analog(PSS_LX) > 128){
fspeed = map(ps2x.Analog(PSS_LX), 129, 255, 0, 255);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enb, fspeed);
}
if (ps2x.Analog(PSS_LX) < 128){
fspeed = map(ps2x.Analog(PSS_LX), 0, 127, 255, 0);
digitalWrite(in1,HIGH );
digitalWrite(in2, LOW);
analogWrite(ena, fspeed);
}
delay(10);
}
Тогда проведи тест, залей только тот кусочек кода в loop, и попробуй покрутить колеса. Должно быть сопротивление. Потом отсоедени мотор от драйвера и замкни его контакты и тоже покрути. Разница должна быть конечно, но сопротивление все равно должно быть. И приложи фото мотора с редуктором и колесом, а то сомнения появились
Короче сейчас самый простой вариант это поставить 2 реле которые будут коротить движок в момент остановки, только главное с задержкой относительно драйвера, а то если драйвер еще не выключился, а включится реле, ты закоротишь выход драйвера и он сгорит.
Да и драйвер лучше бы поменять на более приличный, с полевиками на выходе.
Короче самый простой вариант - это правильно дать команду на драйвер! Ибо здесь драйвер прописан через жопу! И это факт! Дело в то, что вот тут
Пример управления двумя моторами при помощи одного джойстика по танковой схеме
*/
#include "GyverMotor.h"
GMotor motorR(DRIVER2WIRE, 2, 3, HIGH);
GMotor motorL(DRIVER2WIRE, 4, 11, HIGH);
// используем оба ШИМа таймера 2 (пины 3 и 11)
// варианты инициализации в зависимости от типа драйвера:
// GMotor motor(DRIVER2WIRE, dig_pin, PWM_pin, (LOW / HIGH) )
// GMotor motor(DRIVER3WIRE, dig_pin_A, dig_pin_B, PWM_pin, (LOW/HIGH) )
// GMotor motor(RELAY2WIRE, dig_pin_A, dig_pin_B, (LOW/HIGH) )
/*
DRIVER2WIRE - двухпроводной драйвер (направление + ШИМ)
DRIVER3WIRE - трёхпроводной драйвер (два пина направления + ШИМ)
RELAY2WIRE - реле в качестве драйвера (два пина направления)
dig_pin, dig_pin_A, dig_pin_B - любой цифровой пин МК
PWM_pin - любой ШИМ пин МК
LOW / HIGH - уровень драйвера. Если при увеличении скорости мотор наоборот тормозит - смени уровень
*/
void setup() {
// ключ на старт!
motorR.setMode(FORWARD);
motorL.setMode(FORWARD);
}
void loop() {
// джойстик на А0 и А1
int signalX = 255 - analogRead(0) / 2;
int signalY = 255 - analogRead(1) / 2;
// преобразуем по танковой схеме
int dutyR = signalY + signalX;
int dutyL = signalY - signalX;
motorR.setSpeed(dutyR);
motorL.setSpeed(dutyL);
delay(10); // задержка просто для "стабильности"
}
как раз тормоза то и работают! Но не соображу как прописать сюда джостик от Сони. Здесь проводной на контакты А0 и А1 - .....
Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны
Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны
Нет конечно, прописать условие когда нужно тормозить, и в условие добавить код торможения.
Ушел перекидывать провода и пробою!
Для торможения одной стороны (вторая аналогично):
Вот ещё раз выкладываю скетч :
конечно не туда. надо условие когда мотор должен остановится включить тормоз
например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные
конечно не туда. надо условие когда мотор должен остановится включить тормоз
например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные
Есле ещё и так -
- то нет движения не в перёд не назад! Эфекта подтормаживания к стате то ж НЕТ!
Вот моя эл. схема. Всё собрано пин в пин - провод в провод! Работает всё и три сервы и фонарик! Только собрано всё
ARDUINO MEGA 2560....работает но
не тормозит- катится по инерции 20-30см!
конечно не туда. надо условие когда мотор должен остановится включить тормоз
например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные
Сам то посмотри что я написал, найди такое начало в старом коде, если вставлять где попало конечно не будет ездить
И скинь фото что за механика такая тяжёлая, что такая инерция
А также разберись что делает код, понимания похоже нет
Сейчас сброшу видео
https://youtu.be/TKuRZbeS-CI Вот! Отпускаю стик а шась едет! А должен по уму подтормаживать!
конечно не туда. надо условие когда мотор должен остановится включить тормоз
например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные
Вставил то я код именно туда куда надо! Мы(вернее я) сейчас делаем тормоза на основное движение в перёд-назад. Вставлено для примера в движение назад. И как раз задний ход и пропадает! Пробую вставляю в передний ход - нет переднего! В повороты - нет поворотов!
"понимания похоже нет" - точно! Вот почему и прошу указать именно куда вставить!
Вместо
if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0);
Вставьте мой код, а код движения пока не трогай. Получится стояночный тормоз
Так? Вот всё полностью .
Вот вставленный кусок -.....изменений нет! Всё по прежнему!
То есть если разогнать твою тележку, а потом отпустить джойстик он не останавливается?
Тогда проведи тест, залей только тот кусочек кода в loop, и попробуй покрутить колеса. Должно быть сопротивление. Потом отсоедени мотор от драйвера и замкни его контакты и тоже покрути. Разница должна быть конечно, но сопротивление все равно должно быть. И приложи фото мотора с редуктором и колесом, а то сомнения появились
приложи фото мотора с редуктором и колесом, а то сомнения появились
Ща фотку скину! Моторы без маркировки - хотя заказывал что б была. Сомнения какого рода?
Покупал тут https://aliexpress.ru/item/Metal-Tank-Model-Robot-Tracked-Car-Chassis-Diy-Track-Teaching-Crawler-Caterpillar-Platform-Compatible-With-Arduino/32879672132.html?spm=a2g0s.9042311.0.0.677833ednxrGfX&_ga=2.199400238.1891236730.1612702837-1241516693.1590831604
и попробуй покрутить колеса.Замкнул провода(обмотки якоря) как и положено - тормозят.
Не тормозят! Крутятся свободно!
Короче сейчас самый простой вариант это поставить 2 реле которые будут коротить движок в момент остановки, только главное с задержкой относительно драйвера, а то если драйвер еще не выключился, а включится реле, ты закоротишь выход драйвера и он сгорит.
Да и драйвер лучше бы поменять на более приличный, с полевиками на выходе.
Короче самый простой вариант - это правильно дать команду на драйвер! Ибо здесь драйвер прописан через жопу! И это факт! Дело в то, что вот тут
как раз тормоза то и работают! Но не соображу как прописать сюда джостик от Сони. Здесь проводной на контакты А0 и А1 - .....
Если ты чем не можешь пользоваться это ведь не значит что сделано через жопу?
На первый взгляд просто поменяй
на это
ну и пины, инициализации и т.д. пропиши
Прописал - так? Какие контакты указывать в место А0 и А1???
Вот оригинал
Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны
Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны
ОК! Так яж и спросил!
Короче нет у меня понимания чего и зачем! Вот такая фигня.....
А вот моя писанина!
Не прописывается джойстик!
И так делал!
В коде этого не было, а без этого работать не будет
Вот так пульт прописался - но по факту приёмник( Ардуино) не видит передатчик - на пульте часто мигает зелёная "лампа" - нет соединения!
В коде этого не было, а без этого работать не будет
Залей точно рабочий код, проверь. Потом удалишь лишнее, и добавишь драйвера и т.д.
Ща!
В коде этого не было, а без этого работать не будет
Может контакт какой отошел, чтобы исключить залей точно рабочий код.
Залил это - работает.
Теперь удаляю лишнее и оставляю только пульт!
Есть ошибка!Ща только "запятые" проверю!
Вот в таком виде РАБОТАЕТ!
Я в "запятых"(в синтаксисе) запутался! Теперь пробовать библиотеку вставлять? Назначать пины?
Да добавляй моторы
Добавил!
Делаю по этой схеме - пин в пин, номер в номер.
Да делай) А драйвер лучше поменяй, ты не представляешь сколько в мощности на нем потеряешь, а также он будет сильно греться
Да делай) А драйвер лучше поменяй, ты не представляешь сколько в мощности на нем потеряешь, а также он будет сильно греться
Смотри - так?
// используем оба ШИМа таймера 2 (пины 3 и 11) Мне наверное в место 3 - прописать 4 и 3?
Практически победили!Крутятся! И тормозят! Но только во всех направлениях джостика либо правая - либо левая и ..... по одной!
А по уму должны крутиться в разные стороны!