NewSoftSerial

A New Software Serial Library for Arduino

News: NewSoftSerial is in the core!  Starting with Arduino 1.0 (December, 2011), NewSoftSerial has replaced the old SoftwareSerial library as the officially supported software serial library.  This means that if you have 1.0 or later, you should not download this library.  To port your code to 1.0, simply change all NewSoftSerial references to SoftwareSerial.

NewSoftSerial is the latest of three Arduino libraries providing “soft” serial port support. It’s the direct descendant of ladyada’s AFSoftSerial, which introduced interrupt-driven receives — a dramatic improvement over the polling required by the native SoftwareSerial.

Without interrupts, your program’s design is considerably restricted, as it must continually poll the serial port at very short, regular intervals. This makes it nearly impossible, for example, to use SoftwareSerial to receive GPS data and parse it into a usable form. Your program is too busy trying to keep up with NMEA characters as they arrive to actually spend time assembling them into something meaningful. This is where AFSoftSerial’s (and NewSoftSerial‘s) interrupt architecture is a godsend. Using interrupt-driven RX, your program fills its buffer behind the scenes while processing previously received data.

Improvements

NewSoftSerial offers a number of improvements over SoftwareSerial:

  1. It inherits from built-in class Print, eliminating some 4-600 bytes of duplicate code
  2. It implements circular buffering scheme to make RX processing more efficient
  3. It extends support to all Arduino pins 0-19 (0-21 on Arduino Mini), not just 0-13
  4. It supports multiple simultaneous soft serial devices.*
  5. It supports a much wider range of baud rates.**
  6. It provides a boolean overflow() method to detect buffer overflow.
  7. Higher baud rates have been tuned for better accuracy.
  8. It supports the ATMega328 and 168.
  9. It supports 8MHz processors.
  10. It uses direct port I/O for faster and more precise operation.
  11. (New with version 10).  It supports software signal inversion.
  12. (New) It supports 20MHz processors.
  13. (New) It runs on the Teensy and Teensy++.
  14. (New) It supports an end() method as a complement to begin().

*But see below for an important caveat on multiple instances.
**Be circumspect about using 300 and 1200 baud though. The interrupt handler at these rate becomes so lengthy that timer tick interrupts can be starved, causing millis() to stop working during receives.

Using Multiple Instances

There has been considerable support for an library that would allow multiple soft serial devices. However, handling asynchronously received data from two, three, or four or more serial devices turns out to be an extremely difficult, if not intractable problem. Imagine four serial devices connected to an Arduino, each transmitting at 38,400 baud. As bits arrive, Arduino’s poor little processor must sample and process each of 4 incoming bits within 26 microseconds or else lose them forever. Yikes!

It occurred to me, though, that multiple instances could still be possible if the library user were willing to make a small concession. NewSoftSerial is written on the principle that you can have as many devices connected as resource constraints allow, as long as you only use one of them at a time. If you can organize your program code around this constraint, then NewSoftSerial may work for you.

What does this mean, exactly? Well, you have to use your serial devices serially, like this:

#include <NewSoftSerial.h>

// Here's a GPS device connect to pins 3 and 4
NewSoftSerial gps(4,3);

// A serial thermometer connected to 5 and 6
NewSoftSerial therm(6,5);

// An LCD connected to 7 and 8
NewSoftSerial LCD(8,7); // serial LCD

void loop()
{
  ...
  // collect data from the GPS unit for a few seconds
  gps.listen();
  read_gps_data();  // use gps as active device
  // collect temperature data from thermometer
  therm.listen();
  read_thermometer_data(); // now use therm
  // LCD becomes the active device here
  LCD.listen();
  LCD.print("Data gathered...");
  ...
}

In this example, we assume that read_gps_data() uses the gps object and read_thermometer_data() uses the therm object. Any time you call the listen() method, it becomes the “active” object, and the previously active object is deactivated and its RX buffer discarded. An important point here is that object.available() always returns 0 unless object is already active. This means that you can’t write code like this:

void loop()
{
  device1.listen();
  if (device1.available() > 0)
  {
    int c = device1.read();
    ...
  }
  device2.listen();
  if (device2.available() > 0)
  {
    int c = device2.read();
    ...
  }
}

This code will never do anything but activate one device after the other.

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

Library Version

