Arduino Library – NewSoftSerial
Installatie van Arduino IDE libraries: Arduino info
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 allNewSoftSerial 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.
*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:
// Here's a GPS device connect to pins 3 and 4
// A serial thermometer connected to 5 and 6
// An LCD connected to 7 and 8
NewSoftSerial LCD(8,7); // serial LCD
// collect data from the GPS unit for a few seconds
read_gps_data(); // use gps as active device
// collect temperature data from thermometer
read_thermometer_data(); // now use therm
// LCD becomes the active device here
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().