Управление ИК ПДУ

yanbaev72
Offline
Зарегистрирован: 08.11.2013

Доброго времени суток всем!

Прошу помощи у умных и знающих людей!

Есть такие детали:

 

 Как видно на фото имеется самодельное "Arduino UNO", Motor shield, ИК-пульт с приемником и двухколесное шасси

Помогите это все собрать воедино чтобы можно было ездить с помощью пульта?!

 

 

Araris
Offline
Зарегистрирован: 09.11.2012

У Вас есть конкретные проблемы/вопросы, или Вы желаете, чтобы кто-нибудь приехал и "собрал воедино чтобы можно было ездить с помощью пульта" ?

Vasia.Z
Vasia.Z аватар
Offline
Зарегистрирован: 30.11.2013

yanbaev72 пишет:

Доброго времени суток всем!

Прошу помощи у умных и знающих людей!

Есть такие детали:

 

 Как видно на фото имеется самодельное "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: 

 

yanbaev72
Offline
Зарегистрирован: 08.11.2013

Araris пишет:

У Вас есть конкретные проблемы/вопросы, или Вы желаете, чтобы кто-нибудь приехал и "собрал воедино чтобы можно было ездить с помощью пульта" ?

 

Нет конечно, приезжать ненадо! )) я чуть чуть не правильно выразился) собрать я и сам соберу, а вот в программировании я полный ноль и поэтому с написанием скетча огромная проблема:-(

yanbaev72
Offline
Зарегистрирован: 08.11.2013

 

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....

Vasia.Z
Vasia.Z аватар
Offline
Зарегистрирован: 30.11.2013

yanbaev72 пишет:

Vasia.Z пишет:

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 есть примеры в конце концов.

yanbaev72
Offline
Зарегистрирован: 08.11.2013

[/quote]

Я сам-то начал месяц назад)

Ну начинайте с основ - с мигания светодиодом и т.д. 

У arduino огромное комьюнити, есть куча статей и туториалов для начинающих. 

В самом Arduino IDE есть примеры в конце концов.

[/quote]

Со светодиодами то я более менее разобрался, а вот с моторами ни как, даже с готовыми скетчами найденными в интернете ни чего не получается...яимею ввиду именно с шилдом.

может еще проблема в том что я программирую через программатор STK200с нажатым SHIFTом, так как через USB нет подключения. и через COM программатор Громова тоже не получается, поэтому я не могу посмотреть что происходит в мониторе COM-порта.

 

Vasia.Z
Vasia.Z аватар
Offline
Зарегистрирован: 30.11.2013

yanbaev72 пишет:

Со светодиодами то я более менее разобрался, а вот с моторами ни как, даже с готовыми скетчами найденными в интернете ни чего не получается...яимею ввиду именно с шилдом.

может еще проблема в том что я программирую через программатор STK200с нажатым SHIFTом, так как через USB нет подключения. и через COM программатор Громова тоже не получается, поэтому я не могу посмотреть что происходит в мониторе COM-порта.


 

Незнаю. (С программаторами никогда не работал)

Вы шилд цепляете к плате или он у вас в воздухе висит?

yanbaev72
Offline
Зарегистрирован: 08.11.2013

[/quote]

 

Незнаю. (С программаторами никогда не работал)

Вы шилд цепляете к плате или он у вас в воздухе висит?

[/quote]

Шилд цепляю конечно)

А под словом "программирую" я имел ввиду заливаю скетч)

Vasia.Z
Vasia.Z аватар
Offline
Зарегистрирован: 30.11.2013
#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)?

yanbaev72
Offline
Зарегистрирован: 08.11.2013

Vasia.Z пишет:

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

Крутятся оба без остановки

yanbaev72
Offline
Зарегистрирован: 08.11.2013

Скажите, такое должно работать?

 

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

}

}

 

maksim
Offline
Зарегистрирован: 12.02.2012

yanbaev72 пишет:

Скажите, такое должно работать?

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

 

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

yanbaev72 пишет:

Скажите, такое должно работать?

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

 

Так работает) Хотелось бы сделать на управлении!?!)

yanbaev72
Offline
Зарегистрирован: 08.11.2013

[/quote]

Если не поменяли таймер в IRremote, то 100% нет.

