Arduino - Puerto Serial.

Hola,
Supongo que sera una tonteria, pero llevo ya un par de dias y no consigo realizar la conexión utilizando Serial (RX(D0)- TX(D1)) con mi modulo GPRS.

Si utilizo los puertos Serial1-Serial2-Serial3 del arduino mega si que me funciona. He probado con el arduino uno y me pasa exactamente lo mismo, con serial no puedo comunicar.
Si utilizo la libreria SoftwareSerial tambien funciona. Pero si utilizo el puerto Serial no comunica, al menos no recibe respuesta del modulo. :o

El proyecto lo quiero implementar utilizando un arduino uno y voy justo de puertos.

Puede ser que tenga algo que ver que ese puerto esta unido al USB¿? HE probado a no tener el usb enchufado al arduino cuando se ejecuta pero tampoco funciona.

Este es el codigo , en funcion de cambiar Serial x Serial1 y cambiar el correspondiente cableado y funciona o deja de hacerlo segun el puerto escogido para comunicar con el modulo.

// the setup routine runs once when you press reset:
void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);

  //No sabia ya que probar...
   pinMode(0, INPUT);  
   pinMode(19, INPUT);  

}


 

// the loop routine runs over and over again forever:
//Si entra alguna respuesta por Serial la sacamos por Serial1.
void loop() {
 

    if (Serial.available())
   {
      Serial1.print("DEBUG->");
      while (Serial.available())
      {
        char c=Serial.read();
        Serial1.print(c);
      }
      Serial1.println();
   }
   else
    Serial1.println("No hay respuesta");
     
    //Enviamos comando AT.
    Serial.println("AT");
    //Espera 1 seg
     delay(1000);      
}

Cualquier ayuda sera bien recibida.

Muchas gracias.

Hola:

Para enviar algo al puerto serie físico, no uses println, usa esto.

    //Enviamos comando AT.
    Serial.write("AT");

Saludos.

Sigue sin funcionar :frowning:

Si conecto con proteus, el puerto no tengo ningun problema en recibir los datos del modulo GSM..
Me estoy volviendo majara. con este tema.

El proyecto lo quiero implementar utilizando un arduino uno y voy justo de puertos.

Puede ser que tenga algo que ver que ese puerto esta unido al USB¿? HE probado a no tener el usb enchufado al arduino cuando se ejecuta pero tampoco funciona.

Un UNO tiene un solo puerto físico en los piens 0 y 1 que esta compartido por el monitor Serie.
De modo que si vas a comunicar algo y quieres monitorearlo debes usar SoftwareSerial.

Si tienes un Leonardo entonces si puedes usar Serial para el monitor Serie y Serial1 para tus dispositivos. O sea,, que ese código se ajusta a un Leonardo, no a un UNO.

Agrega SoftwareSerial a tu código en un par de pines, intercambia RX y TX con el dispositivo o sea
RX SoftwareSerial con TX GPS
TX SoftwareSerial con RX GPS
y todo funcionará correctamente

El tema es que no quiero monitorizar lo que pasa por el puerto serie, unicamente quiero usar ese del arduino para comunicar con el modulo de GPRS.

Para mi que hay algo frito porque no soy capaz de que comunique.

Perdona la tonería pero tienes tx con RX y vice verza?

Si, los cruzo :

rx-tx
tx-rx
gnd-gnd

Pongo igual badurate en ambos dispositivos.. pero nada. Desde serial y desde el arduino mega no tengo problema, pero con el arduino uno no hay su tia, eso si en el arduino mega no me deja tampoco contactar usando el puerto Serial, tengo que usar el Serial1, Serial2 ó Serial3 Esos no están ligados al USB. He de decir que el arduino uno es un arduino clonico y tiene el chipset ch340 para la interface usb no el ftdi. Quizá tenga que ver algo, pero el arduino mega tiene el ftdi y ocurre lo mismo, con la salvedad que este tiene más puertos donde si que funciona.

No sé todo raro raro raro...

vamos por pasos.
primero el UNO

En este código que muestras en el post#1 dime de donde sacas el Serial1?

// the setup routine runs once when you press reset:
void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);

  //No sabia ya que probar...
   pinMode(0, INPUT);  
   pinMode(19, INPUT);  

}


 

// the loop routine runs over and over again forever:
//Si entra alguna respuesta por Serial la sacamos por Serial1.
void loop() {
 

    if (Serial.available())
   {
      Serial1.print("DEBUG->");
      while (Serial.available())
      {
        char c=Serial.read();
        Serial1.print(c);
      }
      Serial1.println();
   }
   else
    Serial1.println("No hay respuesta");
     
    //Enviamos comando AT.
    Serial.println("AT");
    //Espera 1 seg
     delay(1000);      
}

Esto en UNO no tiene sentido porque no existe Serial1.

En MEGA
dices que no puedes leer nada por puerto Serial pero si, cuando lo invertes y usas Serial 1 2 o 3?

El codigo al que te refieres esta hecho con el mega, de este modo todo lo que entra por Serial lo saco por Serial1.
Por eso envio el comando AT al modulo GPRS para que me conteste OK.

Pero con ese codigo no consigo respuesta alguna, sin embargo, si cambio en el codigo Serial por Serial1 y viceversa. Y conecto los cables del puerto Serial al Serial1 si que tengo respuesta.

Por lo tanto lo unico que puedo decir es que por el puerto Serial tanto del Mega como del Uno no consigo contactar con el modulo GPRS, El motivo por el que ocurre esto no lo se, trabajo como programador y mis conocimientos en electronica son escasos.
Pero entiendo que si funciona en Serial1, si hago los cambios correspondientes en Serial deberia funcionar.

De todos modos, ya desisti de usar el UNO he pasado al mega y con el puerto Serial1, Serial2 . Funciona a las mil maravillas.

A mi me sorprende lo que planteas. A menos que malentienda las conexiones.
Yo tengo MEGAs y DUEs (similares al mega en esta función) y jamás me pasó eso.
Claro que siempre uso Serial para monitorear los datos y Serial1 u otro para recibir de un dispositivo Serial.

Que es esto?

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

  //No sabia ya que probar...
   pinMode(0, INPUT);  
   pinMode(19, INPUT);  

}

**PIN 0 es RX del MEGA Serial **
No será ese tu error?
Quita esa línea