You can retrieve the version of the NewSoftSerial library by calling the static member library_version().

int ver = NewSoftSerial::library_version();

Resource Consumption

Linking the NewSoftSerial library to your application adds approximately 2000 bytes to its size.

Download

The latest version of NewSoftSerial is available here: NewSoftSerial12.zip.  Note: don’t download this if you have Arduino 1.0 or later.  As of 1.0, NewSoftSerial is included in the Arduino core (named SoftwareSerial).

Change Log

  1. initial version
  2. ported to Arduino 0013, included example sketch in package
  3. several important improvements: (a) support for 300, 1200, 14400, and 28800 baud (see caveats), (b) added bool overflow() method to test whether an RX buffer overflow has occurred, and (c) tuned RX and TX for greater accuracy at high baud rates 38.4K, 57.6K, and 115.2K.
  4. minor bug fixes — add .o file and objdump.txt to zip file for diagnostics.
  5. etracer’s inline assembler fix to OSX avr-gcc 4.3.0 interrupt handler bug added.
  6. ladyada’s new example sketch, fix to interrupt name, support for 328p.
  7. etracer’s workaround is now conditionally compiled only when avr-gcc’s version is less than 4.3.2.
  8. 8 MHz support and flush() and enable_timer0()  methods added
  9. digitalread/write scrapped in favor of direct port I/O.  Revised routines now get perfect RX up to 57.6K on 16MHz processors and 31.25K on 8MHz processors.
  10. inverted TTL signalling supported.  20MHz processors supported.  Teensy and Teensy++ supported.  New end() method and destructor added to clean up.
  11. added listen() method to explicitly activate ports.
  12. warn users about 1.0 conflict

Acknowledgements

Many thanks to David Mellis, who wrote the original SoftwareSerial, and to the multi-talented ladyada, whose work with AFSoftSerial is seminal.  Ladyada also provided the “Goodnight, moon” example sketch, fixed a problem with the interrupt naming (see v6) and tested NSS with the 328p.

Thanks also to rogermm and several other forum users who have tested NewSoftSerial and given useful feedback.

The diligent analysis of forum user etracer yielded the root cause of a tricky problem with NSS on OSX.  A bug in avr-gcc 4.3.0 causes the compiler to fail to generate the proper entry and exit sequences for certain interrupt handlers.  etracer identified the problem and provided an inline workaround.  etracer’s fix is in NSS 5.

User jin contributed a large body of work based on NSS and identified a potential problem that could result in data loss (fixed in NSS 5).  jin also made a variant of NSS that supports 4-pin serial, with the additional pins providing a very nice RTS/CTS flow control.  We may see this in NSS in the near future.

Thanks to Garret Mace, who contributed the delay tables for 20MHz processors and claims that he can send and receive at 115K baud.  Cool!

Thanks to Paul Stoffregen, both for his fine work with Teensy and Teensy++, and for contributing some useful suggestions that help NewSoftSerial run on them without modification.

I appreciate any and all input.

Mikal Hart

