Добавлено (01.09.2014, 07:08) --------------------------------------------- А в моем коде ни хрена не работает, кроме светодиода, не пойму почему, что я делаю не так?!
Код
#include <BTCA2A.h> #include <Servo.h>
btca2a btca2a; // создаем BTCA2A класс
int led = 13;
int N = 8; // Пин мотора направление (I - черный int M = 9; // Пин мотора ШИМ (IA)-белый
byte speed = 255; // change this (0-255) to control the speed of the motors
void setup() {
btca2a.SetupHardwareSerial(0, 115200); // Номер порта, Скорость
pinMode(M, OUTPUT); // Инициализируем пин мотора ШИМ pinMode(N, OUTPUT); // Инициализируем пин мотора направление
}
void loop(){
btca2a.ReadCommand(); // Обязательная часть для работы библиотеки. Считывает принятые данные и изменяет статус кнопок.
if (btca2a.ButtonPressed(KEYCODE_BUTTON_START)){ //Светодиод КНОПКА СТАРТ Пин 13 digitalWrite(led, HIGH); } else{ digitalWrite(led, LOW); }
// Движение вперед if (btca2a.ButtonPressed(KEYCODE_DPAD_UP)){ analogWrite(M, speed); analogWrite(N, 0); } else{ analogWrite(M, 0); analogWrite(N, 0); }
// Движение назад if (btca2a.ButtonPressed(KEYCODE_DPAD_DOWN)){ analogWrite(M, 0); analogWrite(N, speed); } else{ analogWrite(M, 0); analogWrite(N, 0); } }
помогите пожалуйста, драйвер DC двигателя вот: L9110 H-bridge http://www.bajdi.com/l9110-h-bridge-module/
А в моем коде ни хрена не работает, кроме светодиода, не пойму почему, что я делаю не так?!
У вас не не правильно написано условие в коде. У вас в условии «Движение вперед», если не нажата кнопка вверх, тогда моторам поступает команда остановки. Тоже самое прописано в условии «Движение назад». Получается если нажата кнопка вверх то в условии «Движение назад» кнопка вниз не нажата, посылается команда остановки моторов. Ниже я выделил эти места красным.
// Движение вперед if (btca2a.ButtonPressed(KEYCODE_DPAD_UP)){ analogWrite(M, speed); analogWrite(N, 0); } else{ analogWrite(M, 0); analogWrite(N, 0); }
// Движение назад if (btca2a.ButtonPressed(KEYCODE_DPAD_DOWN)){ analogWrite(M, 0); analogWrite(N, speed); } else{ analogWrite(M, 0); analogWrite(N, 0); }
Нужно убрать эти else и добавить отдельное условие в котором если не нажаты кнопки управления, моторам подается команда стоп. А чтобы она не подовалась постоянно будем учитывать её статус в переменной StopMotor. Это выглядит вот так.
А вот вам исправленный код (прикрепил к сообщению)
Код
#include <BTCA2A.h> #include <Servo.h>
btca2a btca2a; // создаем BTCA2A класс
int led = 13;
int N = 8; // Пин мотора направление (I - черный int M = 9; // Пин мотора ШИМ (IA)-белый
boolean StopMotor = false; // для учета остановки моторов
byte speed = 255; // скорость изменяйте от 0 до 255
void setup() {
btca2a.SetupHardwareSerial(0, 115200); // Номер порта, Скорость
pinMode(M, OUTPUT); // Инициализируем пин мотора ШИМ pinMode(N, OUTPUT); // Инициализируем пин мотора направление
}
void loop(){
btca2a.ReadCommand(); // Обязательная часть для работы библиотеки. Считывает принятые данные и изменяет статус кнопок.
if (btca2a.ButtonPressed(KEYCODE_BUTTON_START)){ //Светодиод КНОПКА СТАРТ Пин 13 digitalWrite(led, HIGH); } else{ digitalWrite(led, LOW); }
// Движение вперед if (btca2a.ButtonPressed(KEYCODE_DPAD_UP)){ StopMotor = false; // записываем что моторы расторможены analogWrite(M, speed); analogWrite(N, 0); }
// Движение назад if (btca2a.ButtonPressed(KEYCODE_DPAD_DOWN)){ StopMotor = false; // записываем что моторы расторможены analogWrite(M, 0); analogWrite(N, speed); }
// СТОП if (btca2a.ButtonReleased(KEYCODE_DPAD_UP) && btca2a.ButtonReleased(KEYCODE_DPAD_DOWN) && !StopMotor){ analogWrite(M, 0); analogWrite(N, 0); StopMotor = true; // записываем что моторы остановлены } } // Конец loop
И ещё, кнопка старт у вас работает по тому же принципу что и моторы. При нажатии светодиод просто мигает? Если хотите чтобы машинка работала только после нажатия кнопки старт, могу помочь в написании кода, но советую попробовать самому. Пишите...
Светодиод 13 пин - горит пока удерживаешь кнопку СТАРТ, но это так для проверки и визуального контроля соединения, на этапе разработки В последствии хотелось бы поворотники, аварийку, ближний дальний свет, задний ход. а если это еще и со звуком будет...
В последствии хотелось бы поворотники, аварийку, ближний дальний свет, задний ход. а если это еще и со звуком будет...
Могу помочь с написанием кода, но я любитель.
Цитатаzaratustra ()
А как тут картинки добавлять?
Если ссылкой то при написании сообщения на синюю иконку картинки. Можно ещё загрузить свое фото, прикрепляйте файл (фото) в самом низу над кнопками «Добавить ответ».
Если ссылкой то при написании сообщения на синюю иконку картинки.
В том то и дело что нету ( есть кнопка добавить видео, а картинок нету, еще нету кнопки вложения допустим прикрепить .zip .rar или .exe
И еще это конечно придирки, но каптча довольно сложно распознается визуально, хотя конечно ее можно тыкнуть обновить
Сейчас сижу ковыряю рулевой блок там стоял DC мотор я его выкинул и ставлю серву, встал вопрос: Ведь у меня же руль не на 180 гр поворачивается, ну и что бы серва не стояла не гудела, нужно найти крайние положения влево и вправо, пример с управлением сервой через потенциометр мне не подходит, так как серва почему то не совсем плавно двигается при повороте ручки потенциометра. Думаю нужно через команду Serial посылать на серву сигналы и тем самым я найду нужные мне цифры , значения
В том то и дело что нету ( есть кнопка добавить видео, а картинок нету, еще нету кнопки вложения допустим прикрепить .zip .rar или .exe И еще это конечно придирки, но каптча довольно сложно распознается визуально, хотя конечно ее можно тыкнуть обновить
Исправил!
По поводу рулевого управления, Если бы у вас было два мотора, по одному на каждое колесо, то можно было бы сделать что то на подобии дифференциала. При повороте, колесо по меньшему радиусу крутилось бы медленнее или бы вообще было в свободном движении. А колесо по внешнему радиусу было бы ведущим.
А насчет углов серво нужно быть осторожным. Найдите те углы при которых рычаг сервы не упирается, иначе можно серву сломать.
Вот я и говорю надо найти эти максимальные углы поворота хотя в принципе если на старте у меня угол 90гр (прямо) то скажем "налево" нажать серва будет пытаться достичь 0гр пока мы удерживаем кнопку!
Еще думаю поворот должен быть плавным т.е. едет машинка прямо, нажимаем "налево" и она поворачивает не сразу максимально "налево" а в течении скажем 1.5 сек что бы просто подрулить где то.
Управление сервой с ПК с помощью мышки, программа servo.exe прилагается
Код
#define MIN 600 // минимальное положение сервы #define MAX 2400 // максимальное положение сервы #define STEP_ADD 10 //шаг сервы на 1 градус #define SERVO_1 13 //управляющий выход для первой сервы
int step_on = (MAX-MIN)/2+MIN; //среднее положение сервы
С помощью этого скретча измерил получилось что в обе стороны угол отклонения 22-24 градуса
Добавлено (05.09.2014, 07:37) --------------------------------------------- Опять нужна помощь не работают поворот руля как задумано.
Хотелось бы вот так: пока нажата кнопка в "право" колеса повернуты в право отпускаем кнопку колеса возвращаются в положение "прямо"
вот скретч который ни черта не работает, нажимаешь "в право" отпустил, колеса там и остаются (
Код
#include <BTCA2A.h> //Подключаем библиотеку джойстика #include <Servo.h> //Подключаем библиотеку серводвигателя Servo myservo; //Обзываем серву myservo btca2a btca2a; // создаем BTCA2A класс int led = 13; // Инициализируем светодиод пин 13 int N = 8; //Инициализируем Пин мотора направление (I - черный int M = 9; //Инициализируем Пин мотора ШИМ (IA)-белый boolean StopMotor = false; // для учета остановки моторов boolean Vpered = false; // Инициализируем переменную вперед 90гр byte speed = 255; // скорость изменяйте от 0 до 255
void setup() {
btca2a.SetupHardwareSerial(0, 115200); // Номер порта, Скорость pinMode(M, OUTPUT); //Обьявляем пин мотора ШИМ вывод pinMode(N, OUTPUT); // Обьявляем пин мотора направление вывод myservo.attach(10); // 10 пин управление сервой }
void loop(){ btca2a.ReadCommand(); // Обязательная часть для работы библиотеки. Считывает принятые данные и изменяет статус кнопок. if (btca2a.ButtonPressed(KEYCODE_BUTTON_START)){ //Светодиод КНОПКА СТАРТ Пин 13 digitalWrite(led, HIGH); } else{ digitalWrite(led, LOW); }
// Движение вперед if (btca2a.ButtonPressed(KEYCODE_DPAD_UP)){ StopMotor = false; // записываем что моторы расторможены analogWrite(M, speed); analogWrite(N, 0); }
// Движение назад if (btca2a.ButtonPressed(KEYCODE_DPAD_DOWN)){ StopMotor = false; // записываем что моторы расторможены analogWrite(M, 0); analogWrite(N, speed); }
Добавлено (06.09.2014, 14:52) --------------------------------------------- Серега посмотри пожалуйста код выше под спойлером что не правильно с поворотами х_Х
Да пипец, сегодня был запуск, сгорел драйвер DC мотора моста - L9110, написано что он держит питание до 12 вольт, я подал 7.2 вольта (6 аккумуляторов 1.2в) В общем после того как машинка уперлась, колеса заблокировались, получается короткое замыкание, и эти микросхемы выгорают Теперь надо искать новый драйвер моторов, думаю купить вот такой L298N
Или делать самому на транзисторах, так как посылку ждать довольно долго (
Пришел долгожданный драйвер DC мотора (L298N) Картинка выше. Возникла новая проблема, не могу найти приложение для андроида bt controller на котором все строилось и на библиотеке
http://robocontroller.ru/news/2013-11-16-40 , их https://sites.google.com/site/droidbean/btcontroller/btcontrollerpchost
сайт работает а вот приложения в плеймаркете нет.
Серега у тебя не осталось рабочего APK? И с помощью каких приложений ты сейчас управляешь своими машинками - роботами
Почему я не могу вставлять нормальные ссылки? "Найдены запрещенные ББкоды ( [url или url])."
Сообщение отредактировал zaratustra - Вторник, 28.10.2014, 13:10
Скреч который используется в данный момент, но не последняя версия
Код
#include <BTCA2A.h> //Подключаем библиотеку джойстика #include <Servo.h> //Подключаем библиотеку серводвигателя Servo myservo; //Обзываем серву myservo btca2a btca2a; // создаем BTCA2A класс int led = 13; // Инициализируем светодиод пин 13
int M = 8; //Инициализируем Пин мотора направление int PW = 9; //Инициализируем Пин мотора ШИМ
boolean StopMotor = false; // для учета остановки моторов boolean Vpered = false; // Инициализируем переменную вперед 90гр // byte speed = 255; // скорость изменяйте от 0 до 255
void setup() {
btca2a.SetupHardwareSerial(0, 115200); // Номер порта, Скорость pinMode(M, OUTPUT); //Обьявляем пин мотора вывод pinMode(PW, OUTPUT); // Обьявляем пин мотора PWM myservo.attach(10); // 10 пин управление сервой }
void loop(){ btca2a.ReadCommand(); // Обязательная часть для работы библиотеки. Считывает принятые данные и изменяет статус кнопок.
if (btca2a.ButtonPressed(KEYCODE_BUTTON_START)){ //Светодиод КНОПКА СТАРТ Пин 13 digitalWrite(led, HIGH); } else{ digitalWrite(led, LOW); }
// Движение вперед if (btca2a.ButtonPressed(KEYCODE_BUTTON_X)){ StopMotor = false; // записываем что моторы расторможены analogWrite(M, 0); analogWrite(PW, 255); }
// Движение назад if (btca2a.ButtonPressed(KEYCODE_BUTTON_Y)){ StopMotor = false; // записываем что моторы расторможены analogWrite(M, 255); analogWrite(PW, 0); }