[/quote]

А как поменять этот таймер? Где его искать и на что менять?)

maksim
Offline
Зарегистрирован: 12.02.2012

Перечитайте сообщение #2.

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

Перечитайте сообщение #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
  }
}

Монитор порта реагирует и выводит значения, а моторы не реагируют! 

В чем может быть проблема?

maksim
Offline
Зарегистрирован: 12.02.2012

yanbaev72 пишет:

В чем может быть проблема?

В том что ничего не сделали - не поменяли таймер. 

Если поменять местами что происходит?:

#include <IRremote.h>
#include <AFMotor.h>

int RECV_PIN = 9;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

AF_DCMotor motor_a(1, MOTOR12_64KHZ);
AF_DCMotor motor_b(2, MOTOR12_64KHZ);

И зачем вам вообще IRsend irsend;? Вы что собрались отправлять?

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

yanbaev72 пишет:

В чем может быть проблема?

В том что ничего не сделали - не поменяли таймер. 

Если поменять местами что происходит?:

#include <IRremote.h>
#include <AFMotor.h>

int RECV_PIN = 9;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

AF_DCMotor motor_a(1, MOTOR12_64KHZ);
AF_DCMotor motor_b(2, MOTOR12_64KHZ);

И зачем вам вообще IRsend irsend;? Вы что собрались отправлять?

Я думал что поменять таймер нужно было в файле arduino\libraries\IRremote\IRremoteInt.h

с такого:

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
  #define IR_USE_TIMER2     // tx = pin 3
#endif

на такой:

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  #define IR_USE_TIMER1   // tx = pin 9
  //#define IR_USE_TIMER2     // tx = pin 3
#endif

еще нужно поменять местами библиотеки? т.е. поставить IRemote на первое место?

Сделал, но опять ни какой реакции.....

По поводу  IRsend irsend; она мне не к чему-просто в скопированном мной скетче она была) 

maksim
Offline
Зарегистрирован: 12.02.2012

yanbaev72 пишет:

#include <IRremote.h>
#include <AFMotor.h>

int RECV_PIN = 9;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

AF_DCMotor motor_a(1, MOTOR12_64KHZ);
AF_DCMotor motor_b(2, MOTOR12_64KHZ);

Сделал, но опять ни какой реакции.....

В монитор что то выводится?

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

В монитор что то выводится?

[/quote]

также выводятся заданные в скетче значения!

maksim
Offline
Зарегистрирован: 12.02.2012

Проверьте сейчас работает ли предыдущий пример:

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

Если во втором случае перестает работать, то значит конфликт библиотек по прежнему остался.

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

Проверьте сейчас работает ли предыдущий пример:

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

Если во втором случае перестает работать, то значит конфликт библиотек по прежнему остался.

Работает в обоих случаях

 

maksim
Offline
Зарегистрирован: 12.02.2012

А так?

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

 

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

А так?

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

 

Работает!

maksim
Offline
Зарегистрирован: 12.02.2012

А так?

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

 

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

А так?

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

 

А вот так нет...

carduino.ru
Offline
Зарегистрирован: 06.12.2011
maksim
Offline
Зарегистрирован: 12.02.2012

Предлагаете человеку перепаять шилд?

maksim
Offline
Зарегистрирован: 12.02.2012

yanbaev72 пишет:

А вот так нет...

Вы не изменили таймер.

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

Предлагаете человеку перепаять шилд?

Вот я только что хотел написать что пробовал по этой схеме и ни чего не получилось...

Вообще проблемы с библиотекой <CyberLib.h>

Пытался сделать что то с сонаром HC-SR04 но ни чего не вышло....

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

yanbaev72 пишет:

А вот так нет...

Вы не изменили таймер.



/*
 * IRremote
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
 *
 * Modified by Paul Stoffregen <paul@pjrc.com> to support other boards and timers
 *
 * Interrupt code based on NECIRrcv by Joe Knapp
 * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556
 * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/
 *
 * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
 */

#ifndef IRremoteint_h
#define IRremoteint_h

#if defined(ARDUINO) && ARDUINO >= 100
#include <Arduino.h>
#else
#include <WProgram.h>
#endif

