Conflicto con librerias....

Bueno estoy intentando mover algo con un motor shield de adafruit y con un modulo RF de 433 MHZ…

asi que tendria las librerias <VirtualWire.h> para el RF y el <AFMotor.h> para los motores, la cosas es que todo el rato trabaje con cada uno por separado sin problemas, la cosa curiosa esta en que el Sketch que trabaja con las dos de la nada dejo de cojer señal y luego de mover y quitar de todo noto que al quitar un comando de la libreria de el shield empieza a funcionar de nuevo…

En la libreria del shield esta este comando Der1.setSpeed(150); que determina la velocidad para cada motor, todos los demas comando de la librerias puedo dejarlos y funciona los de la señal sin problema, pero si el Sketch llega a pasar por cualquier punto del codigo donde este ese setSpeed(); de inmediato deja de captar la señal RF y me a dejado mosqueado y sin la mas remota idea de que pasa…

ya que el comando es quien determina la velocidad de los motores si no se le usa el motaje esta en punto muerto porque no se le puede dar velocidad a los motores…

Alguna idea ? porque la verdad estoy fundido con este problema.

Cuando las cosas andas por separado pero no juntas el problema es que estan compartiendo pines. Busca que pines Usa VirtualWire y AFMOTOR en común y ese pin tendrás que cambiarlo. Es obvio que tiene que ver con SetSpeed asi que tienes donde buscar. Analiza los archivos Cpp de VirtualWire y Afmotor y tendras tu respuesta.

Hace semanas aconsejé por un problema similar entre Afmotor Shield y Ethernet Shield. Acá debe ser el mismo caso.

Esta claro que el conflito existe.. pero justo que comentas lo de un pin comun entre las dos librerias y es que el de RF solo uso un pin que es por donde o sale la señal o entra.. pero este pin uno lo escoje...

Ya sera pasar un rato largo mirando donde esta el problema

¿Podría estar en que compartan un timer?

No se que es un timer… Que tienen que ver con algun tipo de control de tiempo en bace al tiempo en las librerias ?

Sí. Los timers son unos contadores por hardware. Por explicarlo coloquialmente, se programa su divisor de reloj, el número en el que alcanzará el final de cuenta y la función que realizará entre varias posibles (conmutar un PWM, lanzar una interrupción...). Ambas librerías, por lo poco que he visto, están tirando de timers, así que probablemente cuando estableces la velocidad de un motor, estás modificando los parámetros de un timer que está usando la librería virtualwire.

Ahora no se como continuar…

Intentar trabajar sobre la libreria de <AFMotor.h> y intetar buscar el problema

Intentar usar el Shield sin su libreria, practicar y ver como pongo a andar el shield

Usar L293D sueltos con una mini proto y muchos de eso cables de montajes, ya que antes de tener el shiel ya tenia L293D y monte carros con ellos

