I've been reading the documentation and what I've been told, and read, about the SoftwareSerial library is at odds with the documentation page for the constructor.
On http://arduino.cc/en/Reference/SoftwareSerialConstructor it only shows two parameters. As I now understand it, there's an optional third parameter, to set inverted logic, which hasn't been mentioned.
http://arduino.cc/en/Reference/SoftwareSerialConstructor:
SoftwareSerial(rxPin, txPin)Description
A call to SoftwareSerial(rxPin, txPin) creates a new SoftwareSerial object, whose name you need to provide as in the example below.
It seems the SoftwareSerial library is this: NewSoftSerial | Arduiniana
That being the case, the documentation is out of date, and the description of the constructor needs to include this:
http://arduiniana.org/libraries/newsoftserial/:
Signal Inversion“Normal” TTL serial signaling defines a start bit as a transition from “high” to “low” logic. Logical 1 is “high”, 0 is “low”. But some serial devices turn this logic upside down, using what we call “inverted signaling”. As of version 10, NewSoftSerial supports these devices natively with a third parameter in the constructor.
NewSoftSerial myInvertedConn(7, 5, true); // this device uses inverted signaling
NewSoftSerial myGPS(3, 2); // this one doesn't
http://arduiniana.org/libraries/newsoftserial/:
change all NewSoftSerial references to SoftwareSerial.