// define which timer to use
//
// Uncomment the timer you wish to use on your board.  If you
// are using another library which uses timer2, you have options
// to switch IRremote to use a different timer.

// Arduino Mega
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  #define IR_USE_TIMER1   // tx = pin 9
  //#define IR_USE_TIMER2     // tx = pin 3
  //#define IR_USE_TIMER3   // tx = pin 5
  //#define IR_USE_TIMER4   // tx = pin 6
  //#define IR_USE_TIMER5   // tx = pin 46

// Teensy 1.0
#elif defined(__AVR_AT90USB162__)
  #define IR_USE_TIMER1     // tx = pin 17

// Teensy 2.0
#elif defined(__AVR_ATmega32U4__)
  //#define IR_USE_TIMER1   // tx = pin 14
  //#define IR_USE_TIMER3   // tx = pin 9
  #define IR_USE_TIMER4_HS  // tx = pin 10

// Teensy++ 1.0 & 2.0
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
  //#define IR_USE_TIMER1   // tx = pin 25
  #define IR_USE_TIMER2     // tx = pin 1
  //#define IR_USE_TIMER3   // tx = pin 16

// Sanguino
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
  //#define IR_USE_TIMER1   // tx = pin 13
  #define IR_USE_TIMER2     // tx = pin 14

// Atmega8
#elif defined(__AVR_ATmega8P__) || defined(__AVR_ATmega8__)
  #define IR_USE_TIMER1   // tx = pin 9

#elif defined( __AVR_ATtinyX4__ )
  #define IR_USE_TIMER1   // tx = pin 6

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
  #define IR_USE_TIMER2     // tx = pin 3
#endif



#ifdef F_CPU
#define SYSCLOCK F_CPU     // main Arduino clock
#else
#define SYSCLOCK 16000000  // main Arduino clock
#endif

#define ERR 0
#define DECODED 1


// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

// Pulse parms are *50-100 for the Mark and *50+100 for the space
// First MARK is the one after the long gap
// pulse parameters in usec
#define NEC_HDR_MARK  9000
#define NEC_HDR_SPACE 4500
#define NEC_BIT_MARK  560
#define NEC_ONE_SPACE 1600
#define NEC_ZERO_SPACE  560
#define NEC_RPT_SPACE 2250

#define SONY_HDR_MARK 2400
#define SONY_HDR_SPACE  600
#define SONY_ONE_MARK 1200
#define SONY_ZERO_MARK  600
#define SONY_RPT_LENGTH 45000
#define SONY_DOUBLE_SPACE_USECS  500  // usually ssee 713 - not using ticks as get number wrapround

// SA 8650B
#define SANYO_HDR_MARK  3500  // seen range 3500
#define SANYO_HDR_SPACE 950 //  seen 950
#define SANYO_ONE_MARK  2400 // seen 2400  
#define SANYO_ZERO_MARK 700 //  seen 700
#define SANYO_DOUBLE_SPACE_USECS  800  // usually ssee 713 - not using ticks as get number wrapround
#define SANYO_RPT_LENGTH 45000

// Mitsubishi RM 75501
// 14200 7 41 7 42 7 42 7 17 7 17 7 18 7 41 7 18 7 17 7 17 7 18 7 41 8 17 7 17 7 18 7 17 7 

// #define MITSUBISHI_HDR_MARK  250  // seen range 3500
#define MITSUBISHI_HDR_SPACE  350 //  7*50+100
#define MITSUBISHI_ONE_MARK 1950 // 41*50-100
#define MITSUBISHI_ZERO_MARK  750 // 17*50-100
// #define MITSUBISHI_DOUBLE_SPACE_USECS  800  // usually ssee 713 - not using ticks as get number wrapround
// #define MITSUBISHI_RPT_LENGTH 45000


#define RC5_T1    889
#define RC5_RPT_LENGTH  46000

#define RC6_HDR_MARK  2666
#define RC6_HDR_SPACE 889
#define RC6_T1    444
#define RC6_RPT_LENGTH  46000

#define SHARP_BIT_MARK 245
#define SHARP_ONE_SPACE 1805
#define SHARP_ZERO_SPACE 795
#define SHARP_GAP 600000
#define SHARP_TOGGLE_MASK 0x3FF
#define SHARP_RPT_SPACE 3000

