Conectar 2 Arduinos a través de USB

Hola a todos,

Tengo dos placas Arduino, una Mega 2560 y una Duemilanove. Estoy en un nuevo proyecto, en el que una placa (la Mega en este caso) lee los valores de un joystick. Simplemente he abierto el joystick y he conectado los potenciómetros a la Mega ::slight_smile: . Al llegar a unos valores, la Mega manda ‘a’, ‘d’, ‘s’ o ‘w’ por el puerto serie. La Duemilanove lee los valores y hace avanzar, retroceder… un robot. El caso es que sólo funciona si conecto las placas por los pines 0 y 1 de cada una (TX y RX)

Si las conecto las dos por USB, simplemente no funciona. Os pongo el código:

Mega:

int X = A0;
int Y = A1;
int Z = A2;
int XValue = 0;
int YValue = 0;
int ZValue = 0;


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

  
}
void loop() {
  XValue = analogRead(X);
YValue = analogRead(Y);
ZValue = analogRead(Z);
  
    if(XValue > 800){
      Serial.println('a');
    }
    if(XValue < 250){
      Serial.println('d');
    }
     if(YValue > 800){
      Serial.println('s');
    }
    if(YValue < 250){
      Serial.println('w'); 
   }
    
  }

Duemilanove:

int enablePin = 2;
int motor11Pin = 3;
int motor12Pin = 4;
int motor21Pin = 5;
int motor22Pin = 6;
int motor31Pin = 7;
int motor32Pin = 8;
int motor41Pin = 9;
int motor42Pin = 10;
int val;
void panizq();
void pandcha();
void avanzar();
void retroceder();
void izq();
void dcha();
void arriba();
void abajo();


void setup() {
  pinMode(enablePin, OUTPUT);
  pinMode(motor11Pin, OUTPUT);
  pinMode(motor12Pin, OUTPUT);
  pinMode(motor21Pin, OUTPUT);
  pinMode(motor22Pin, OUTPUT);
  pinMode(motor31Pin, OUTPUT);
  pinMode(motor32Pin, OUTPUT);
  pinMode(motor41Pin, OUTPUT);
  pinMode(motor42Pin, OUTPUT);
  Serial.begin(9600);

  Serial.println();
}

void loop() {
  digitalWrite(enablePin, HIGH);
  
  if(Serial.available() > 0){
    val = Serial.read();
    
    if(Serial.read() == 119) {
      avanzar();
    }
    if(val == 115) {
      retroceder();
    }
    if(val == 97) {
      izq();
    }
    if(val == 100) {
      dcha();
    }
    
    delay(70);
  }
  else {
    digitalWrite(motor12Pin, LOW);
    digitalWrite(motor11Pin, LOW);
    digitalWrite(motor22Pin, LOW);
    digitalWrite(motor21Pin, LOW);
    digitalWrite(motor32Pin, LOW);
    digitalWrite(motor31Pin, LOW);
    digitalWrite(motor42Pin, LOW);
    digitalWrite(motor41Pin, LOW);
  }
}

Gracias

Conectas las dos placas con un cable usb de una a la otra? si es asi supongo que tendrias que cruzar los cables D+ y D- de cada una, xk sino mandas los datos a la SALIDA de datos de la otra placa.

Nose si podria ser ese el problema, pero es lo unico que se me ocurre.

Por USB no los vas a poder conectar sin más ya que el chip FTDI no implementa la función de host USB, la misma razón por la que no puedes pasar archivos de un móvil a un disco duro portátil.

Puedes usar cualquiera de las otras mil formas de comunicación ya existentes como RF, RS232, serie ttl, etc.

Un saludo

Perdonad, no me he explicado bien. Conecto las placas al ordenador, un cable USB por cada una. El cable que va a la Duemilanove (en el robot) es de 5m amplificado, para darle margen de movimiento.

Gracias

no tengo claro tu pregunta pero recuerda que para conectar arduino con un pc usando el cable usb y el convertidor ftd232 logicamente de debe pedir los driver en el pc y si tratas de comunicarlo con otro dispositivo como ese otro dispositivo reconocera el driver del fdt232.

hay un grave error conceptual que se debe dejar claro en este caro lo de la comunicacion rs232 y el convertidos usb serial fdt232.

Saludos y comenta mejor tu problematica o dejanos una imagen en bloque o un diagrama de los que estas haciendo en circuiteria y asi vemos el caso.

Atten. Alexander Santana. Venezuela-Barcelona.

La Mega lee los valores de los potenciómetros del joystick que he modificado. Al detectar ciertos valores ( cuando se inclina la palanca del joystick al máximo), la placa Mega envía al PC "a", "d", "s" o "w", según qué eje se haya movido y en qué dirección. Al abrir la consola serial de Arduino, u otro terminal serial, recibo esos datos.

La Duemilanove "escucha" los datos (o al menos eso intento ::) ) que le envía el PC. Según que dato sea, el robot avanza, retrocede o gira. Si con un terminal serial envio "a", el robot avanza.

Lo que quiero es, de alguna forma, sustituir las letras del teclado del ordenador por el joystick. He visto algunos ejemplos con Python, pero no soy capaz de echarlo a andar, siempre con errores y demás, y eso que tengo las librerías.

Gracias

Lo de meter el pc de por medio tiene algún sentido?? vas a controlar, guardar los valores, modificarlos desde el... o simplemente hace de puente??

Si lo lo utilizas simplemente con un cablecito de TX (Mega) a RX (duemilanove) lo tendrías solucionado...

disculpa...

Si NO lo utilizas ....

Pero en el PC tienes algún programa que mande los datos del Mega al Duemilanove?