Page last updated on July 3, 2013 at 7:37 pm
647 Responses → “NewSoftSerial”

  1. Eric

    16 years ago

    @Mikal
    I’m having some issues using your library with my Parallax RFID reader.
    I have outlined the issue on the Arduino forums here http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1273612596/0
    If you have any insight on what might be wrong it would be greatly appreciated.

    Thanks


  2. Mikal

    16 years ago

    @aka ged–

    You don’t put libraries in your sketch folder; they need to go whereever the built-in libraries are. In Windows this is in the hardware\libraries folder underneath Program Files.

    Mikal


  3. Mikal

    16 years ago

    Hi Eric–

    See my response on the forum. You need to check rfid.available() before trying to read bytes.

    Mikal


  4. Darin

    16 years ago

    Mikal:

    Isn’t you “object.available()” caveat in “Using Multiple Instances” violated in you TwoNSSTest.pde example?

    Thanks.


  5. Fred

    16 years ago

    Hey Mikal,

    Great work with this library !!

    But I have a little trouble using it … I saw in other forum that the delay function can have trouble while using the librarie, so I try to avoid this problem (Ì really need delay in my application) by openning and closing the serial connection each time I need it. But I can’t figure why, but my program seems to be block when I call the begin function (in the loop place for example) …
    Can you help me figure what’s the problem ??
    A little response would be really appreciated, and if you really need it I can send you a sample code…

    Thank you very much !!!

    Fred


  6. Fred

    16 years ago

    Oups just a modification for my previous post, I’m using the serial to communicate between two arduino (or more) with simple RF component…

    And the begin does not fully block, it seems to stay on the begin function for a random time, or perhaps the time to the RF receiver to get any signal on its pin …

    Just for you to know, I’m trying to build an simple architecture with one arduino for the server role, and many other arduinos in emitters role, and each emitter arduino send data to the server arduino.
    So I need to use both hardware serial to send data, because with this one the end() method really disable the pins allowing me to send data with an other arduino (two RF transciever cannot be active in the same time), and then newsoftwareserial to do the listen task, because I need to know if an other arduino is sending data in order to know if can emit something…

    I really need help on this, I’m not an electronik an arduino specialist !!!

    Thank you anyway for your great work !!


  7. Mikal

    16 years ago

    @Darin,

    Perhaps I could have been a bit more clear in describing the hazards of multiple instances, but the main point is this: the first call of object.available() on an inactive NSS instance always returns 0. The function simply activates the instance and returns without waiting for any data to show up. This architecture works reasonably well except in the case where you write code that repeatedly checks available() first on one instance and then another. Each will never do anything but return 0. You must

    The sample code in TwoNSSTest.pde is a little different. It calls available() many, many times on each instance — continuously for 10 seconds — before switching to the other instance. This makes all the difference.

    In the real world, you probably would use time to decide to switch to a new device. You’d probably wait for a specific message or condition.

    Does that help?

    Mikal


  8. Mikal

    16 years ago

    @Fred,

    Delay is only a problem with NewSoftSerial in the sense that you run the risk of overrunning your receive buffer. You won’t solve that by calling begin and end repeatedly. Don’t do it! :) And if you do worry whether you’ve lost data, you can always check object.overflow(). Does that help?

    Mikal


  9. Fred

    16 years ago

    Hi Mikal,

    I’m going to have a look at the overflow() function to see if it can help me. But if I don’t open and close the connection when I need to use the serials functions, like if I start the serial function only in the setup, then when I use the delay() function somewhere in my code, the delay seems to be really untrustable… (1000ms in the code looks like 5000ms in the reality !!)
    Do you think there’s a way to avoid this kind of trouble ??
    Perhap’s by disabling the interuption while I’m not using it, but I’m not sure how to realize this (maybe I remember I see a function for that…) ?


  10. Darin

    16 years ago

    Thanks, Mikal.
    If I do want to repeatedly cycle between multiple instances, would you recommend 2 consecutive calls to object.available()…the first to “activate” the instance, and the second to do the work…or is there a more elegant approach? Just curious: Why did you choose not to automatically “activate” an inactive instance that is being referenced? Efficiency? I am, after all, making a conscious attempt to use the instance.

    Regards.


  11. Mikal

    16 years ago

    @Darin,

    Yes, checking twice is what I recommend, but that’s usually what happens because in nearly every application, NewSoftSerial::available is called repeatedly in a loop and not just once.

    I think I have concluded that it would have been a better architecture to require the user to explicitly activate the instance. When NewSoftSerial gets folded into the Arduino kernel in the next few weeks, I think it will have this explicit activation feature.

    Mikal


  12. Mikal

    16 years ago

    Fred,

    I don’t think there is anything wrong with delay(). And before you substitute repeated begin/end calls, keep in mind that you were not having success there either. I suspect that there is something else going on in your code that is causing problems. I recommend incrementally simplifying your structure until you isolate the problem.

    Mikal


  13. Fred

    16 years ago

    Hi,
    I manage to isolate the part that was causing problem in my program. There’s two weird things, the first one is the begin method, I don’t know why but she take time to pass if there’s no data on the RF receiver … the second one still the delay that are not acurate when the serial is activated …

    I found a solution to my problem by modifiying the HardwareSerial librairie, I manage to create differents methods like endTX() or endRX() for the serial, in order to allow me to use them like I want…

    Thank you anyway for your help, really appreciate it … But If you manage to identify the problems I was talking about don’t hesitate to contact me !!!

    Bye !!


  14. Chibi

    16 years ago

    I have been having issues with incorrect read data. It is consistently corrupted. I am running at 115,200 BAUD. I have not had any problems sending data, but I keep getting -32640 when I should be getting zero. I am really confused because 0 is always 0 in all binary number systems. I was wondering if I was having an issue with the timing on the stop bit or perhaps my BAUD rate is too fast.


  15. Guz

    16 years ago

    @Wolfgang

    Hi, I try to connect the 9DOF to Arduino 2009 too.
    I try to power supply it with the external connector because I read that it needs 70mA and Arduino 3.3V is limited to 50mA.

    I use your code and I receive caracters but it is scrambled.

    I don’t succeded in receiving good caracters.

    Do you get that ?

    Regards.


  16. Mikal

    16 years ago

    chibi — there most definitely is a timing issue. The Arduino process just isn’t precise and fast enough to do 115.2K baud RX reliably.

    Mikal


  17. Mikal

    16 years ago

    @Guz–

    Do you have the grounds connected together?

    Mikal


  18. Guz

    16 years ago

    Hi,

    GND of supply is connected to GND of Serial Port.

    In fact, I manage to get bytes @ 9600 bps but after few ms bytes are corrupted.

    I’ll try at lower baud rates.

    This device uses 3.3V and I connect its TX pin directly to Arduino2009 maybe commutation time is too important (need a 5V 3.3V level shifter)

    @19200 everything is corrupted.

    Will try at 4800 bps and tell you.

    Regards


  19. Guz

    16 years ago

    Hi,

    To give more info.

    Work wery well @4800bps

    So I need to test it with a level shifter.

    Another work is to modify NewSoftSerial to manage 2 active port at the same time.

    I need it because I want to get bytes from a GPS and this board without missing any byte.

    Will see if I achieve to do that.

    If you have info to help me….

    Regards.


  20. simon

    16 years ago

    I will waiting for NewSoftSerial to support Arduino Mega.
    I think that’s cool and useful.
    thank you very much for excellent lib.


  21. Xbee

    16 years ago

    Hi Michael,

    great work. I was looking for it since long. I have two serial devices connected to my Arduino Duemilanove. One to the Rx/Tx and the other to pin 2 and 3. I want to read/write using micro-controller on pin 2/pin 3 device and want to use PC to read and write rx/tx (pin 0/ pin 1) device. but problem is both devices will wait for the serial data to arrive, I want to make priority of device on Pin0/pin1 high.

    You said that we cannot use the code like:

    void loop()
    {
    if (device1.available() > 0)
    {
    int c = device1.read();

    }
    if (device2.available() > 0)
    {
    int c = device2.read();

    }
    }

    then how can i wait for data on both serial ports as data is received my and analyzed by micro-controller in both cases?. I can also do the two tasks one after the other but how will then i wait for data without using device1.available() and device2.available()? Will i have to use device1.begin() and device1.end() before waiting for device 2.

    thanks!


  22. Mikal

    16 years ago

    XBee– If one of your two “serial” ports is the real “Serial” device, you should have no problem reading from both whenever you want. It’s only when both devices are “soft” serial that you have to be careful.

    Mikal


  23. JDC

    16 years ago

    Does anyone know of a problem using the NewSoftSerial and I2C (wire.h)? I recently rewrote a program to use the NewSoftSerial package, but when it starts transmitting the data via I2C, the Arduino freezes.


  24. Geo72

    16 years ago

    Hi,
    great lib!
    I have a (maybe noobish) question: Is it possible to use 9-Bit (9n1) with NewSoftSerial?
    I will need to get 9n1 from NewSoftSerial and send it (modified) over the Hardware UART to the PC.
    Maybe a hit which lines i would need to modifiy would help…

    Thanks!


  25. Mikal

    16 years ago

    Hi Geo72–

    NSS doesn’t support 9n1 (yet?), but it shouldn’t be too hard to modify the recv() function to do it.

    Mikal


  26. Geo72

    16 years ago

    For 9n1 i guess i would need to change the [uint8_t d] to uint16_t? Also the use of the bitmask could be a problem because it can only hold 8-bit?!
    Seem to me it might be a bit (:D) more complicated than i first thought….atlast for me.
    Maybe someone might have some fun to make 9n1 available for NSS? :)


  27. Rico

    16 years ago

    Hello Mikal,
    Great job here !
    Is there a target date for Arduino Mega support ?
    Thanks :)
    Rico


  28. Mikal

    16 years ago

    Rico,

    Not officially, but I would imagine that Mega support will arrive right about the time NewSoftSerial is folded into Arduino 1.0.

    Mikal


  29. Hant

    16 years ago

    It’s a great library. Thanks anyway.

    However, few bytes might be lost with a long bytes input at once.
    For baud rate: 9600, with updated values for parameter: rxcenter in the DELAY_TABLE
    , the problem is fixed.

    The values used in my sample are list as following:
    { 9600, 175, 236, 236, 233, },

    I use Duemilanove in my project.


  30. Dave

    16 years ago

    I seem to be having a problem with NewSoftSerial 10c. I’m using it with my LS20031 gps unit, a Duemilanove and your TinyGPS library. I’ve changed the nss baud to that of my gps, 57600, and tried several different rx pins but it just seems to hang. My monitor stops after printing ‘size of TinyGPS 103’. If I comment out the nss lines and use pin 0 I get data. Am I missing something?

    Dave


  31. Rico

    16 years ago

    Hi Mika,
    I’m currently facing issues with native soft serial and my Mega board.
    I really need to move on NewSoftSerial with my Mega board quickly.
    So, I can not wait for Arduino 1.0 :-(

    Is there a way (beta version or other hack) to get NewSoftSerial running with Megaboard ?

    Thanks !
    Rico


  32. Mikal

    16 years ago

    Dave, 57.6K baud is probably stretching it for Arduino software serial. You’re probably dropping characters. Can you try a reduced baud rate?

    Mikal


  33. Mikal

    16 years ago

    Rico, if you (or someone else) can extend this block to support the Arduino Mega processor, that should be enough to get NewSoftSerial running on it. Any takers? I don’t currently have a Mega or time to read the Mega data sheets.

    // Abstractions for maximum portability between processors
    // These are macros to associate pins to pin change interrupts
    #if !defined(digitalPinToPCICR) // Courtesy Paul Stoffregen
    #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
    #define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)NULL))
    #define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1))
    #define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)NULL))))
    #define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) – 8) : ((p) – 14)))
    #endif


  34. Dave

    16 years ago

    I dropped the baudrate again, this time to 9600. All seems well. Thanks,

    Dave


  35. Chris

    16 years ago

    Hi,

    Thanks for your nice NewSoftSerial library. I just wanted to ask what baud rate you had reliably achieved for receiving data? I wrote a quick program that counts up the number of bytes received and displays the count when you press SPACE over a serial link.

    For bursts of a few bytes, I’m fine at 19200 bps, but if I cut-and-paste 20+ bytes into my terminal at once, then I get about 5% drop rate. Is that normal?

    Also, how does your library cope with full duplex – what happens if data is received whilst other data is being sent out?

    Thanks,

    Chris.


  36. rolo

    16 years ago

    I’m trying to verify the correct retrieving of serial information with NewSoftSerial library .
    I wire the physical UART from Arduino (pins 0 and 1) to two other digital pins (2,3) that are setup as with Newsoftserial library as a new software Serial in the following way:

    0 RX — 3 TX
    1 TX — 2 RX

    Then , with the following code, I try to print what has been read by the created software Serial.

    The problem is that information read doesn’t correspond to the information sent. And I don’t know if there’s a problem with the printing or really in the communication.
    I send “2E” and in return I always receive (at least it’s what is displayed) “32”

    #include

    NewSoftSerial nsSerial(2,3);

    void setup()
    {
    Serial.begin(9600);
    nsSerial.begin(9600);
    //digitalWrite(2,HIGH);
    Serial.print(0xAA,HEX);
    delay(150);
    if (nsSerial.available()>0)
    {
    Serial.print(nsSerial.read(),HEX);
    }
    }

    void loop()
    {

    }

    Thanks in advance for any help to find what I’m doing wrong


  37. Mikal

    16 years ago

    Hello Chris,

    If you are dropping characters at 19.2K I would suspect that you are not processing them fast enough somehow. Can you check to see if nss.overflow is “true”? That’s how you tell for sure that you’re overflowing the RX buffer. I wouldn’t expect 19.2K to pose much problem otherwise.

    Full duplex can sometimes sort of work with NewSoftSerial, but you certainly shouldn’t count on it. The reason is that every time you TX a byte, interrupts are blocked for the entire duration of the transmittal, i.e. 10 bits / Baud-rate seconds. If a byte arrives from the partner during this time, its processing is deferred until the transmission is complete — by which time it’s too late. The byte is corrupted!

    In certain circumstances, like when the protocol is synchronized in question-and-answer fashion, it can work fine, but generally no.
    Thanks,

    Mikal


  38. Mikal

    16 years ago

    Hi Rolo

    I think you want Serial.print(0xAA, BYTE), which transmits a single byte. Serial.print(0xAA, HEX) transmits the string “AA”.

    Cheers,

    Mikal


  39. rolo

    16 years ago

    @Mikal . Thanks!. That was the point. I was sending more than one byte . Now is working fine . I wrote the following code for the testing and everything is ok now for any kind of data format (The code read all the bytes received). I saw it’s important to add a delay between the sending and the reading (50 ms) .

    #include

    const byte rxPin = 2;
    const byte txPin = 3;
    int countOffset =0;
    int bytesRead=0;

    NewSoftSerial nsSerial(2,3);

    void setup()
    {
    Serial.begin(19200);
    nsSerial.begin(19200);

    Serial.print(0x2A,BYTE); //
    delay(50); //
    countOffset = nsSerial.available();
    if ( countOffset > 0 )
    {
    while(bytesRead < countOffset)

    {
    Serial.print(nsSerial.read(),HEX);
    bytesRead ++;
    }
    }
    Serial.println();
    Serial.print(countOffset);Serial.println(" bytes read");
    }

    void loop()
    {
    }


  40. Frits

    16 years ago

    Hi Mikal

    I want to use this library to communicate with a distance sensor (SRF485). The problem is this sensor uses 2 stop bits for both RX and TX. Is it possible to modify the library for 2 stop bits instead of 1 for both printing and reading? If so, can you please advise?

    Thanks
    Frits


  41. Mikal

    16 years ago

    Rolo,

    It is important to wait for the byte to arrive, but rather than waiting an arbitrary number of milliseconds, why not just wait until NewSoftSerial tells you that the data arrived?

    while (nsSerial.available == 0)
    ;

    Mikal

9 Trackbacks For This Post
  1. Grok Think » Blog Archive » I got Arduino sending temp to the computer using xbee wireless.

    […] I had to use this library to communicate with the xbee from the arduino:  http://arduiniana.org/libraries/newsoftserial/ […]

  2. GPS – Welcher Chip? | Ranzow im Umbau

    […] wird über die Serielle Schnittstelle angesteuert. Die werde ich wahrscheinlich über die NewSoftSerial Library […]

  3. GPS – Welcher Chip? | Ranzow im Umbau

    […] GPS Modul wird über die Serielle Schnittstelle angesteuert. Die werde ich wahrscheinlich über die NewSoftSerial Library […]

  4. Cititor RFID 125KHz « Tehnorama

    […] metoda de a afla codul cartelei este de a utiliza biblioteca NewSoftSerial, disponibila gratuit aici. Fisierul zip se dezarhiveaza si se copiaza in folderul libraries al distributiei […]

  5. Lightweight software UART -> custom serial « Robotics / Electronics / Physical Computing

    […] updated the NewSoftSerial library from Arduiniana (thanks Mikal !) so that it takes 2 extra […]

  6. Control Camera with Arduino | SenSorApp

    […] http://arduiniana.org/libraries/newsoftserial/ […]

  7. GPS testing with LCD Character Display

    […] the TinyGPS library from Arduiniana downloaded and installed for it to work. They suggest using NewSoftSerial, but I couldn’t get that to work, so I scrapped that portion. Here’s my […]

  8. #Rallylog Fusebits

    […] it as a fail and moved on, however last night when I set about writing the RFID read function using NewSoftSerial on the RFID I was getting nothing reported back back on the AVR, not a thing coming back from the […]

  9. 433 MHz receiver and NewSoftSerial at mitat.tuu.fi

    […] http://arduiniana.org/libraries/newsoftserial/ http://www.sparkfun.com/commerce/product_info.php?products_id=8950 […]

Leave a Reply