#define DISH_HDR_MARK 400
#define DISH_HDR_SPACE 6100
#define DISH_BIT_MARK 400
#define DISH_ONE_SPACE 1700
#define DISH_ZERO_SPACE 2800
#define DISH_RPT_SPACE 6200
#define DISH_TOP_BIT 0x8000

#define PANASONIC_HDR_MARK 3502
#define PANASONIC_HDR_SPACE 1750
#define PANASONIC_BIT_MARK 502
#define PANASONIC_ONE_SPACE 1244
#define PANASONIC_ZERO_SPACE 400

#define JVC_HDR_MARK 8000
#define JVC_HDR_SPACE 4000
#define JVC_BIT_MARK 600
#define JVC_ONE_SPACE 1600
#define JVC_ZERO_SPACE 550
#define JVC_RPT_LENGTH 60000

#define SHARP_BITS 15
#define DISH_BITS 16

#define TOLERANCE 25  // percent tolerance in measurements
#define LTOL (1.0 - TOLERANCE/100.) 
#define UTOL (1.0 + TOLERANCE/100.) 

#define _GAP 5000 // Minimum map between transmissions
#define GAP_TICKS (_GAP/USECPERTICK)

#define TICKS_LOW(us) (int) (((us)*LTOL/USECPERTICK))
#define TICKS_HIGH(us) (int) (((us)*UTOL/USECPERTICK + 1))

#ifndef DEBUG
int MATCH(int measured, int desired) {return measured >= TICKS_LOW(desired) && measured <= TICKS_HIGH(desired);}
int MATCH_MARK(int measured_ticks, int desired_us) {return MATCH(measured_ticks, (desired_us + MARK_EXCESS));}
int MATCH_SPACE(int measured_ticks, int desired_us) {return MATCH(measured_ticks, (desired_us - MARK_EXCESS));}
// Debugging versions are in IRremote.cpp
#endif

// receiver states
#define STATE_IDLE     2
#define STATE_MARK     3
#define STATE_SPACE    4
#define STATE_STOP     5

// information for the interrupt handler
typedef struct {
  uint8_t recvpin;           // pin for IR data from detector
  uint8_t rcvstate;          // state machine
  uint8_t blinkflag;         // TRUE to enable blinking of pin 13 on IR processing
  unsigned int timer;     // state timer, counts 50uS ticks.
  unsigned int rawbuf[RAWBUF]; // raw data
  uint8_t rawlen;         // counter of entries in rawbuf
} 
irparams_t;

// Defined in IRremote.cpp
extern volatile irparams_t irparams;

// IR detector output is active low
#define MARK  0
#define SPACE 1

#define TOPBIT 0x80000000

#define NEC_BITS 32
#define SONY_BITS 12
#define SANYO_BITS 12
#define MITSUBISHI_BITS 16
#define MIN_RC5_SAMPLES 11
#define MIN_RC6_SAMPLES 1
#define PANASONIC_BITS 48
#define JVC_BITS 16




// defines for timer2 (8 bits)
#if defined(IR_USE_TIMER2)
#define TIMER_RESET
#define TIMER_ENABLE_PWM     (TCCR2A |= _BV(COM2B1))
#define TIMER_DISABLE_PWM    (TCCR2A &= ~(_BV(COM2B1)))
#define TIMER_ENABLE_INTR    (TIMSK2 = _BV(OCIE2A))
#define TIMER_DISABLE_INTR   (TIMSK2 = 0)
#define TIMER_INTR_NAME      TIMER2_COMPA_vect
#define TIMER_CONFIG_KHZ(val) ({ \
  const uint8_t pwmval = SYSCLOCK / 2000 / (val); \
  TCCR2A = _BV(WGM20); \
  TCCR2B = _BV(WGM22) | _BV(CS20); \
  OCR2A = pwmval; \
  OCR2B = pwmval / 3; \
})
#define TIMER_COUNT_TOP      (SYSCLOCK * USECPERTICK / 1000000)
#if (TIMER_COUNT_TOP < 256)
#define TIMER_CONFIG_NORMAL() ({ \
  TCCR2A = _BV(WGM21); \
  TCCR2B = _BV(CS20); \
  OCR2A = TIMER_COUNT_TOP; \
  TCNT2 = 0; \
})
#else
#define TIMER_CONFIG_NORMAL() ({ \
  TCCR2A = _BV(WGM21); \
  TCCR2B = _BV(CS21); \
  OCR2A = TIMER_COUNT_TOP / 8; \
  TCNT2 = 0; \
})
#endif
#if defined(CORE_OC2B_PIN)
#define TIMER_PWM_PIN        CORE_OC2B_PIN  /* Teensy */
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define TIMER_PWM_PIN        9  /* Arduino Mega */
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
#define TIMER_PWM_PIN        14 /* Sanguino */
#else
#define TIMER_PWM_PIN        3  /* Arduino Duemilanove, Diecimila, LilyPad, etc */
#endif


