Cómo utilizar un puerto serie múltiple en Arduino

He obtenido 2 escudos de Itead; Escudo GPS y escudo IComSat GSM. Tengo un requisito para desarrollar un prototipo Arduino Uno y usé una interfaz serial para comunicarme con estos dos escudos. Mis bocetos usan SoftwareSerial pero parece que no funciona correctamente, ¿hay alguna forma óptima de combinar estos dos escudos?

Escudo Arduino GPS http://imall.iteadstudio.com/im120417017.html

Escudo IComSat GSM/GPRS http://imall.iteadstudio.com/im120417009.html

Sería útil ver su esquema y código.
Lo más probable es que pueda arreglárselas con SoftwareSerial usando la respuesta del usuario 30997, pero solo para su información, cuando necesite múltiples puertos serie, también puede probar el Arduino Mega en su lugar, o si hace su propia placa, use un Atmega2560 con sus 4 puertos serie, todos los UART de hardware, para que pueda usarlos como Serial1.begin(), Serial2.begin(), Serial3.begin(), etc.
¿Hay una versión mini o más pequeña de Arduino Mega?
@wajatimur Pruebe Mega Pro Mini 3.3V o el Sanguino . El primero es igual a Mega en una forma más pequeña; El segundo es un Arduino con Atmega644P en lugar de Atmega328, por lo que obtienes dos UART (puertos serie).

Respuestas (1)

¿Tiene problemas con alguna de las restricciones de Software Serial?

  • Si utiliza varios puertos serie de software, solo uno puede recibir datos a la vez.
  • No todos los pines de Mega y Mega 2560 admiten interrupciones de cambio, por lo que solo se pueden usar los siguientes para RX: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67 , 68, 69
  • No todos los pines del Leonardo admiten interrupciones de cambio, por lo que solo se pueden usar los siguientes para RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

Dado que estás usando los escudos, tendrías problemas con mi truco favorito. Ocasionalmente he usado relés, multiplexores analógicos o transistores para cambiar la funcionalidad de los pines sobre la marcha. Al usar un pin digital para seleccionar con qué dispositivo serie desea hablar, puede hacer que ambas canalizaciones de comunicación se realicen en los pines 0 y 1. Sin embargo, esa no es una opción con los escudos estándar.

Esta es probablemente la razón; cambie su elección de pines para SoftwareSerial. Además, no sé si se ha revisado la versión de la biblioteca predeterminada de Arduino, pero de lo contrario, le recomiendo que use la biblioteca NewSoftSerial (a menos que aparentemente esté usando Arduino 1.0, en cuyo caso ya está integrado como "SoftwareSerial")
Para completar la referencia futura, en su Respuesta, quizás también pueda agregar los pines para el Uno que admiten interrupciones de cambio.
Hay un pin de interrupción de cambio en el escudo GPS adjunto al pin 8 y 9 en arduino. ¿Te refieres a usar la función de interrupción de cambio y leer los datos en serie?