Author: Richard Blum
Audience: D-I-Y enthusiasts with some programming background
Reviewer: Harry Fairhead
There are lots of books on the Arduino - what makes this one worth your attention?
This is one of the best books on using the Arduino I've read and don't be put off by the "programming" in the title, it is also about using the hardware. Unlike most books on the Arduino this book does initially focus almost exclusively on the software. It essentially teaches you how to program in C for the first 11 hours and then switches to more and more hardware-oriented topics. Although it starts from the very beginning of the story it might not be suitable for complete beginners. The style and level is targeting the intelligent adult with some ideas about how things work.
The first three hours take you over the basics of the Arduino and the Arduino family. Given the speed that these things change there is bound to be new members of the family before the next edition. You also meet some basic electronics here - using prototyping boards and simple LED circuits. At this stage everything is left a bit vague. You are told to use a 1000 ohm resistor and given a rough idea of why you need one. Oddly you are then told that if you don't have a 1000 ohm resistor just use any value. You might be lucky, but a 100M ohm resistor isn't going to make the LED very bright. The casual approach is good and appropriate, but could do with a tiny bit of tightening up in the next edition.
Hour 5 starts the task of learning the C language. This is a fairly standard approach starting from variable types and working through conditionals and loops before moving on to data types. We have an hour on Strings and an hour on structs. Where did arrays go? They were introduced in the chapter on loops as they go together so well. Again this is logical and everything is explained well, but there is a tendency to be complete rather than easy. Instead of introducing the basics and doing the advanced things later, it is all introduced together and this isn't the best way to do it for the complete beginner.
Hour 10 introduces functions in a fairly straightforward way. It might have been better to get to this really important idea a bit sooner, but it's a matter of choice.
The final three hours deal with - pointers, storing data and using libraries. Pointers are always a difficult topic and to be honestRichard Blum doesn't really convinice that reader that they are worth the effort. The hour on storing data isn't quite what you might expect as the Arduino has three types of memory and there are ways of using each type that need to be explained.
The biggest problem with this introduction to C is that it misses out a lot of the lower level programming that you have to do with this sort of hardware. You generally need to get in with the bits and manipulate arrays of bytes and while the ideas are mentioned they are not explored in any detail. Being good at bit juggling is one of the marks of an Arduino, or any other microcontroller, programmer.
At hour 14 we start the look at the hardware applications. The book works through the basics - digital interfaces, analog, interrupts, serial, SPI, I2C, sensors, motors, using the Ethernet sheild, network programming, file handling with an SD card and prototyping projects. None of this is a difficult read and it will take you through most of what you need to know - but there are a few minor problems. The first is that sometimes you get a schematic diagram and sometimes not. The overall presentation is light on exact theory. For example, there is a good explanation of pull up and pull down resistor and why you need them, but no details on how you work out the value of the resistor you need. Not a mention of Ohm's law anywhere. There is also a tendency to take a lot for granted. For example, there's no explanation of resistor color codes, a potentiometer is introduced without explaining that it divides the voltage in the ratio of the resistances, and so on. Coverage of techniques is also patchy. For example, you are told how to control a DC motor using a single MOSFET and then how to control speed using pulse width modulation and direction using a bridge. However, there isn't even a schematic of the bridge circuit just a verbal description, which is fine if you know what a bridge is.
The same sort of problem is encountered in the explanation of the software. For example, when explaining how to open up a connection over a network there is no mention of the fact that you are working with a socket. Doing so would give any programmer who had done some network programming a chance to understand what the Arduino is doing at a deeper level.
The problem is that this is a comparatively short book and it can't cover everything, hence I am always going to have criticisms of what has been left out. Overall it is a good introduction to programming the Arduino in C and most of the time the casual approach to difficult problems will get you to see the idea, if not fully master it.