// defines for timer1 (16 bits)
#elif defined(IR_USE_TIMER1)
#define TIMER_RESET
#define TIMER_ENABLE_PWM     (TCCR1A |= _BV(COM1A1))
#define TIMER_DISABLE_PWM    (TCCR1A &= ~(_BV(COM1A1)))
#if defined(__AVR_ATmega8P__) || defined(__AVR_ATmega8__)
  #define TIMER_ENABLE_INTR    (TIMSK = _BV(OCIE1A))
  #define TIMER_DISABLE_INTR   (TIMSK = 0)
#else
  #define TIMER_ENABLE_INTR    (TIMSK1 = _BV(OCIE1A))
  #define TIMER_DISABLE_INTR   (TIMSK1 = 0)
#endif

#if defined(__AVR_ATtinyX4__)
  #define TIMER_INTR_NAME      TIM1_COMPA_vect
#else
  #define TIMER_INTR_NAME      TIMER1_COMPA_vect
#endif

#define TIMER_CONFIG_KHZ(val) ({ \
  const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
  TCCR1A = _BV(WGM11); \
  TCCR1B = _BV(WGM13) | _BV(CS10); \
  ICR1 = pwmval; \
  OCR1A = pwmval / 3; \
})
#define TIMER_CONFIG_NORMAL() ({ \
  TCCR1A = 0; \
  TCCR1B = _BV(WGM12) | _BV(CS10); \
  OCR1A = SYSCLOCK * USECPERTICK / 1000000; \
  TCNT1 = 0; \
})
#if defined(CORE_OC1A_PIN)
#define TIMER_PWM_PIN        CORE_OC1A_PIN  /* Teensy */
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define TIMER_PWM_PIN        11  /* Arduino Mega */
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
#define TIMER_PWM_PIN        13 /* Sanguino */
#elif defined(__AVR_ATtinyX4__)
#define TIMER_PWM_PIN        6 /* ATTiny84 */
#else
#define TIMER_PWM_PIN        9  /* Arduino Duemilanove, Diecimila, LilyPad, etc */
#endif


// defines for timer3 (16 bits)
#elif defined(IR_USE_TIMER3)
#define TIMER_RESET
#define TIMER_ENABLE_PWM     (TCCR3A |= _BV(COM3A1))
#define TIMER_DISABLE_PWM    (TCCR3A &= ~(_BV(COM3A1)))
#define TIMER_ENABLE_INTR    (TIMSK3 = _BV(OCIE3A))
#define TIMER_DISABLE_INTR   (TIMSK3 = 0)
#define TIMER_INTR_NAME      TIMER3_COMPA_vect
#define TIMER_CONFIG_KHZ(val) ({ \
  const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
  TCCR3A = _BV(WGM31); \
  TCCR3B = _BV(WGM33) | _BV(CS30); \
  ICR3 = pwmval; \
  OCR3A = pwmval / 3; \
})
#define TIMER_CONFIG_NORMAL() ({ \
  TCCR3A = 0; \
  TCCR3B = _BV(WGM32) | _BV(CS30); \
  OCR3A = SYSCLOCK * USECPERTICK / 1000000; \
  TCNT3 = 0; \
})
#if defined(CORE_OC3A_PIN)
#define TIMER_PWM_PIN        CORE_OC3A_PIN  /* Teensy */
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define TIMER_PWM_PIN        5  /* Arduino Mega */
#else
#error "Please add OC3A pin number here\n"
#endif


