Cómo saber si la placa está conectada al ordenador

Hola buenas, hacía mucho tiempo que no me conectaba pero aquí estoy con una pregunta, a ver si alguien sabe una solución.

Tengo un Arduino UNO y un conversor TTL-RS232 para comunicarme con otro equipo. UNO solo tiene un puerto serie compartido con la conexión USB para programarlo así que para subir el programa desde el ordenador es obligatorio desconectar el conversor TTL-RS232. Cuando esté todo montado dentro de una caja y quiera actualizar el programa no podré acceder para desconectar el conversor. Así que la solución que se me ha ocurrido es:

  • Alimento el conversor desde una salida.
  • Detecto en la programación si está conectado al ordenador y si es así desactivo la salida que alimenta el conversor y ya puedo subir el programa sin problema.

Pero no sé si existe algún tipo de instrucción para saber si la tarjeta está o no conectada al ordenador (si tiene conexión el usbmodedFD131).

La otra opción sería al inicio del programa activar la salida con la alimentación del conversor después de un delay de unos segundos. Recién conectada la tarjeta al ordenador tengo esos segundos para subir el programa. Esto ya lo he probado y me funciona pero preferiría que el arranque de Arduino fuera rápido, que no tuviera que poner ese delay.

Gracias.

Pues en principio parece que lo tengo solucionado. El funcionamiento de este conversor TTL-RS232 es muy particular. Si lo alimento desde una salida de Arduino y tengo conectado el cable RS232 al otro equipo, puedo subir el programa.

Bueno, nos alegramos por dos motivos.

  1. Porque has vuelto al foro. Te leí allá por 2014 y ya habías dejado de participar.
  2. Porque encontraste la solución.

Suerte.

Gracias surbyte.

Pongo lo que yo he hecho para que me funcione por si pudiera ser de utilidad a otro usuario en el futuro.

void setup() {
// initialize serial:
  Serial.begin(115200);
  pinMode(2, OUTPUT);
  digitalWrite(2, LOW);

// Iniciando conversor TTL-RS232 y primera conexión RS232
  delay(2000);
  digitalWrite(2, HIGH);
  delay(2000);
  Serial.write(0xF2);  //Puede enviarse cualquier byte, también puede ser Serial.print()
}

Los delay() y alimentar desde el pin 2 es para asegurar el correcto arranque del conversor TTL-RS232. De esta manera además se puede subir el sketch sin tener que soltar la conexión del Arduino al conversor. Alguna vez me ha dado error y simplemente soltando el cable de salida del RS232 al otro equipo ya he podido subir el sketch. El posterior Serial.write() es porque no sé por qué razon el primer código enviado por puerto serie realmente no se envía. Curiosamente esto lo he visto también en otros sistemas de control, sin nada que ver con Arduino, el primer envío por puerto serie es como si no se enviara.

Hola:

Dime que tarjeta quieres saber si está conectada a Arduino o no.
A lo mejor lo que pides, incluyendo el propio Arduino, a lo mejor como prueba, hago un pequeño programa que indique cuando está o no conectado Arduino o la tarjeta que dices.

El diseño me lo cuentas.

Por ejemplo, si conectas Arduino al USB, lo puede saber automaticamente. Desde que detecte un cambio de quitar o poner el USB, lo sabe.

Otra cuestión es tener un modelo o diseño del software que te guste como se muestre y lo que hace o no hace.

Te dejo un programa de ejemplo.Lo acabo de terminar ahora mismo.

Saludos.

Detectar_Arduino.zip (4.91 KB)

Gracias Metaconta.

El archivo que adjuntas no es una programación para Arduino, es una aplicación .exe
Yo lo que quería es alguna instrucción en el código de Arduino con el que se detectara si está o no conectado por USB al ordenador.
Realmente mi problema ya lo tengo solucionado tal como puse pero si sabes alguna instrucción para Arduino para saber si está o no conectado por USB al ordenador siempre está bien saberlo.

Saludos.

Hola:

No te había entendido. No se si en Arduino detecta cuando envías un byte o al recibir tal como lo hace algunos PIC, que te detecta cuando recibe datos hacia dentro.

No se si hay alguna instrucción de Arduino IDE que sea capaz de detectar tan fácil cuando tienes la placa de Arduino conectado al USB.

En mi caso, haría un truco si no se pudiese desde el código de Arduino. Creo una aplicación con un programa de Windows, Linux o Mac, en el que detecte Arduino envía un byte a Arduino y Arduinon le devuleve otro byte y se ve tanto en el PC que se hace de forma automática que en las dos partes hay unUÇSB conectado.

Saludos.

Hola de nuevo:

Descubrí que en void setup puedes añadir estas instrucciones y si indica cuando Arduino detecta que se conectó.

void setup()
{
  // Baudios del puerto serie.
  Serial.begin(115200);
// Espere a que se conecte el puerto serie. Necesario USB nativo.
  while (!Serial); 
// Envía un OK para confirmar. 
 Serial.println("OK");
}

¿Te parece bien?

:slight_smile: