I’ll admit it… I trash talked the Arduino platform. I’ll also admit that any comments I made were entirely unfounded. Like other people I know, I equated the Arduino platform’s simplicity with “restrictiveness” and “cheesyness.” I don’t know why, but I kind of viewed it as the “VB” of microcontroller programming (ie: good for n00bs, but really bad otherwise). I used to laugh at people who had their little toolboxes with their cute cut-to-length wires and kits.
Well, I have no problem admitting when I’m wrong, and my skewed (and unfounded) opinions of the Arduino have now vanished. Instead of equating the Arduino platform with “VB” rather than something cool like C# or F#, I now view it as a type of mini .NET platform. My main concerns with the Arduino were the fact that the hardware was standardized to work properly (at the time I was playing with specialized chips like the AT90CAN32) and the fact that there is a bootloader on the chip wasting space.
So here’s the deal: I was getting really annoyed one day with having to strip a ton of wires for a proto-board I was using and decided that I would buy an Arduino to have standardized pin-outs and a shield with a small proto-board on top of it. I figured that I would nuke the bootloader and just program the thing using my Dragon. When it arrived, I decided that I would actually take a good look at the Arduino platform before I decided to nuke the bootloader… and I’m glad I did! That was when I realized that the Arduino platform is really nothing more than a set of libraries built to make programming easier, much like the .NET base class library. The IDE compiles “sketches” into .hex files just like AVRStudio does (albeit they are hidden in stupid windows .tmp folders), and I can still nuke the Arduino bootloader and program it using my Dragon, even if the code was written in the Arduino IDE. This was news to me, I knew the arduino “sketches” had their own file extensions, and I had never seen a .hex file in any Arduino project folders so I didn’t really know what was happening behind the scenes. I decided to attempt a small project with the Arduino and something amazing happened: I finished the project in record time. In fact, within a few hours of receiving my Arduino I had gotten an RFID reader, a video overlay module and a GPS module working, none of which I had ever used before. Not having to cut/strip a ton of wires helped a bit, not having to worry about setting up registers that had to be looked up in datasheets and extra calculations that used to drive me nuts (ie: UBRR, etc…) saved me SO MUCH TIME it was ridiculous. The libraries are just regular .cpp and .h files and I have already easily created two Arduino libraries. The best part is that the source is all there so if I don’t like the way one of the libraries works or, for example, want to change which pin is used for a particular function, I can simply open the file, make the change and be done with it. I’ve heard people criticize the Arduino for this, saying that there’s no point in using the library if you have to change it each time you do something different, but changing one line of code beats writing 50 IMO.
Now, if I were going to release something commercially I would likely still take the time to code the low-level stuff myself just to make sure everything is as efficient as it can be, but for rapid prototyping I can honestly say that I really enjoy working with the Arduino. I now carry a little toolbox with my Arduino, some shields and a stack of pre-cut breadboard wires (thx Lady Ada :D). Whoda thunk it? 😛