// defines for timer4 (10 bits, high speed option)
#elif defined(IR_USE_TIMER4_HS)
#define TIMER_RESET
#define TIMER_ENABLE_PWM     (TCCR4A |= _BV(COM4A1))
#define TIMER_DISABLE_PWM    (TCCR4A &= ~(_BV(COM4A1)))
#define TIMER_ENABLE_INTR    (TIMSK4 = _BV(TOIE4))
#define TIMER_DISABLE_INTR   (TIMSK4 = 0)
#define TIMER_INTR_NAME      TIMER4_OVF_vect
#define TIMER_CONFIG_KHZ(val) ({ \
  const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
  TCCR4A = (1<<PWM4A); \
  TCCR4B = _BV(CS40); \
  TCCR4C = 0; \
  TCCR4D = (1<<WGM40); \
  TCCR4E = 0; \
  TC4H = pwmval >> 8; \
  OCR4C = pwmval; \
  TC4H = (pwmval / 3) >> 8; \
  OCR4A = (pwmval / 3) & 255; \
})
#define TIMER_CONFIG_NORMAL() ({ \
  TCCR4A = 0; \
  TCCR4B = _BV(CS40); \
  TCCR4C = 0; \
  TCCR4D = 0; \
  TCCR4E = 0; \
  TC4H = (SYSCLOCK * USECPERTICK / 1000000) >> 8; \
  OCR4C = (SYSCLOCK * USECPERTICK / 1000000) & 255; \
  TC4H = 0; \
  TCNT4 = 0; \
})
#if defined(CORE_OC4A_PIN)
#define TIMER_PWM_PIN        CORE_OC4A_PIN  /* Teensy */
#elif defined(__AVR_ATmega32U4__)
#define TIMER_PWM_PIN        13  /* Leonardo */
#else
#error "Please add OC4A pin number here\n"
#endif


// defines for timer4 (16 bits)
#elif defined(IR_USE_TIMER4)
#define TIMER_RESET
#define TIMER_ENABLE_PWM     (TCCR4A |= _BV(COM4A1))
#define TIMER_DISABLE_PWM    (TCCR4A &= ~(_BV(COM4A1)))
#define TIMER_ENABLE_INTR    (TIMSK4 = _BV(OCIE4A))
#define TIMER_DISABLE_INTR   (TIMSK4 = 0)
#define TIMER_INTR_NAME      TIMER4_COMPA_vect
#define TIMER_CONFIG_KHZ(val) ({ \
  const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
  TCCR4A = _BV(WGM41); \
  TCCR4B = _BV(WGM43) | _BV(CS40); \
  ICR4 = pwmval; \
  OCR4A = pwmval / 3; \
})
#define TIMER_CONFIG_NORMAL() ({ \
  TCCR4A = 0; \
  TCCR4B = _BV(WGM42) | _BV(CS40); \
  OCR4A = SYSCLOCK * USECPERTICK / 1000000; \
  TCNT4 = 0; \
})
#if defined(CORE_OC4A_PIN)
#define TIMER_PWM_PIN        CORE_OC4A_PIN
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define TIMER_PWM_PIN        6  /* Arduino Mega */
#else
#error "Please add OC4A pin number here\n"
#endif


// defines for timer5 (16 bits)
#elif defined(IR_USE_TIMER5)
#define TIMER_RESET
#define TIMER_ENABLE_PWM     (TCCR5A |= _BV(COM5A1))
#define TIMER_DISABLE_PWM    (TCCR5A &= ~(_BV(COM5A1)))
#define TIMER_ENABLE_INTR    (TIMSK5 = _BV(OCIE5A))
#define TIMER_DISABLE_INTR   (TIMSK5 = 0)
#define TIMER_INTR_NAME      TIMER5_COMPA_vect
#define TIMER_CONFIG_KHZ(val) ({ \
  const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
  TCCR5A = _BV(WGM51); \
  TCCR5B = _BV(WGM53) | _BV(CS50); \
  ICR5 = pwmval; \
  OCR5A = pwmval / 3; \
})
#define TIMER_CONFIG_NORMAL() ({ \
  TCCR5A = 0; \
  TCCR5B = _BV(WGM52) | _BV(CS50); \
  OCR5A = SYSCLOCK * USECPERTICK / 1000000; \
  TCNT5 = 0; \
})
#if defined(CORE_OC5A_PIN)
#define TIMER_PWM_PIN        CORE_OC5A_PIN
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define TIMER_PWM_PIN        46  /* Arduino Mega */
#else
#error "Please add OC5A pin number here\n"
#endif


