but it looks to me like New Soft Serial is still going to spend all it's time blocking, while its reading the GPS.
Unless I'm missing something important, it seems to me that NewSoftSerial spends 98% of the Arduino's resources doing tunedDelay.
Is it possible to get an interrupt for both falling and rising edges on a digital pin? I believe it is.
I'm interfacing GPS (using New Soft Serial), Compass (I2C), and WiFi (SPI), along with miscellaneous simpler sensors. The blocking behavior of the Wire (TWI) library and New Soft Serial strike me as probably incompatible ...
20 Mips is a *lot* to work with.
Tomorrow, I'll "normalize" it so that it can be used as the serial input to the TinyGPS library, and put it where others can use it. At some point I'll do a Tx part, and make it work as a replacement for NSS.
What I'm thinking is that every second a GPS sends a torrent of data.
// send the GPS these strings on init . . .#define GGA_OFF "$PSRF103,00,00,00,01*24\r\n"#define GLL_OFF "$PSRF103,01,00,00,01*27\r\n"#define GSA_OFF "$PSRF103,02,00,00,01*26\r\n"#define GSV_OFF "$PSRF103,03,00,00,01*27\r\n"#define RMC_OFF "$PSRF103,04,00,00,01*20\r\n"// send this just before you check for a read . . .#define RMC_READ "$PSRF103,04,01,00,01*21\r\n" // used to REQUEST a RMC sentance
It only does receive and doesn't actually put the last character into the buffer until the next one is received, but it doesn't block!