0

I am attempting to use this code to receive data from 2 ports, alternating between them:

/*
  Software serial multple serial test

  Receives from the two software serial ports,
  sends to the hardware serial port.

  In order to listen on a software port, you call port.listen().
  When using two software serial ports, you have to switch ports
  by listen()ing on each one in turn. Pick a logical time to switch
  ports, like the end of an expected transmission, or when the
  buffer is empty. This example switches ports when there is nothing
  more to read from a port

  The circuit:
  Two devices which communicate serially are needed.
   First serial device's TX attached to digital pin 10(RX), RX to pin 11(TX)
   Second serial device's TX attached to digital pin 8(RX), RX to pin 9(TX)

  Note:
  Not all pins on the Mega and Mega 2560 support change interrupts,
  so only the following can be used for RX:
  10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

  Not all pins on the Leonardo support change interrupts,
  so only the following can be used for RX:
  8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

  created 18 Apr. 2011
  modified 19 March 2016
  by Tom Igoe
  based on Mikal Hart's twoPortRXExample

  This example code is in the public domain.

*/

#include <SoftwareSerial.h>
// software serial #1: RX = digital pin 10, TX = digital pin 11
SoftwareSerial portOne(10, 11);

// software serial #2: RX = digital pin 8, TX = digital pin 9
// on the Mega, use other pins instead, since 8 and 9 don't work on the Mega
SoftwareSerial portTwo(50, 51);

int RFIDResetPin = 13;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  pinMode(RFIDResetPin, OUTPUT);
  digitalWrite(RFIDResetPin, HIGH);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  // Start each software serial port
  portOne.begin(9600);
  portTwo.begin(9600);
}

void loop() {
  // By default, the last intialized port is listening.
  // when you want to listen on a port, explicitly select it:
  portOne.listen();
  Serial.println("Data from port one:");
  // while there is data coming in, read it
  // and send to the hardware serial port:
  while (portOne.available() > 0) {
    char inByte = portOne.read();
    Serial.write(inByte);
  }

  // blank line to separate data from the two ports:
  Serial.println();

  // Now listen on the second port
  portTwo.listen();
  // while there is data coming in, read it
  // and send to the hardware serial port:
  Serial.println("Data from port two:");
  while (portTwo.available() > 0) {
    char inByte = portTwo.read();
    Serial.write(inByte);
  }

  // blank line to separate data from the two ports:
  Serial.println();
}

I am using a mega2560, and have the pins placed in the 10 and 51 port. any help is appreciated.

  • Does it work, if you only use one Software serial interface? Why are you using Software Serial anyway? The Mega has 4 hardware serial interfaces. Currently I don't see, why your program should work reliably, since you are listening on the individual interfaces only for very short time intervals. Definitely not enough to receive much data at 9600 baud – chrisl May 2 at 20:14
  • @chrisl Im going to try to set a higher baud rate, maybe that will help. – Rambunctiouslad May 6 at 16:28
  • This is still not a good way to read the two software serials. You could try to first read a full message from one software serial and then change to the second software serial and read a full message there. This would ensure, that you always read a valid message from each interface. – chrisl May 6 at 20:13
  • But again: Why SoftwareSerial? Why not hardware Serial interfaces? – chrisl May 6 at 20:14
  • @chrisl Yeah, I realized I was being dumb about it. I'm now using the hardware serial ports. I succesfully got serial1 to send to the serial monitor, now I a trying to set up serial2, so arduino will run through them sequentially. Any idea how to do that? – Rambunctiouslad May 8 at 17:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.