#else // unknown timer
#error "Internal code configuration error, no known IR_USE_TIMER# defined\n"
#endif


// defines for blinking the LED
#if defined(CORE_LED0_PIN)
#define BLINKLED       CORE_LED0_PIN
#define BLINKLED_ON()  (digitalWrite(CORE_LED0_PIN, HIGH))
#define BLINKLED_OFF() (digitalWrite(CORE_LED0_PIN, LOW))
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define BLINKLED       13
#define BLINKLED_ON()  (PORTB |= B10000000)
#define BLINKLED_OFF() (PORTB &= B01111111)
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
#define BLINKLED       0
#define BLINKLED_ON()  (PORTD |= B00000001)
#define BLINKLED_OFF() (PORTD &= B11111110)
#else
#define BLINKLED       13
#define BLINKLED_ON()  (PORTB |= B00100000)
#define BLINKLED_OFF() (PORTB &= B11011111)
#endif

#endif
maksim
Offline
Зарегистрирован: 12.02.2012

И? Вы сами не видите, что таймер не изменен? И сверните портянку.

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

И? Вы сами не видите, что таймер не изменен? И сверните портянку.

Да, тупанул.... поменял на Arduino Mega..

P.S. А как сворачивать портянки?

maksim
Offline
Зарегистрирован: 12.02.2012

Вставка программного кода в тему/комментарий

И обязательно уберите IRsend irsend; иначе у вас не будет работать приемник на 9 выводе.

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

Вставка программного кода в тему/комментарий

И обязательно уберите 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
  }
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Больше никакие.

yanbaev72
Offline
Зарегистрирован: 08.11.2013

maksim пишет:

Больше никакие.

Огромное ВАМ спасибо за помощь! Все заработало!

 

Скажите, а можно как то изменить скетч чтобы платформа двигалась только когда нажата соответствующая кнопка на пульте и останавливалась когда кнопку отпускаешь?

Просто сейчас после нажатия кнопки платформа двигается 1 секунду и останавливается...

carduino.ru
Offline
Зарегистрирован: 06.12.2011

maksim пишет:

Предлагаете человеку перепаять шилд?

Гораздо проще подправить код

yanbaev72
Offline
Зарегистрирован: 08.11.2013

carduino.ru пишет:

maksim пишет:

Предлагаете человеку перепаять шилд?

Гораздо проще подправить код

Проще для того кто знает! А для человека кторорый в основном "программирует" "CTRL-C" "CTRL-V" -это темный лес))

yanbaev72
Offline
Зарегистрирован: 08.11.2013

Сделал такой скетч:

#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... не знаю куда копать?!?..

Vasia.Z
Vasia.Z аватар
Offline
Зарегистрирован: 30.11.2013
#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
  }
}

Попробуйте так, будет ли работать?
(У меня этот скетч работае полностью, но мои коды кнопок заменены кодами из последнего вашего поста)

yanbaev72
Offline
Зарегистрирован: 08.11.2013

Vasia.Z пишет:

#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! С этой задачей я уже справился. Теперь пытаюсь реализовать автономность с помощью ультразвука! Если интересно и есть в этом опыт прошу посетить эту тему!

necrus_deus
Offline
Зарегистрирован: 12.09.2014

доброго времени суток. а у меня вот такой вот вопрос. куда пихать ИК приемник, если миторшилд накрывает мою ардуино уно полностью?

 

SLOM
Offline
Зарегистрирован: 06.11.2014

yanbaev72 пишет:

Спасибо 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(); // Получаем следующее значение
  }
}

в мониторинге вижу

/|
/|
/|
/|
|/
|/
|/
STOP
STOP
STOP
STOP

значит инфракрасный пульт работает, команды прописаны верно. 

как должны работать моторы тоже вроде верно прописано, если делать отдельно без управления то колеса просто крутяться с этим кодом. 

в чем может быть проблема?