No sé qué arduino estás utilizando, ni qué timers tendrás en uso para controlar el motor, pero puedes intentar modificar con un editor de texto el archivo VirtualWire_Config.h de la librería para indicar que utilice un timer distinto.
Para ello ve a la línea 30 de dicho fichero y descoméntala (quita los // del principio):

#define VW_TIMER_INDEX 1

y prueba a cambiar el 1 por otro número de timer (si no utilizas millis en tu programa, puedes intentar con 0).
A ver si hay suerte y suena la flauta.
Saludos.

Uhh gracias por la respuesta, uso un Nano para enviar la señar y un Mega para trabajarla ...

Con relacion a los timers, no se del tema en particular por eso lo de editar las librerias lo veo como el camino mas dificil para mi en particular, ademas no se porque llegado el caso de modificar una libreria preferiria la del motor shiel que la del RF

Ahora intentare lo que comentas... Que ahora mismo estoy intentando entender la electronica del shield para intentar usarlo sin libreria

porque no pones el código para ver donde puede estar el problema. esta claro que son las librerias pero para simular eso ayuda.

Hola … thx por las respuesta pero no pude entrar de inmediato al post ya que estoy en tiempo de examenes…

noter

No encontre archivo con tal nombre, abri todos y busque la linea VW_TIMER_INDEX y en ningun archivo salio de lo que estan en la libreria :~

surbyte

Este mas bien es para escanear la señal que parte de mi emisor y le coloque las partes para mover motores con el shield de AF, y tambien se genera el problemas…

La parte del primer si con buf == ‘R’[/b] es porque el emisor siempre inicia una señal con la “R” y luego esa el segundo si que tienen buf[4] == 9, que asi suena poco logico pero en el emisor usa cn codigo de numeros para cada situacion y ese nueve es por decir si se le da a un boton.
El programa funcina perfecto y pone todo el comando que envia el emisor hasta que se me da por darle al boton que marca ese nueve y el programa entra al fondo … sale el Serial.println(“ppppp”); y luego de eso el programa deja de recibir del emisor
```
*#include <VirtualWire.h>
#include <AFMotor.h>

AF_DCMotor Der1(1);

void setup()
{
Serial.begin(9600);

vw_setup(2000);
  vw_set_rx_pin(53);
  vw_rx_start();
}

void loop()
{
 
  Der1.run(RELEASE);
 
  byte buf[VW_MAX_MESSAGE_LEN];       
  byte buflen = VW_MAX_MESSAGE_LEN;

if(vw_get_message(buf, &buflen))
  {
    for(int i = 0;i < buflen;i++)
    {
     
      Serial.print(buf[i]);Serial.print(" “);
      if (buf[i] == ‘R’)
      {
        Serial.print(i);Serial.print(” … “);
      }
     
    }
    Serial.println(”");
   
    if (buf[4] == 9)
    {
      Moveasd();
    }
  }
}
void Moveasd ()
{
      Serial.println(“ppppp”);
      Der1.setSpeed(180);
}

__
```*__

Algien tiene idea de donde esta “VW_TIMER_INDEX” que comenta noter, porque aun estoy con este problema de librerias… : (

¿Qué librería virtualwire usas? ¿Puedes mandar vínculo?

ayudanos para ayudarte. Llevas de Setiembre 14 con este problema, me imagino porque a mi me ocurre que estarás ya muy frustrado con el tema. Entonces.sube tu sketch, sube las librerías todo en un archivo comprimido por favor. Asi los que podamos analizar tu problema lo haremos en igualdad de condiciones. Si yo bajo una librería que dice VirtualWire distinta a la tuya y me da errores diferentes mis respuestas no serán de ayuda.

Esperando entonces los archivos.

Bueno alfin puedo retomar el tema, la cosas es que por un accidente “Mientras movia unas cosas un cable de alimentacion se poso sobre elementos de la circuiteria creando un corto y quemando parte importante del montaje que requeria la el radio control”

Ya alfin teniendo reemplazos para lo dañado continuo donde me quede, luego de buscar por internet ya que tambien en el tiempo que a pasado cambie de computadora, las librerias que use fueron estas
VirtualWire
http://www.pjrc.com/teensy/td_libs_VirtualWire.html
AFmotor

y de nuevo intente lo mismo con estas y nuevamente el mismo problema… Aqui les dejo codigo de ejemplo

#include <VirtualWire.h>
#include <AFMotor.h>

AF_DCMotor Der1(1); 

void setup()
{
 Serial.begin(9600);
 
  vw_setup(2000);
  vw_set_rx_pin(22);
  vw_rx_start();
}

void loop()
{
  
  Der1.run(RELEASE);
  
  byte buf[VW_MAX_MESSAGE_LEN];        
  byte buflen = VW_MAX_MESSAGE_LEN;

  if(vw_get_message(buf, &buflen))
  {
    for(int i = 0;i < buflen;i++)
    {
      
      Serial.print(buf[i]);Serial.print(" ");
      if (buf[i] == 'R')
      {
        Serial.print(i);Serial.print(" .. ");
      } 
      
    }
    Serial.println("");
    
    if (buf[4] == 9)
    {
      Moveasd();
    }
  }
}
void Moveasd ()
{
      Serial.println("ppppp");
      delay(500);
      Der1.setSpeed(180);
}

Y para hacer mas facil entenderlo el IF que pregunta si buf == ‘R’ es porque los mensajes del emisor siempre inician con R y luego la parte mas importante es en la que hay un if que pregunta if (buf[4] == 9) este valor esta dado por el emisor, al darle a un boton este estado cambia y se cumple pasado el Sketch a la parte de
* *void Moveasd () {       Serial.println("ppppp");       delay(500);       Der1.setSpeed(180); }* *
En la que por pantalla el programa pasas lo de PPPPP pero que al llegar a
* *Der1.setSpeed(180);* *
que hace parte de la libreria AFmotor y que es para determinar la velocidad de uno de los motores el programa deja de funcionar y no llega mas informacion por pantalla…
ya que la primera parte del programa inmprime una y otra vez lo que envia el emisor se nota de inmediato ya que se queda en lo de PPPPP y el arduino no das mas señal de vida…
De antemano gracias por toda la ayuda de la comunidad de los foros…!