The (official) Arduino team has finally released the 1.6 version of the Arduino software. After being in the making for over 2 years, this release is an exciting one!

1.6 marks the end of split releases between the traditional 8-bit boards and ARM based boards. There’s some really cool features built-in, so keep reading to see my take on the good, the bad, and the ugly.

What is the Arduino software?

One of the most powerful features of the Arduino eco-system is the all-included IDE. This package runs on all 3 major OS platforms, making it extremely accessible. At first look, the IDE is just a basic code editor. Upon further inspection you’ll see it has a robust compiler (avr-gcc) hidden under the hood. In fact, the entire avr tool chain is there, hidden behind a single button.

The Serial Monitor is a no-frills implementation, which is why I recommend alternatives to Arduino’s serial monitor in another post.

What you see on your PC isn’t the only part of the Arduino software. There are two more integral components: the Arduino Core and Contributed Libraries. Okay well, three, the community…

7 New things in Arduino 1.6

As with any software release, there are a host of improvements and new features. Here’s a few that caught my attention and I am glad to see.

1. ”Add Library…”

New is the “Add Library” support. Explaining to users new to Arduino the difference between library folders in their sketchbook and Arduino directories was difficult. With the “Add Library” option, download a library as a zip file from Github and go.

This actually isn’t “new.” However, 1.6 is the first major release to feature it.

2. Improved Serial Port Listing

Users on the Mac (and Linux) platform usually get confused about whether they should pick cu.* or tty.*. This version of the IDE eliminates it. From my personal experience, I can tell you that /dev/cu.* serial ports are now filtered from the port list on MacOSX–I can’t speak to Linux yet. If you’re a Linux user, let me know your experience in the comments.

Ports like the bluetooth serial devices are still listed, but how would the IDE know to drop them?

Overall, This makes for a simpler list.

The bad: Serial port list dialog from when connection fails was removed!

I am a little disappointed that the “serial-list” dialog no longer pops-up when a serial port disappears.

I’m constantly switching boards, which means my serial devices are changing too. I liked the pop-up that let me choose a new port. Seems to have been removed. *sad face*

3. The board list got cleaned up

The board list received an overhaul. It is divided by processor type and now logically organized. This should help with verifying which board a (new) user should be using.

Finally, some of the older boards, like the original NG have been moved to the bottom of the list.

4. Estimated RAM size on compile

Especially on the ATmega328-based boards like the Uno, it is really easy to run out of RAM. The 2K of RAM can be quickly consumed by strings. Even if the F() function is used to keep strings in PROGMEM, the 2K of RAM can be quickly consumed. This leads to seemingly random “lock-ups.”

Sketch uses 1,030 bytes (3%) of program storage space. Maximum is 32,256 bytes. Global variables use 9 bytes (0%) of dynamic memory, leaving 2,039 bytes for local variables. Maximum is 2,048 bytes.

After a sketch is compiled, the IDE now reports back the global-variable usage for RAM in addition to the binary’s size. The caution here needs to be, this size estimate has NO idea how your functions will be called and use memory. However, this message should help with optimizing code.

If you’re down to a few bytes, you might want to re-think what is kept in RAM and PROGMEM.

5. Replacement of RXTX

There has been a handful of times I got random errors from the RXTX library. This is the Java library that the IDE uses to communicate with serial devices.

The replacement with a newer library, JSSC, seems to make serial operations more stable—at least on OSX.

6. New Constant: LED_BUILTIN

Most Arduino boards have a LED on them. Most (or is it all?) it is found on Pin 13. Arduino 1.6 adds a constant you can use to help make code more portable across Arduino boards: LED_BUILTIN.

void setup() { // initialize digital pin 13 as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }

Unfortunately, it doesn’t look like tutorials like blink have been updated yet. (The above code is mine, just replacing references to 13.)

It would be nice to introduce this constant to new users immediately with the basic example sketches.

7. Configurable Serial Parameters

Finally, it is now possible to easily configure the format of the UART’s data. You can now pass an optional argument to Serial.begin() to change the data, parity, and stop-bits.

For example, if you needed the Arduino Serial port to be set-up for 7-bit, even, with 2 stop bits, you would call Serial.begin with:

Serial.begin(9600, SERIAL_7E2);

Pretty cool, eh?

One issue… the size

The one ugly of the Arduino IDE is that the size has grown. The download for OS X was over 100MB! Some call this bloat. Some call this progress.

Regardless, it does mean needing a decent Internet connection to just get started. Hopefully that can be addressed in the future.

Overall, the 1.6 update marks some major milestones. If you were already on the beta 1.5.x branch, some of these may not seem new. However, if you’re coming from 1.0.x, you’ll notice some differences.

Other than supporting users in the forums or the #arduino IRC channel, 1.6.1 has replaced both my 1.0.x and 1.5.x installs. This has been a tremendous effort by the Arduino team.

Nice job guys!