UNO + MSS Shield + IR = ?

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

Есть Arduino UNO, MSS Shield, колесная платформа (2 моторчика), IR-приёмник и пульт.

Пытаюсь заставить это всё работать вместе (как машинку с IR-пультом).

По отдельности всё работает:

Скетч отсюда работает отлично: в консоль сыплются значения полученные с приёмника.

Скетч:

/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/
 
#include <IRremote.h>
 
int RECV_PIN = 11;
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
 
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}

Этот скетч тоже работает:

#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);
   
   motor_a.run(FORWARD);
   motor_b.run(BACKWARD);
   delay(5000);
   motor_a.run(RELEASE);
   motor_b.run(RELEASE);
   
   motor_a.run(FORWARD);
   motor_b.run(FORWARD);
   delay(1000);
   motor_a.run(RELEASE);
   motor_b.run(RELEASE); 
   
   motor_a.run(BACKWARD);
   motor_b.run(FORWARD);
   delay(4000);
   motor_a.run(RELEASE);
   motor_b.run(RELEASE);
   
   motor_a.run(BACKWARD);
   motor_b.run(BACKWARD);
   delay(1000);
   motor_a.run(RELEASE);
   motor_b.run(RELEASE);
}

Платформа резво (при питании ардуины от кроны) катается.

При подключении приёмника к одному из разъёмов для серв (на шилде. Там они просто подключены к 9 и 10 пинам) первый скетч также работает нормально.

Обьединяю скетчи:

(сделал поддержку сразу 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 == 0xC9C3741) || (results.value == 0x658E46C4)) { //вперед
      Serial.println("/|");
      motor_a.run(FORWARD);
      motor_b.run(FORWARD);
      delay(1000);
      motor_a.run(RELEASE);
      motor_b.run(RELEASE);
    }

    if ((results.value == 0x925D5B5D) || (results.value == 0xD7E5BC84)) { //назад
      Serial.println("|/");
      motor_a.run(BACKWARD);
      motor_b.run(BACKWARD);
      delay(1000);
      motor_a.run(RELEASE);
      motor_b.run(RELEASE);
    }

    if ((results.value == 0x1644C1C1) || (results.value == 0x5F934D20)) { //налево
      Serial.println("<--");
      motor_a.run(BACKWARD);
      motor_b.run(FORWARD);
      delay(1000);
      motor_a.run(RELEASE);
      motor_b.run(RELEASE);
    }

    if ((results.value == 0xD0529225) || (results.value == 0xCB66B75A)) { //направо
      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) Приёмник шлёт данные в ком-порт

2) В цикле срабатывают if'ы, так как в ком-морт приходят "-->" и т.д.

НО!! никакого влияния на моторы это всё не оказывает.

Куда смотреть, что проверить?

 

noxic
Offline
Зарегистрирован: 15.03.2013

может проблема в таймерах?

http://bigbarrel.ru/irremote-pwm-error/

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

Сейчас попробую, наверное в этом всё дело, потому что по отдельности работает замечательно.

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

хм,теперь в приёмник сыплется совсем чушь

UPD: Ура, всё работает, дело действительно было в используемых библиотеками таймерах! :)

Спасибо, noxic!

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