Ardino CAR и ИК-пульт, не работают 2 задних двигателя при подключении ик-датчика

Skaper
Offline
Зарегистрирован: 24.06.2012
Написал такой скетч для управления Arduino car c ИК пульта, ик-датчик подключил к серво-поту 2 (он же 10 порт ардуино) Motor control shield. Но когда использую пульт включаются не все 4 двигателя, а только 2 передних М3 и М4,дрругие моторы рабочие, с другими скетчами (например таким) без ик-пульта работают все 4. Питание на входе Motor control shield +7,5в. В чем может быть проблема?   
#include <AFMotor.h>;
#include <IRremote.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
  irrecv.enableIRIn(); // включить приемник
  delay(1000);
Serial.begin(9600);
}
void loop(){
  motor1.setSpeed(255);
  motor2.setSpeed(255);
  motor3.setSpeed(255);
  motor4.setSpeed(255);
Serial.println(results.value, DEC);
if (irrecv.decode(&results)) {
  delay(300);
  if (results.value == 1033561079) {inFORWARD();} //Вперед
  if (results.value == 1217346747) {inBACKWARD();} //Назад
  if (results.value == 71952287) {inRIGHT();} //Вправо
  if (results.value == 2351064443) {inLEFT();} //Влево
  if (results.value == 465573243) {STOP();} //Стоп
  irrecv.resume();
} 
}
void inFORWARD(){
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}
  
void inBACKWARD(){
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD); 
}

void inLEFT(){
  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(FORWARD);
}
void inRIGHT(){
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(BACKWARD);
}
void STOP(){
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}

На фото красным выделенно M1  и М2 (задние) которые не работают...

http://hostingkartinok.com/show-image.php?id=6a904835f70524de404cef46c82...

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

Note:

The following pins are in use only if the DC/Stepper noted is in use:

D11: DC Motor #1 / Stepper #1 (activation/speed control)

D3: DC Motor #2 / Stepper #1 (activation/speed control)

D5: DC Motor #3 / Stepper #2 (activation/speed control)

D6: DC Motor #4 / Stepper #2 (activation/speed control)



The following pins are in use if any DC/steppers are used:

D4, D7, D8 and D12 are used to drive the DC/Stepper motors via the 74HC595 serial-to-parallel latch.



The following pins are used only if that particular servo is in use:

D9: Servo #1 control.

D10: Servo #2 control.

и на 10 пине как раз сидит контроль колес.. :)

 

Skaper
Offline
Зарегистрирован: 24.06.2012

Разьем с Motor control shield, ser1 который, контакт S, с него идет на прямую на контакт 10 арудуино. 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

И что? вы думаете что если на 10 пин кроме сервы еще воткнуть инфракрасный сенсор то будет все замечательно?

ну тогда думайте дальше почему оно у вас не работает :)

Skaper
Offline
Зарегистрирован: 24.06.2012

C 13 портом та же истори =(

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

а вы вообще как его подключаете и куда?

Skaper
Offline
Зарегистрирован: 24.06.2012

напоял поверх motor control shield контакты на свободние пины, к 13 и 2,1,0(их пока не испоьзую), подключаю к пинам земли и +5в ик приемник motor control shield, (пробовал напрямую к arduino, то же самое). Может быть конфлик библиотек AFMotor и IRremote?

Skaper
Offline
Зарегистрирован: 24.06.2012

2 порт тоже, всетаки дело не в подключении ик-приемника, передние колеса же на все команды откликаются!

А задние не работают только с эти скетчем...

Skaper
Offline
Зарегистрирован: 24.06.2012

Решил пробелему правкой конфигов библиотеки IRremote (как описанно в теме). Дело в том что IRremote использует timer2, а AFMotor timer0 для моторов M3, М4 и тоже timer2, но для М1 и М2. 

Чтобы исправить, нужно в файле ...\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