Управление ИК ПДУ
- Войдите на сайт для отправки комментариев
Сб, 14/12/2013 - 22:24
Доброго времени суток всем!
Прошу помощи у умных и знающих людей!
Есть такие детали:

Как видно на фото имеется самодельное "Arduino UNO", Motor shield, ИК-пульт с приемником и двухколесное шасси
Помогите это все собрать воедино чтобы можно было ездить с помощью пульта?!
У Вас есть конкретные проблемы/вопросы, или Вы желаете, чтобы кто-нибудь приехал и "собрал воедино чтобы можно было ездить с помощью пульта" ?
Доброго времени суток всем!
Прошу помощи у умных и знающих людей!
Есть такие детали:
Как видно на фото имеется самодельное "Arduino UNO", Motor shield, ИК-пульт с приемником и двухколесное шасси
Помогите это все собрать воедино чтобы можно было ездить с помощью пульта?!
1) используя скетч IRrecord из примеров к библиотеке IRremote:
узнайте коды кнопок (которыми пото будете управлять движением) вашего пульта.
2) Почитате вики про ваш шилд: http://www.elecfreaks.com/wiki/index.php?title=Arduino_Motor/Stepper/Servo_Shield , посмотрите в примерах к библиотеке AFMotor как управлять моторами.
Напишите скетч, крутящий колёса в разные стороны в зависимости от полученного из COM-порт (Serial.read).
3) Исправьте конфликт таймеров, использующихся в библиотеках AFMotor и IRremote:
http://arduino.ru/forum/programmirovanie/motor-shield-v3-podklyuchenie-tsop#comment-22223
(у меня такойже шилд и делал примерно тоже самое http://arduino.ru/forum/obshchii/uno-mss-shield-ir)
4) Соберите все это в один скетч.
5) развлекайтесь.
PS:
У Вас есть конкретные проблемы/вопросы, или Вы желаете, чтобы кто-нибудь приехал и "собрал воедино чтобы можно было ездить с помощью пульта" ?
Нет конечно, приезжать ненадо! )) я чуть чуть не правильно выразился) собрать я и сам соберу, а вот в программировании я полный ноль и поэтому с написанием скетча огромная проблема:-(
1) используя скетч IRrecord из примеров к библиотеке IRremote:
узнайте коды кнопок (которыми пото будете управлять движением) вашего пульта.
2) Почитате вики про ваш шилд: http://www.elecfreaks.com/wiki/index.php?title=Arduino_Motor/Stepper/Servo_Shield , посмотрите в примерах к библиотеке AFMotor как управлять моторами.
Напишите скетч, крутящий колёса в разные стороны в зависимости от полученного из COM-порт (Serial.read).
3) Исправьте конфликт таймеров, использующихся в библиотеках AFMotor и IRremote:
http://arduino.ru/forum/programmirovanie/motor-shield-v3-podklyuchenie-tsop#comment-22223
(у меня такойже шилд и делал примерно тоже самое http://arduino.ru/forum/obshchii/uno-mss-shield-ir)
4) Соберите все это в один скетч.
5) развлекайтесь.
PS:
[/quote]
Проблема в том что вы мне пишете как профиссианал в этом деле, а я вообще не соображаю в программировании
поэтому все что вы написали я понял процентов на 20....
1) используя скетч IRrecord из примеров к библиотеке IRremote:
узнайте коды кнопок (которыми пото будете управлять движением) вашего пульта.
2) Почитате вики про ваш шилд: http://www.elecfreaks.com/wiki/index.php?title=Arduino_Motor/Stepper/Servo_Shield , посмотрите в примерах к библиотеке AFMotor как управлять моторами.
Напишите скетч, крутящий колёса в разные стороны в зависимости от полученного из COM-порт (Serial.read).
3) Исправьте конфликт таймеров, использующихся в библиотеках AFMotor и IRremote:
http://arduino.ru/forum/programmirovanie/motor-shield-v3-podklyuchenie-tsop#comment-22223
(у меня такойже шилд и делал примерно тоже самое http://arduino.ru/forum/obshchii/uno-mss-shield-ir)
4) Соберите все это в один скетч.
5) развлекайтесь.
PS:
Проблема в том что вы мне пишете как профиссианал в этом деле, а я вообще не соображаю в программировании
поэтому все что вы написали я понял процентов на 20....
Я сам-то начал месяц назад)
Ну начинайте с основ - с мигания светодиодом и т.д.
У arduino огромное комьюнити, есть куча статей и туториалов для начинающих.
В самом Arduino IDE есть примеры в конце концов.
[/quote]
Я сам-то начал месяц назад)
Ну начинайте с основ - с мигания светодиодом и т.д.
У arduino огромное комьюнити, есть куча статей и туториалов для начинающих.
В самом Arduino IDE есть примеры в конце концов.
[/quote]
Со светодиодами то я более менее разобрался, а вот с моторами ни как, даже с готовыми скетчами найденными в интернете ни чего не получается...яимею ввиду именно с шилдом.
может еще проблема в том что я программирую через программатор STK200с нажатым SHIFTом, так как через USB нет подключения. и через COM программатор Громова тоже не получается, поэтому я не могу посмотреть что происходит в мониторе COM-порта.
Со светодиодами то я более менее разобрался, а вот с моторами ни как, даже с готовыми скетчами найденными в интернете ни чего не получается...яимею ввиду именно с шилдом.
может еще проблема в том что я программирую через программатор STK200с нажатым SHIFTом, так как через USB нет подключения. и через COM программатор Громова тоже не получается, поэтому я не могу посмотреть что происходит в мониторе COM-порта.
Незнаю. (С программаторами никогда не работал)
Вы шилд цепляете к плате или он у вас в воздухе висит?
[/quote]
Незнаю. (С программаторами никогда не работал)
Вы шилд цепляете к плате или он у вас в воздухе висит?
[/quote]
Шилд цепляю конечно)
А под словом "программирую" я имел ввиду заливаю скетч)
#include <AFMotor.h> AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); }Попробуйте такой скетч залить, будут ли крутится моторы подключённые к колодкам 1 и 2 (на шилде, М1 и М2)?
#include <AFMotor.h> AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); }Попробуйте такой скетч залить, будут ли крутится моторы подключённые к колодкам 1 и 2 (на шилде, М1 и М2)?
Крутятся оба без остановки
Скажите, такое должно работать?
#include <IRremote.h> #include <AFMotor.h> int RECV_PIN = A5; IRrecv irrecv(RECV_PIN); decode_results results; int a=0; int b=0; int c=0; int d=0; int e=0; int f=0; int g=0; int h=0; AF_DCMotor motor_l(1, MOTOR12_64KHZ); AF_DCMotor motor_r(2, MOTOR12_64KHZ); void setup() { irrecv.enableIRIn(); motor_l.setSpeed(255); motor_r.setSpeed(255); pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop() { if (irrecv.decode(&results)) { delay(300); if (results.value == 0xFF18E7) {a=a+1;} if (results.value == 0xFF10EF) {b=b+1;} if (results.value == 0xFF38C7) {c=c+1;} if (results.value == 0xFF5AA5) {d=d+1;} if (results.value == 0xFF4AB5) {h=h+1;} if (a==1){motor_l.run(FORWARD);} else {motor_l.run(RELEASE); a=0;} if (a==1){motor_r.run(FORWARD);} else {motor_r.run(RELEASE); a=0;} if (b==1){motor_r.run(FORWARD);} else {motor_r.run(RELEASE); b=0;} if (b==1){motor_l.run(RELEASE);} else {motor_l.run(RELEASE); b=0;} if (c==1){motor_l.run(RELEASE);} else {motor_l.run(RELEASE); c=0;} if (c==1){motor_r.run(RELEASE);} else {motor_r.run(RELEASE); c=0;} if (d==1){motor_r.run(RELEASE);} else {motor_r.run(RELEASE); d=0;} if (d==1){motor_l.run(FORWARD);} else {motor_l.run(RELEASE); d=0;} if (e==1){motor_l.run(BACKWARD);} else {motor_l.run(RELEASE); e=0;} if (e==1){motor_r.run(BACKWARD);} else {motor_r.run(RELEASE); e=0;} { delay(50); } irrecv.resume(); } }Скажите, такое должно работать?
#include <IRremote.h> #include <AFMotor.h> int RECV_PIN = A5; IRrecv irrecv(RECV_PIN); decode_results results; int a=0; int b=0; int c=0; int d=0; int e=0; int f=0; int g=0; int h=0; AF_DCMotor motor_l(1, MOTOR12_64KHZ); AF_DCMotor motor_r(2, MOTOR12_64KHZ); void setup() { irrecv.enableIRIn(); motor_l.setSpeed(255); motor_r.setSpeed(255); pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop() { if (irrecv.decode(&results)) { delay(300); if (results.value == 0xFF18E7) {a=a+1;} if (results.value == 0xFF10EF) {b=b+1;} if (results.value == 0xFF38C7) {c=c+1;} if (results.value == 0xFF5AA5) {d=d+1;} if (results.value == 0xFF4AB5) {h=h+1;} if (a==1){motor_l.run(FORWARD);} else {motor_l.run(RELEASE); a=0;} if (a==1){motor_r.run(FORWARD);} else {motor_r.run(RELEASE); a=0;} if (b==1){motor_r.run(FORWARD);} else {motor_r.run(RELEASE); b=0;} if (b==1){motor_l.run(RELEASE);} else {motor_l.run(RELEASE); b=0;} if (c==1){motor_l.run(RELEASE);} else {motor_l.run(RELEASE); c=0;} if (c==1){motor_r.run(RELEASE);} else {motor_r.run(RELEASE); c=0;} if (d==1){motor_r.run(RELEASE);} else {motor_r.run(RELEASE); d=0;} if (d==1){motor_l.run(FORWARD);} else {motor_l.run(RELEASE); d=0;} if (e==1){motor_l.run(BACKWARD);} else {motor_l.run(RELEASE); e=0;} if (e==1){motor_r.run(BACKWARD);} else {motor_r.run(RELEASE); e=0;} { delay(50); } irrecv.resume(); } }Если не поменяли таймер в IRremote, то 100% нет.
Так попробуйте:
#include <AFMotor.h> AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }Скажите, такое должно работать?
#include <IRremote.h> #include <AFMotor.h> int RECV_PIN = A5; IRrecv irrecv(RECV_PIN); decode_results results; int a=0; int b=0; int c=0; int d=0; int e=0; int f=0; int g=0; int h=0; AF_DCMotor motor_l(1, MOTOR12_64KHZ); AF_DCMotor motor_r(2, MOTOR12_64KHZ); void setup() { irrecv.enableIRIn(); motor_l.setSpeed(255); motor_r.setSpeed(255); pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop() { if (irrecv.decode(&results)) { delay(300); if (results.value == 0xFF18E7) {a=a+1;} if (results.value == 0xFF10EF) {b=b+1;} if (results.value == 0xFF38C7) {c=c+1;} if (results.value == 0xFF5AA5) {d=d+1;} if (results.value == 0xFF4AB5) {h=h+1;} if (a==1){motor_l.run(FORWARD);} else {motor_l.run(RELEASE); a=0;} if (a==1){motor_r.run(FORWARD);} else {motor_r.run(RELEASE); a=0;} if (b==1){motor_r.run(FORWARD);} else {motor_r.run(RELEASE); b=0;} if (b==1){motor_l.run(RELEASE);} else {motor_l.run(RELEASE); b=0;} if (c==1){motor_l.run(RELEASE);} else {motor_l.run(RELEASE); c=0;} if (c==1){motor_r.run(RELEASE);} else {motor_r.run(RELEASE); c=0;} if (d==1){motor_r.run(RELEASE);} else {motor_r.run(RELEASE); d=0;} if (d==1){motor_l.run(FORWARD);} else {motor_l.run(RELEASE); d=0;} if (e==1){motor_l.run(BACKWARD);} else {motor_l.run(RELEASE); e=0;} if (e==1){motor_r.run(BACKWARD);} else {motor_r.run(RELEASE); e=0;} { delay(50); } irrecv.resume(); } }Если не поменяли таймер в IRremote, то 100% нет.
Так попробуйте:
#include <AFMotor.h> AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }Так работает) Хотелось бы сделать на управлении!?!)
[/quote]
Если не поменяли таймер в IRremote, то 100% нет.
[/quote]
А как поменять этот таймер? Где его искать и на что менять?)
Перечитайте сообщение #2.
Перечитайте сообщение #2.
Прочитал. Сделал. Закинул следущий скетч:
#include <AFMotor.h> #include <IRremote.h> int RECV_PIN = 9; AF_DCMotor motor_a(1, MOTOR12_64KHZ); AF_DCMotor motor_b(2, MOTOR12_64KHZ); IRrecv irrecv(RECV_PIN); IRsend irsend; decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { if (irrecv.decode(&results)){ Serial.println(results.value, HEX); if ((results.value == 0xFF18E7) || (results.value == 0x56ECA836)) { //вперед Serial.println("/|"); motor_a.run(FORWARD); motor_b.run(FORWARD); delay(1000); motor_a.run(RELEASE); motor_b.run(RELEASE); } if ((results.value == 0xFF4AB5) || (results.value == 0x11BA2712)) { //назад Serial.println("|/"); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(1000); motor_a.run(RELEASE); motor_b.run(RELEASE); } if ((results.value == 0xFF10EF) || (results.value == 0xF57F2C56)) { //налево Serial.println("<--"); motor_a.run(BACKWARD); motor_b.run(FORWARD); delay(1000); motor_a.run(RELEASE); motor_b.run(RELEASE); } if ((results.value == 0xFF5AA5) || (results.value == 0x1CDA5012)) { //направо Serial.println("-->"); motor_a.run(FORWARD); motor_b.run(BACKWARD); delay(1000); motor_a.run(RELEASE); motor_b.run(RELEASE); } irrecv.resume(); // Receive the next value } }Монитор порта реагирует и выводит значения, а моторы не реагируют!
В чем может быть проблема?
В чем может быть проблема?
Если поменять местами что происходит?:
И зачем вам вообще IRsend irsend;? Вы что собрались отправлять?
В чем может быть проблема?
Если поменять местами что происходит?:
И зачем вам вообще IRsend irsend;? Вы что собрались отправлять?
Я думал что поменять таймер нужно было в файле arduino\libraries\IRremote\IRremoteInt.h
с такого:
на такой:
еще нужно поменять местами библиотеки? т.е. поставить IRemote на первое место?
Сделал, но опять ни какой реакции.....
По поводу IRsend irsend; она мне не к чему-просто в скопированном мной скетче она была)
Сделал, но опять ни какой реакции.....
[/quote]
также выводятся заданные в скетче значения!
Проверьте сейчас работает ли предыдущий пример:
#include <AFMotor.h> AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }Если работает, то проверьте заработает ли если подключить IRremote:
#include <AFMotor.h> #include <IRremote.h> AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }Если во втором случае перестает работать, то значит конфликт библиотек по прежнему остался.
Проверьте сейчас работает ли предыдущий пример:
#include <AFMotor.h> AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }Если работает, то проверьте заработает ли если подключить IRremote:
#include <AFMotor.h> #include <IRremote.h> AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }Если во втором случае перестает работать, то значит конфликт библиотек по прежнему остался.
Работает в обоих случаях
А так?
#include <AFMotor.h> #include <IRremote.h> IRrecv irrecv(9); AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }А так?
#include <AFMotor.h> #include <IRremote.h> IRrecv irrecv(9); AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }Работает!
А так?
#include <AFMotor.h> #include <IRremote.h> IRrecv irrecv(9); AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { irrecv.enableIRIn(); motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }А так?
#include <AFMotor.h> #include <IRremote.h> IRrecv irrecv(9); AF_DCMotor motor_a(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm AF_DCMotor motor_b(2, MOTOR12_64KHZ); void setup() { irrecv.enableIRIn(); motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { motor_a.run(FORWARD); motor_b.run(FORWARD); delay(5000); motor_a.run(RELEASE); motor_b.run(RELEASE); delay(5000); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(5000); }А вот так нет...
Робот управляемый любым пультом ДУ
Робот управляемый любым пультом ДУ
А вот так нет...
Робот управляемый любым пультом ДУ
Вот я только что хотел написать что пробовал по этой схеме и ни чего не получилось...
Вообще проблемы с библиотекой <CyberLib.h>
Пытался сделать что то с сонаром HC-SR04 но ни чего не вышло....
А вот так нет...
И? Вы сами не видите, что таймер не изменен? И сверните портянку.
И? Вы сами не видите, что таймер не изменен? И сверните портянку.
Да, тупанул.... поменял на Arduino Mega..
P.S. А как сворачивать портянки?
Вставка программного кода в тему/комментарий
И обязательно уберите IRsend irsend; иначе у вас не будет работать приемник на 9 выводе.
Вставка программного кода в тему/комментарий
И обязательно уберите IRsend irsend; иначе у вас не будет работать приемник на 9 выводе.
Акакие именно строки убрать кроме IRsend irsend;?
#include <IRremote.h> #include <AFMotor.h> int RECV_PIN = 9; AF_DCMotor motor_a(1, MOTOR12_64KHZ); AF_DCMotor motor_b(2, MOTOR12_64KHZ); IRrecv irrecv(RECV_PIN); IRsend irsend; decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { if (irrecv.decode(&results)){ Serial.println(results.value, HEX); if ((results.value == 0xFF18E7) || (results.value == 0x56ECA836)) { //вперед Serial.println("|"); motor_a.run(FORWARD); motor_b.run(FORWARD); delay(1000); motor_a.run(RELEASE); motor_b.run(RELEASE); } if ((results.value == 0xFF4AB5) || (results.value == 0x11BA2712)) { //назад Serial.println("|/"); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(1000); motor_a.run(RELEASE); motor_b.run(RELEASE); } if ((results.value == 0xFF10EF) || (results.value == 0xF57F2C56)) { //налево Serial.println("<--"); motor_a.run(BACKWARD); motor_b.run(FORWARD); delay(1000); motor_a.run(RELEASE); motor_b.run(RELEASE); } if ((results.value == 0xFF5AA5) || (results.value == 0x1CDA5012)) { //направо Serial.println("-->"); motor_a.run(FORWARD); motor_b.run(BACKWARD); delay(1000); motor_a.run(RELEASE); motor_b.run(RELEASE); } irrecv.resume(); // Receive the next value } }Больше никакие.
Больше никакие.
Огромное ВАМ спасибо за помощь! Все заработало!
Скажите, а можно как то изменить скетч чтобы платформа двигалась только когда нажата соответствующая кнопка на пульте и останавливалась когда кнопку отпускаешь?
Просто сейчас после нажатия кнопки платформа двигается 1 секунду и останавливается...
Робот управляемый любым пультом ДУ
Гораздо проще подправить код
Робот управляемый любым пультом ДУ
Гораздо проще подправить код
Проще для того кто знает! А для человека кторорый в основном "программирует" "CTRL-C" "CTRL-V" -это темный лес))
Сделал такой скетч:
#include <IRremote.h> #include <AFMotor.h> int RECV_PIN = 9; AF_DCMotor motor_a(1, MOTOR12_64KHZ); AF_DCMotor motor_b(2, MOTOR12_64KHZ); IRrecv irrecv(RECV_PIN); decode_results results; int a=0; // int b=0; // int c=0; // int d=0; // int e=0; // void setup() { irrecv.enableIRIn(); // Start the receiver motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { if (irrecv.decode(&results)){ delay(300); if (results.value == 0xFF18E7) {a=a+1;} // 2 кнопка-вперед if (results.value == 0xFF4AB5) {b=b+1;} // 8 кнопка-назад if (results.value == 0xFF10EF) {c=c+1;} // 4 кнопка-влево if (results.value == 0xFF5AA5) {d=d+1;} // 6 кнопка-вправо if (results.value == 0xFF38C7) {e=e+1;} // 5 кнопка-стоп if (a==1){ motor_a.run(FORWARD); motor_b.run(FORWARD);} else{ motor_a.run(RELEASE); motor_b.run(RELEASE); a=0;} if (b==1){ motor_a.run(BACKWARD); motor_b.run(BACKWARD);} else{ motor_a.run(RELEASE); motor_b.run(RELEASE); b=0;} if (c==1){ motor_a.run(BACKWARD); motor_b.run(FORWARD);} else{ motor_a.run(RELEASE); motor_b.run(RELEASE); c=0;} if (d==1){ motor_a.run(FORWARD); motor_b.run(BACKWARD);} else{ motor_a.run(RELEASE); motor_b.run(RELEASE); d=0;} { delay(50); } irrecv.resume(); // } }В итоге работает только поворот направо (кнопка 6), причем после нажатия колеса начинают вращаться в правильные стороны, вращаются бесконечное количество времени и больше ни на какие кнопки не реагирует....помогает Reset... не знаю куда копать?!?..
#include <AFMotor.h> #include <IRremote.h> int RECV_PIN = 9; AF_DCMotor motor_a(1, MOTOR12_64KHZ); AF_DCMotor motor_b(2, MOTOR12_64KHZ); IRrecv irrecv(RECV_PIN); IRsend irsend; decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { if (irrecv.decode(&results)){ /* Serial.println(results.value); Serial.println(results.value, HEX); Serial.println("===="); */ if (results.value == 0xFF18E7) { //вперед Serial.println("/|"); motor_a.run(FORWARD); motor_b.run(FORWARD); delay(100); motor_a.run(RELEASE); motor_b.run(RELEASE); } if (results.value == 0xFF4AB5) { //назад Serial.println("|/"); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(100); motor_a.run(RELEASE); motor_b.run(RELEASE); } if (results.value == 0xFF10EF) { //налево Serial.println("<--"); motor_b.run(BACKWARD); motor_a.run(FORWARD); delay(100); motor_a.run(RELEASE); motor_b.run(RELEASE); } if (results.value == 0xFF5AA5) { //направо Serial.println("-->"); motor_b.run(FORWARD); motor_a.run(BACKWARD); delay(100); motor_a.run(RELEASE); motor_b.run(RELEASE); } irrecv.resume(); // Receive the next value } }Попробуйте так, будет ли работать?
(У меня этот скетч работае полностью, но мои коды кнопок заменены кодами из последнего вашего поста)
#include <AFMotor.h> #include <IRremote.h> int RECV_PIN = 9; AF_DCMotor motor_a(1, MOTOR12_64KHZ); AF_DCMotor motor_b(2, MOTOR12_64KHZ); IRrecv irrecv(RECV_PIN); IRsend irsend; decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver motor_a.setSpeed(255); motor_b.setSpeed(255); } void loop() { if (irrecv.decode(&results)){ /* Serial.println(results.value); Serial.println(results.value, HEX); Serial.println("===="); */ if (results.value == 0xFF18E7) { //вперед Serial.println("/|"); motor_a.run(FORWARD); motor_b.run(FORWARD); delay(100); motor_a.run(RELEASE); motor_b.run(RELEASE); } if (results.value == 0xFF4AB5) { //назад Serial.println("|/"); motor_a.run(BACKWARD); motor_b.run(BACKWARD); delay(100); motor_a.run(RELEASE); motor_b.run(RELEASE); } if (results.value == 0xFF10EF) { //налево Serial.println("<--"); motor_b.run(BACKWARD); motor_a.run(FORWARD); delay(100); motor_a.run(RELEASE); motor_b.run(RELEASE); } if (results.value == 0xFF5AA5) { //направо Serial.println("-->"); motor_b.run(FORWARD); motor_a.run(BACKWARD); delay(100); motor_a.run(RELEASE); motor_b.run(RELEASE); } irrecv.resume(); // Receive the next value } }Попробуйте так, будет ли работать?
(У меня этот скетч работае полностью, но мои коды кнопок заменены кодами из последнего вашего поста)
Спасибо Vasia.Z! С этой задачей я уже справился. Теперь пытаюсь реализовать автономность с помощью ультразвука! Если интересно и есть в этом опыт прошу посетить эту тему!
доброго времени суток. а у меня вот такой вот вопрос. куда пихать ИК приемник, если миторшилд накрывает мою ардуино уно полностью?
Спасибо Vasia.Z! С этой задачей я уже справился. Теперь пытаюсь реализовать автономность с помощью ультразвука! Если интересно и есть в этом опыт прошу посетить эту тему!
подскажите пожалуйста, как вы решили свою проблему?
у меня вот такая ардуиносовместимая плата - TREX controller
вот такой скетч
#include <IRremote.h> int RECV_PIN = 7; #define DirM1 2 #define PwmM1 3 #define DirM2 10 #define PwmM2 11 #define BrakeM1 4 #define BrakeM2 9 IRrecv irrecv(RECV_PIN); IRsend irsend; decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Запуск приемника pinMode (PwmM1, OUTPUT); pinMode (DirM1, OUTPUT); pinMode (BrakeM1, OUTPUT); pinMode (PwmM2, OUTPUT); pinMode (DirM2, OUTPUT); pinMode (BrakeM2, OUTPUT); digitalWrite (BrakeM1, LOW); digitalWrite (BrakeM2, LOW); } void loop() { if (irrecv.decode(&results)) { if (results.value == 16736925){ //вперед Serial.println("/|"); digitalWrite (DirM1, HIGH); analogWrite (PwmM1, 120); digitalWrite (DirM2, HIGH); analogWrite (PwmM2, 120); delay(500); digitalWrite (DirM1, HIGH); analogWrite (PwmM1, 0); digitalWrite (DirM2, HIGH); analogWrite (PwmM2, 0); } if (results.value == 16712445){ //назад Serial.println("|/"); digitalWrite (DirM1, LOW); analogWrite (PwmM1, 120); digitalWrite (DirM2, LOW); analogWrite (PwmM2, 120); delay(500); digitalWrite (DirM1, LOW); analogWrite (PwmM1, 0); digitalWrite (DirM2, LOW); analogWrite (PwmM2, 0); } if (results.value == 16754775){ //Стоп Serial.println("STOP"); digitalWrite (DirM1, LOW); analogWrite (PwmM1, 0); digitalWrite (DirM2, LOW); analogWrite (PwmM2, 0); } irrecv.resume(); // Получаем следующее значение } }в мониторинге вижу
значит инфракрасный пульт работает, команды прописаны верно.
как должны работать моторы тоже вроде верно прописано, если делать отдельно без управления то колеса просто крутяться с этим кодом.
в чем может быть проблема?