Errata

Making Things Talk

Errata for Making Things Talk

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
Printed
Page 22-23
N/A

This isn't really an error, but I think it would be good to add safety glasses to the list of required tools. Since the people who are using this book may be very inexperienced it is critical to encourage them to wear proper eye protection while soldering.

Note from the Author or Editor:
Done in second edition

Anonymous  Apr 03, 2011 
Printed
Page 26
7th paragraph

The paragraph states that mac OS X users need to run macosx_setup to enable serial communications. After installing the latest version of Processing (1.01), I was unable to find the file macosx_setup. After searching the processing.org website, I found that this is no longer required for OSX (see: http://processing.org/reference/libraries/serial/).

Note from the Author or Editor:
Correct. As of Processing 1.0, this is no longer necessary, we can delete that whole paragraph tip.

Error corrected. Will be fixed in next printing.

Anonymous  Jan 02, 2009 
Printed
Page 37

Arduino-009 and Wiring-0012 updated to Arduino-011 and Wiring-0016

Anonymous    Jun 01, 2008
Other Digital Version
37

Arduino-009 and Wiring-0012 updated to Arduino-011 and Wiring-0016

Anonymous    Jun 01, 2008
Printed
Page 38-39
Figure 1-10 and Figure 1-11

The schematic layout of the MINI in Figure 1-10 shows the OLD MINI but the connection example picture Figur 1-11 shows the NEW MINI with different pins for reset and ground (pins 3 and 4 from above on the left side).

So these Figures do not match wich makes the things a bit difficult.

Please check if I am right and change the Figure 1-10 in the next issues of the book.

Note from the Author or Editor:
Correct. The photo is correct, and shows the new mini. We should use this schematic in Figure 1-10: http://arduino.cc/en/uploads/Main/arduino_mini04_pinout.png

Martin KIm  Apr 22, 2009 
Printed
Page 42
Code listing, change

// after a quarter of a second, turn the LED on:

to:

// after a half of a second, turn the LED on:

Thanks to Shigeru Kobayashi for catching this.
-------------

**** CHAPTER TWO ****

Anonymous    Jun 01, 2008
Other Digital Version
42
Code listing, change

// after a quarter of a second, turn the LED on:

to:

// after a half of a second, turn the LED on:

Thanks to Shigeru Kobayashi for catching this.
-------------

**** CHAPTER TWO ****

Anonymous    Jun 01, 2008
Printed
Page 51
Synchronous Serial Communication diagram

On page 51, in the Synchronous Serial Communication diagram, the third pin on the master chip is labeled Master Out Slave Out. It should be labeled Master In Slave Out.
-------------

Anonymous    Jun 01, 2008
Other Digital Version
51
Synchronous Serial Communication diagram

On page 51, in the Synchronous Serial Communication diagram, the third pin on the master chip is labeled Master Out Slave Out. It should be labeled Master In Slave Out.
-------------

Anonymous    Jun 01, 2008
Printed
Page 60
Blue code block

It says "Try replacing the part of your code that prints the results with this:" but there is nothing in the blue block where the code should be.

Note from the Author or Editor:
This error was introduced in the second printing. The blue code block should read:

// print the results:
Serial.print(leftValue, BYTE);
Serial.print(44, BYTE);
Serial.print(rightValue, BYTE);
Serial.print(44, BYTE);
Serial.print(reset, BYTE);
Serial.print(44, BYTE);
Serial.print(serve, BYTE);
Serial.print(13, BYTE);
Serial.print(10, BYTE);

Error corrected. Will be fixed in next printing.

Nick  Jan 20, 2010 
Printed
Page 64
void draw section

I have the 6/08 version of the book.

Question about void animateBall() (pg.66) regarding the "if ball is moving left" section...why is the following code used?

// if the ball is in between the top and bottom
// of the left paddle:
if((leftPaddle - (paddleHeight/2) <= yPos) &&
(yPos <= leftPaddle + (paddleHeight /2))) {


My understanding:

When drawing the paddle/s in monski pong the rect command is used (pg. 64):

void draw() {
background(0);
// draw the left paddle:
rect(leftPaddleX, leftPaddle, paddleWidth, paddleHeight);


"In Processing, a rectangle is specified by the coordinate for the top left corner of the rectangle, as well as its width and height." (processing.org).


Shouldn't the code describing "if the ball is in between the top and bottom of the left paddle be":

if(leftPaddle <= yPos) &&
(yPos <= leftPaddle + paddleHeight))

As opposed to(pg. 66):

void animateBall() {
.....


if((leftPaddle - (paddleHeight/2) <= yPos) &&
(yPos <= leftPaddle + (paddleHeight /2))) {


The only way this makes sense to me is if you use the rectMode(CENTER) command for drawing the paddles.

Is there something I am missing? Please help.


Note from the Author or Editor:
Yes,that's right. The code should include rectMode(CENTER) in the setup().

Error corrected. Will be fixed in next printing.

Hugo Leon  Jan 18, 2009 
Printed
Page 69
2nd code block

The book says to add a loop in setup() in the Arduino program to send a carriage return every 300 ms. ( Serial.print('\r', BYTE); ). However, the Processing code is set up to do myPort.bufferUntil(linefeed). So a serial event never occurs since the Arduino is sending a carriage return instead of a linefeed. The program just sits there.

I replaced the Arduino line mentioned above with Serial.print(10, BYTE); and now it appears to be working.

(Really enjoying the book, btw!!)

Note from the Author or Editor:
change Serial.print('\r', BYTE); to Serial.print('\n', BYTE);

Melinda Weathers  Jan 18, 2009 
Printed
Page 69
Flow Control - Processing code

I worked through the Arduino and Processing example for Flow Control and was frustrated to find that handshaking between the Arduino and a Processing application would not work at all.

After doing a Web search, I found that the Processing code needs to have a minimum 11 seconds delay added to the startup routine if the Arduino board is the Diecimila, which all new boards sold now seem to be.

More info can be found at this forum:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1187635332;start=all

Once I put a delay(11000) line in the Processing startup code, then the handshaking system worked fine. (It is a stupid way to fix the bug in the Diecimila.)

Anyway, perhaps you can put that info somewhere obvious so other folks won't experience the pain I went through with this issue.

Note from the Author or Editor:
Not quite the right answer, but there is a code change to be made here. Brian, mail me and I will send you a new page for page 69. It involves changes on both the Arduino and Processing sides.

Anonymous   
Printed
Page 69
Flow Control - Processing code; added the following text and code

Add a loop in setup() that sends a
byte (carriage return) until it gets one
back from Processing. To make this
work, you’ll need to type characters
back to the microcontroller in the serial
monitor, or send them from Processing.
For every character you type, the
microcontroller sends you three sensor
readings.

while (Serial.available() <= 0) {
Serial.print(' ', BYTE); // send a return character to say
delay(300);
}

Anonymous    Jun 01, 2008
Printed
Page 69
Flow Control - Processing code; removed the following text and code

At the beginning of the draw() method, add this:

// If you haven't gotten any data from the microcontroller yet, send out
// the serial port to ask for data. What value you send doesnt matter,
// since the microcontroller code above isn't doing anything with the
// byte you send. So send a carriage return for debugging purposes:
if (madeContact == false) {
myPort.write(' ');
}

Anonymous    Jun 01, 2008
Printed
Page 69
Flow Control - Processing code; Changed the lines set in blue to

// if serialEvent occurs at all, contact with the microcontroller
// has been made:
if (madeContact == false) {
port.clear(); // clear the serial port buffer
madeContact = true;
port.write(' ');
}
-------------

Anonymous    Jun 01, 2008
Other Digital Version
69
Flow Control - Processing code; added the following text and code

Add a loop in setup() that sends a
byte (carriage return) until it gets one
back from Processing. To make this
work, you’ll need to type characters
back to the microcontroller in the serial
monitor, or send them from Processing.
For every character you type, the
microcontroller sends you three sensor
readings.

while (Serial.available() <= 0) {
Serial.print(' ', BYTE); // send a return character to say
delay(300);
}

Anonymous    Jun 01, 2008
Other Digital Version
69
Flow Control - Processing code; removed the following text and code

At the beginning of the draw() method, add this:

// If you haven't gotten any data from the microcontroller yet, send out
// the serial port to ask for data. What value you send doesnt matter,
// since the microcontroller code above isn't doing anything with the
// byte you send. So send a carriage return for debugging purposes:
if (madeContact == false) {
myPort.write(' ');
}

Anonymous    Jun 01, 2008
Other Digital Version
69
Flow Control - Processing code; Changed the lines set in blue to

// if serialEvent occurs at all, contact with the microcontroller
// has been made:
if (madeContact == false) {
port.clear(); // clear the serial port buffer
madeContact = true;
port.write(' ');
}
-------------

Anonymous    Jun 01, 2008
Printed
Page 69
Text and facing code


p69, second >> box (text and facing code):

1) Delete the paragraph beginning with "Add a loop..." and ending with "three sensor readings."

2) Delete the facing code ("while (Serial.available"...)

3) Move the paragraph "Next, add some..." to the box above so it appears after the paragraph ending "...like this:"

4) This >> box should now be empty. Delete it.

p69, first >> box (text):

1) Change "To make this happen, first" to "Next,"

p69, add a new >> box at the top of the page (text and facing code):

1) Text: "To make this happen, first add the following lines to the startup() of the Arduino program. This makes the Arduino send out a serial message until it gets a response from Processing:"

2) Code:
while (Serial.available() <= 0) {
Serial.println("hello"); // send a starting message
delay(300);
}


p69, last >> box (code)

1) Delete only the following lines:
// if serialEvent occurs at all, contact with the microcontroller
// has been made:
if (madeContact == false) {
myPort.clear(); // clear the serial port buffer
madeContact = true;
myPort.write('\r');
}

2) Add the following line after the third line in this listing:
myString = trim(myString);

3) After the line reading "if (myString != null) {", replace "myString = trim(myString);" with the following:
// if you haven't heard from the microcontroller yet, listen:
if ( madeContact == false) {
if (myString.equals("hello")) {
myPort.clear(); // clear the serial port buffer
madeContact = true; // you've made contact with the microcontroller
myPort.write('\r'); // ask for more
}
}

4) If the correct lines have been deleted/added, these will be the first 15 lines in the program:

void serialEvent(Serial myPort) {
// read the serial buffer:
String myString = myPort.readStringUntil(linefeed);
myString = trim(myString);

// if you got any bytes other than the linefeed:
if (myString != null) {
// if you haven't heard from the microcontroller yet, listen:
if ( madeContact == false) {
if (myString.equals("hello")) {
myPort.clear(); // clear the serial port buffer
madeContact = true; // you've made contact with the microcontroller
myPort.write('\r'); // ask for more
}
}

Anonymous  Nov 23, 2009  Dec 01, 2009
Printed
Page 71
Added a side note

SparkFun changed the radio on the BlueSMiRF
after the first printing of this book. The new SMiRFs
use the Roving Networks radios, instead of the BlueRadios
ones. The new BlueSMiRF Silver (SparkFun part number
WRL-08332) is cheaper and uses the Philips BGB203
radio, which has more features than the old units. See www.
makingthingstalk.com for code updates.
-------------

Anonymous    Jun 01, 2008
Other Digital Version
71
Added a side note

SparkFun changed the radio on the BlueSMiRF
after the first printing of this book. The new SMiRFs
use the Roving Networks radios, instead of the BlueRadios
ones. The new BlueSMiRF Silver (SparkFun part number
WRL-08332) is cheaper and uses the Philips BGB203
radio, which has more features than the old units. See www.
makingthingstalk.com for code updates.
-------------

Anonymous    Jun 01, 2008
Printed
Page 72
Added a note

With the BlueSMiRF Silver radios from
Spark Fun, the wiring is the same as it was
with the original BlueSMiRF. Configuration is
virtually the same as well. The only changes
are as follows:

* The device name for the BlueSMiRF v.2
radio is SparkFun-BT.

* These radios don’t use a passcode, so
when you search for the device, you
want to choose not to use a passkey. For
Mac OS X users, this means that after
you’ve selected the device type as “Any
Device”, you’ll get the device discovery
screen. Click the Passkey Options
button and select “Do not use a passkey
with this device”. Then select the
SparkFun-BT device. For Windows users,
the process should be the same.

* Once you’ve paired with the BlueSMiRF
v.2, the instructions in the book will
work just as they did with the original
BlueSMiRF. The BlueSMiRF v.2 will not
send out a CONNECT message when
your computer connects to it, however.

-------------

**** CHAPTER THREE ****

Anonymous    Jun 01, 2008
Other Digital Version
72
Added a note

With the BlueSMiRF Silver radios from
Spark Fun, the wiring is the same as it was
with the original BlueSMiRF. Configuration is
virtually the same as well. The only changes
are as follows:

* The device name for the BlueSMiRF v.2
radio is SparkFun-BT.

* These radios don’t use a passcode, so
when you search for the device, you
want to choose not to use a passkey. For
Mac OS X users, this means that after
you’ve selected the device type as “Any
Device”, you’ll get the device discovery
screen. Click the Passkey Options
button and select “Do not use a passkey
with this device”. Then select the
SparkFun-BT device. For Windows users,
the process should be the same.

* Once you’ve paired with the BlueSMiRF
v.2, the instructions in the book will
work just as they did with the original
BlueSMiRF. The BlueSMiRF v.2 will not
send out a CONNECT message when
your computer connects to it, however.

-------------

**** CHAPTER THREE ****

Anonymous    Jun 01, 2008
Printed
Page 74
Adjusting the Monski program paragraph and in code listing

Ok, so there has been some talk in the errata on the updated RovingNetworks based BlueSmirf module replacing the older version of the module that the book was written for. I found that the default baud rate of the new module is actually 115.2K and not 9600, so the code that references 9600 would then need to change. Also, the default passcode for my module was "1234".

I found the PINCODE (ie, passcode) at http://www.sparkfun.com/datasheets/RF/RN_BlueportII-ref-guide.pdf

The reference to the new baud rate at http://www.lynxmotion.com/images/html/build125.htm (and also talks about different passcodes as well).

I'm not running the Monski program at the moment, but just got a connection going on Windows Vista using Putty at 115.2kbps and after changing my Arduino code to set serial output rate to 115.2 also, so I feel this has been sufficiently confirmed for me.

Note from the Author or Editor:
I need to re-write this section because of Sparkfun's change. See http://www.makingthingstalk.com/chapter2/76/ for a beginning, and Brian, let me know if you want a total re-write or not.

Anonymous  Jul 17, 2008 
Printed
Page 83
Bottom section, 5th paragraph

In the paragraph that defines a switch, the last sentence reads, "Objects attached to a hub don't get to see messages that aren't addressed to them." It should read, "Objects attached to a SWITCH don't get to see...."

Hubs blindly pass on all data, whereas switches do not.

Note from the Author or Editor:
Correct, make this change.

Error corrected. Will be fixed in next printing.

Anonymous  Nov 07, 2008 
Printed
Page 87
Typo in blue addition to age_checker.php

reads:
Age: <input type="age" name="age" />
probably should read:
Age: <input type="text" name="age" />

Note from the Author or Editor:
Yes, this change is correct. Please make it exactly as described at the next available opportunity.

Anonymous  May 31, 2013 
Printed
Page 94
The Materials section

Changed: "Between 2 and 4 10-kilohm resistors" to "One 1-kilohm resistor"
Changed: "84N2322" to "58K5001"
-------------

Anonymous    Jun 01, 2008
Other Digital Version
94
The Materials section

Changed: "Between 2 and 4 10-kilohm resistors" to "One 1-kilohm resistor"
Changed: "84N2322" to "58K5001"
-------------

Anonymous    Jun 01, 2008
Printed
Page 100

Added the following note:

You may need a
higher value depending on the
resistance range of your force
sensing resistors and the weight
of your cat. If a 1K resistor
doesn’t give you good values,
try a 4.7K or a 10K resistor.
-------------

Anonymous    Jun 01, 2008
Other Digital Version
100

Added the following note:

You may need a
higher value depending on the
resistance range of your force
sensing resistors and the weight
of your cat. If a 1K resistor
doesn’t give you good values,
try a 4.7K or a 10K resistor.
-------------

Anonymous    Jun 01, 2008
Printed
Page 104
Changed the following line

if (prevSensorValue >= threshold) {

To:

if (prevSensorValue > threshold) {

Thanks to Shigeru Kobayashi for catching this.
-------------

**** CHAPTER FOUR ****

Anonymous    Jun 01, 2008
Other Digital Version
104
Changed the following line

if (prevSensorValue >= threshold) {

To:

if (prevSensorValue > threshold) {

Thanks to Shigeru Kobayashi for catching this.
-------------

**** CHAPTER FOUR ****

Anonymous    Jun 01, 2008
Printed
Page 117
In the Figure 4-1 caption, changed

WiMicro (left)
To:
WiMicro (right)
-------------

Anonymous    Jun 01, 2008
Other Digital Version
117
In the Figure 4-1 caption, changed

WiMicro (left)
To:
WiMicro (right)
-------------

Anonymous    Jun 01, 2008
Printed
Page 125
Code listing in note at bottom of page

Please change:

HOST: www.oreillynet.com^M^J^M^^J

To:

HOST: www.oreillynet.com^M^J^M^J

Note from the Author or Editor:
Correct. Make this change.

Error corrected. Will be fixed in next printing.

Anonymous  Jun 23, 2008 
Printed
Page 125
in the caption above the first photo on the page, changed

Micro-to-USV-adaptor
to:
Micro-to-USB-adaptor
-------------

Anonymous    Jun 01, 2008
Other Digital Version
125
in the caption above the first photo on the page, changed

Micro-to-USV-adaptor
to:
Micro-to-USB-adaptor
-------------

Anonymous    Jun 01, 2008
Printed
Page 132
Figure 4-8

- On the arrow from the requesting state to the reading state, changed
'C' to '<'.
- In the diamond shape between requesting state and reading state,
changed 'look for data' to 'lookForData()'.
- On the arrow from readData() to interpretResults(), changed 'v' to '>'.
- On the arrow from readData() to reading state, changed '<' to '>'.
- Removed rectangle containing stringToNumber()
-------------

Anonymous    Jun 01, 2008
Other Digital Version
132
Figure 4-8

- On the arrow from the requesting state to the reading state, changed
'C' to '<'.
- In the diamond shape between requesting state and reading state,
changed 'look for data' to 'lookForData()'.
- On the arrow from readData() to interpretResults(), changed 'v' to '>'.
- On the arrow from readData() to reading state, changed '<' to '>'.
- Removed rectangle containing stringToNumber()
-------------

Anonymous    Jun 01, 2008
Printed
Page 136
at the fifth line in the caption at the bottom, changed

one minute
to:
two minutes
-------------

Anonymous    Jun 01, 2008
Other Digital Version
136
at the fifth line in the caption at the bottom, changed

one minute
to:
two minutes
-------------

Anonymous    Jun 01, 2008
Printed
Page 137
Last paragraph, 2nd to last line, changed

one minute
to:
two minutes
-------------

Anonymous    Jun 01, 2008
Other Digital Version
137
Last paragraph, 2nd to last line, changed

one minute
to:
two minutes
-------------

Anonymous    Jun 01, 2008
Printed
Page 141
at the first line of the comment in setup() method, removed 'led pins'.

-------------

Anonymous    Jun 01, 2008
Other Digital Version
141
at the first line of the comment in setup() method, removed 'led pins'.

-------------

Anonymous    Jun 01, 2008
Printed
Page 145
in the comment at the third line of the code, changed 'message'

to 'client'.

**** CHAPTER FIVE ****

Anonymous    Jun 01, 2008
Other Digital Version
145
in the comment at the third line of the code, changed 'message'

to 'client'.

**** CHAPTER FIVE ****

Anonymous    Jun 01, 2008
Printed
Page 153
in the schematics in Figure 5-2, changed 'To Micro Reset pin'

to 'To XPort Reset pin'.
-------------

Anonymous    Jun 01, 2008
Other Digital Version
153
in the schematics in Figure 5-2, changed 'To Micro Reset pin'

to 'To XPort Reset pin'.
-------------

Anonymous    Jun 01, 2008
Printed
Page 154
in the upper-left picture, changed 'Switch imput' to 'Switch input'.

-------------

Anonymous    Jun 01, 2008
Other Digital Version
154
in the upper-left picture, changed 'Switch imput' to 'Switch input'.

-------------

Anonymous    Jun 01, 2008
Printed
Page 159
change

// if you got anything other than a C, try again:
deviceConnect()

to

// if you got anything other than a C,
// disconnect and let the user re-connect:
status = disconnected;

-------------

Anonymous    Jun 01, 2008
Other Digital Version
159
change

// if you got anything other than a C, try again:
deviceConnect()

to

// if you got anything other than a C,
// disconnect and let the user re-connect:
status = disconnected;

-------------

Anonymous    Jun 01, 2008
Printed
Page 162
in the schematics in Figure 5-7, changed 'To Micro Reset pin' to 'To XPort Reset pin'.

-------------

Anonymous    Jun 01, 2008
Other Digital Version
162
in the schematics in Figure 5-7, changed 'To Micro Reset pin' to 'To XPort Reset pin'.

-------------

Anonymous    Jun 01, 2008
Printed
Page 165
Figure 5-8. Changed method names to camelback notation and added final parentheses to make formatting consistent with other flowcharts

setup -> setup()
pong setup -> pongSetup()
draw -> draw()
Pongdraw -> pongDraw()
moveBall -> moveBall()
showScore -> showScore()
listenToClients -> listenToClients()
serverEvent -> serverEvent()
make new player -> makeNewPlayer()
showPaddle -> showPaddle()
movePaddle -> movePaddle()
-------------

Anonymous    Jun 01, 2008
Other Digital Version
165
Figure 5-8. Changed method names to camelback notation and added final parentheses to make formatting consistent with other flowcharts

setup -> setup()
pong setup -> pongSetup()
draw -> draw()
Pongdraw -> pongDraw()
moveBall -> moveBall()
showScore -> showScore()
listenToClients -> listenToClients()
serverEvent -> serverEvent()
make new player -> makeNewPlayer()
showPaddle -> showPaddle()
movePaddle -> movePaddle()
-------------

Anonymous    Jun 01, 2008
Printed
Page 166
halfway down the page

The pong server has an error. The delayCounter variable should be a long, not a float, and it should be initialized in the setup() not before. For an update, see http://www.makingthingstalk.com/chapter5/35/

This error is also on pages 167, where the variable should be initialized, and page 389, where the code is copied inthe index.

Anonymous   
Printed
Page 166-167

The pong server code had an error. The delayCounter variable should be a long, not a float, and it should be initialized in the setup() not before. For an update, see http://www.makingthingstalk.com/chapter5/35/
-------------

Anonymous    Jun 01, 2008
Other Digital Version
166-167

The pong server code had an error. The delayCounter variable should be a long, not a float, and it should be initialized in the setup() not before. For an update, see http://www.makingthingstalk.com/chapter5/35/
-------------

Anonymous    Jun 01, 2008
Printed
Page 168
Changed

It checks the number of players so far
created by counting the number of Players
in the ArrayList called playerList. If there’s
an even number of Players, the new
Player is added to the top team, and is
positioned below the last top player. If
there’s an odd number of Players, the
new one goes on the bottom team.

To:

A new Player is added to the bottom team if the last
player is on the top, and vice versa.
-------------

Anonymous    Jun 01, 2008
Other Digital Version
168
Changed

It checks the number of players so far
created by counting the number of Players
in the ArrayList called playerList. If there’s
an even number of Players, the new
Player is added to the top team, and is
positioned below the last top player. If
there’s an odd number of Players, the
new one goes on the bottom team.

To:

A new Player is added to the bottom team if the last
player is on the top, and vice versa.
-------------

Anonymous    Jun 01, 2008
Printed
Page 170
at the third line in the caption at the bottom, changed 'ach' to 'each'.

-------------

Anonymous    Jun 01, 2008
Other Digital Version
170
at the third line in the caption at the bottom, changed 'ach' to 'each'.

-------------

Anonymous    Jun 01, 2008
Printed
Page 172
at the first line in the top code block, changed 'horizontal' to 'vertical'.

-------------

Anonymous    Jun 01, 2008
Other Digital Version
172
at the first line in the top code block, changed 'horizontal' to 'vertical'.

-------------

Anonymous    Jun 01, 2008
Printed
Page 174
in the caption at the bottom, 'At right' and 'At left' were swapped.

-------------

**** CHAPTER SIX ****

Anonymous    Jun 01, 2008
Other Digital Version
174
in the caption at the bottom, 'At right' and 'At left' were swapped.

-------------

**** CHAPTER SIX ****

Anonymous    Jun 01, 2008
Printed
Page 203
1st paragraph

Please change:

tracking the change in the switch

To:

tracking the change in the sensor

Note from the Author or Editor:
Correct. Make the change.

Error corrected. Will be fixed in next printing.

Anonymous  Jun 23, 2008 
Printed
Page 207
Added a side note

SparkFun changed the BlueSMiRF’s radio after the
first printing of this book. The new SMiRFs use the
Roving Networks radios, instead of the BlueRadios
ones. The new BlueSMiRF Silver (part WRL-08332) is cheaper
and uses the Philips BGB203 radio, which has more features
than the old units. The code in this project is for the older
radios. See www.makingthingstalk.com for code updates.
-------------

**** CHAPTER EIGHT ****

Anonymous    Jun 01, 2008
Other Digital Version
207
Added a side note

SparkFun changed the BlueSMiRF’s radio after the
first printing of this book. The new SMiRFs use the
Roving Networks radios, instead of the BlueRadios
ones. The new BlueSMiRF Silver (part WRL-08332) is cheaper
and uses the Philips BGB203 radio, which has more features
than the old units. The code in this project is for the older
radios. See www.makingthingstalk.com for code updates.
-------------

**** CHAPTER EIGHT ****

Anonymous    Jun 01, 2008
Printed
Page 223
Paragraph 4

Please change:

hypermedia.loeil
org/processing/

to:

http://ubaa.net/shared/processing/udp/

Note from the Author or Editor:
Correct. The website has moved. Make this change.

Error corrected. Will be fixed in next printing.

Anonymous  Jul 12, 2008 
Printed
Page 227
Figure 7-2 schematic

On page 227, there is an error in the schematic. IT shows the RX of the FTDI serial-to-USB adaptor connected to TXen of the XBee. IT should be connected to the TX of the XBee instead.

Note from the Author or Editor:
Correct. We should connect RX of the FTDI to TX of the Xbee, and TX of the FTDI to RX of the XBee. Both lines should move up one pin on the XBee, and it will be correct.

Tom Igoe
Tom Igoe
 
Nov 17, 2008 
Printed
Page 234
Figure 7-7

The symbol of TIP120 is incorrect; E (emitter) and C (collector) should be swapped. The photographs of the breadboard layout are correct, however.

Note from the Author or Editor:
Correct. Arrowhead should be on the lower line (the emitter) not the upper line (the collector)

Anonymous  Jul 12, 2008 
Printed
Page 234
Figure 7-7

The symbol of TIP120 is incorrect; E (emitter) and C (collector) should be swapped. The photographs of the breadboard layout are correct, however.

Anonymous   
Printed
Page 238
Right column, line 20

Remove "(you set it to 5 using the IT command shown earlier)."

Note from the Author or Editor:

Error corrected. Will be fixed in next printing.

Anonymous   
Printed
Page 250
Left column, paragraph 1, line 2

Please change "two XBee radios" to "three XBee radios"

Note from the Author or Editor:
Correct. Make the change.

Error corrected. Will be fixed in next printing.

Anonymous  Jul 22, 2008 
Printed
Page 256
2nd paragraph from bottom ("Call this from...")

Change "replacing the println() statement" to "replacing the print() statement".

Note from the Author or Editor:
Correct. Make this change.

Error corrected. Will be fixed for next printing.

Anonymous  Jul 22, 2008 
Printed
Page 265
paragraph 2

Please delete the word geosynchronous.

Note from the Author or Editor:
I couldn't find a reliable source that says they're not, but I found a number of cranky websites that say they're not. So for safety's sake, delete it.

Error corrected. Will be fixed in next printing.

Anonymous  Jul 12, 2008 
Printed
Page 265
Paragraph 2

From Makezine.com user Andrew (Note: this may apply to cell signals as well):

Correction to GPS mention
There's a bit of an error in the way the first paragraph explains how GPS works.

GPS doesn't determine position by measuring signal strength and using rules about signal strength over distance. GPS calculates the distances to the satellites by using the travel time of the signal from satellite to receiver and the speed of light, and then triangulates in the _four_ dimensions of space-time.

This requires insanely accurate clocks, compensations for inaccuracies they can't control, corrections for relativistic effects from the speed the satellites are going (slows their clocks, an effect of special relativity) and their higher position in the gravity well of earth (speeds up their clocks, an effect of general relativity), and average ionospheric delay of the signal.

Still the same base principle to determine position - get distances and triangulate - but it uses a different method to get the distances than is described.

Note from the Author or Editor:
Change paragraph 2 to read:

"For example, a GPS receiver determines its position on
the surface of the planet by measuring the travel time of the
received radio signals from several satellites.
Similarly, mobile phone location systems measure
the signal strength of the phone at several cell towers.
Sonar and infrared ranging sensors work by sending out
an acoustic signal (sonar) or an infrared signal (IR rangers)
and measuring the strength of that signal when it?s
reflected off the target."

Error corrected. Will be fixed in next printing.

Brian Jepson
Brian Jepson
 
Jan 23, 2009 
Printed
Page 266
Example code (Sharp GP2D12 IR Ranger Reader)

In some cases, you may get a value that is three or below. Three will cause a divide by 0 error, and values below three will give a negative result. So you may want to change these lines:

int range = (6787 / (sensorValue - 3)) - 4;

Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop

to:

if (sensorValue> 3) {

int range = (6787 / (sensorValue - 3)) - 4;

Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop
}

Note that this example also appears on page 403.

Note from the Author or Editor:
Correct. Make this change in both locations.

Error corrected. Will be fixed in next printing.

Anonymous   
Printed
Page 266
in the Materials list, changed "1 10μF capacitor" to "1 100μF capacitor"

-------------

Anonymous    Jun 01, 2008
Printed
Page 266
"Example code (Sharp GP2D12 IR Ranger Reader); Changed

int range = (6787 / (sensorValue - 3)) - 4;
Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop

to:

if (sensorValue> 3) {
int range = (6787 / (sensorValue - 3)) - 4;
Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop
}
-------------

Anonymous    Jun 01, 2008
Other Digital Version
266
in the Materials list, changed "1 10μF capacitor" to "1 100μF capacitor"

-------------

Anonymous    Jun 01, 2008
Other Digital Version
266
"Example code (Sharp GP2D12 IR Ranger Reader); Changed

int range = (6787 / (sensorValue - 3)) - 4;
Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop

to:

if (sensorValue> 3) {
int range = (6787 / (sensorValue - 3)) - 4;
Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop
}
-------------

Anonymous    Jun 01, 2008
Printed
Page 267
Figure 8-2

The figure 8-2 specifies a 100 uF capacitor but the parts list specifies a 10 uF capacitor. Might not create a major problem aside from confusion (10 uF is probably right)

Note from the Author or Editor:
Correct. Change both to 10uF

Anonymous   
Printed
Page 273
Removed "(not used here) from comment for byte 7.

-------------

**** APPENDIX C ****

Anonymous    Jun 01, 2008
Other Digital Version
273
Removed "(not used here) from comment for byte 7.

-------------

**** APPENDIX C ****

Anonymous    Jun 01, 2008
Printed
Page 275
Last paragraph

Please change:

relationship between signal strength and distance would be a logarithmic curve.

to:

relationship between signal strength and distance would be an inverse-square curve.

Note from the Author or Editor:
Correct, make the change.

Error corrected. Will be fixed in next printing.

Anonymous  Jul 12, 2008 
Printed
Page 282
3rd paragraph

The GPS parser as coded returns a seriously erroneous position.

This comes from a fundamental mistake with the coordinate system. The code takes the raw Latitude and Longtitude values then divides them by 100.

Instead, the code should be have the degrees portion removed then convert the minutes (1/60 of a degree) converted to decimal then added once again to the degrees portion.

This nmea parser shows the technique quite nicely.
// GPS code for Processing
// Glen Murphy, glen@glenmurphy.com

Unfortunately the class must be instantiated in another program which that author does not provide.

This project uses the p5gps class but..
http://interactive.usc.edu/members/todd/archives/001132.html

unfortunately the processing code uses an outdated version of the Serial Library.

Bottom line, the coordinates returned by the program in your book are way off (check for yourself in Google Maps).

May post a fix if time allows.

Note from the Author or Editor:
Yep, that's an error alright, thanks for the report. I'm correcting it in the 2nd edition now.

Derrick So'Brien  Jun 24, 2010 
Printed
Page 292
First code listing

Line 10, please change "draw the rect:" to "draw the circle:"

Note from the Author or Editor:
Correct, please make this change:

Error corrected. Will be fixed in next printing.

Anonymous  Jul 22, 2008 
PDF
Page 298
In code example

PDF book line: myCamera = new Capture(this, myCam, width, height, 30);

should be in constructor format

Capture(parent, width, height)
Capture(parent, width, height, fps)
Capture(parent, width, height, name, )
Capture(parent, width, height, name, fps)

correct line: myCamera = new Capture(this, width, height, myCam ,30);

Note from the Author or Editor:
Correct. Change

myCamera = new Capture(this, myCam, width, height, 30);

to

new Capture(this, width, height, myCam ,30);


I submitted this correction before, but apparently it did not go through.

Error corrected. Will be fixed in next printing.

Anonymous  Jun 04, 2008 
Printed
Page 309
n/a

The figure numbering in this chapter skipped Figure 9-5.

Note from the Author or Editor:
Sure enough, we did. We should re-number images and references from 9-6 onward, making 9-6 into 9-5, and so forth.

Error corrected. Will be fixed in next printing.

Anonymous  Jul 22, 2008 
Printed
Page 317
Paragraph 1

Please change:
Unzip it and place the resulting directory in the lib/targets/
libraries/ subdirectory of your Arduino application directory.

to:

Unzip it and place the resulting directory in the hardware/libraries/
subdirectory of your Arduino application directory.

Note from the Author or Editor:
Correct. The libraries folder location has moved in Arduino. Should be hardware/libraries/.

NOTE: Check this last minute before the next reprint. Location may change with new versions of Arduino.

Error corrected. Will be fixed in next printing.

Anonymous  Jul 12, 2008 
Printed
Page 326
Paragraph to the left of the code example

Please change:

Call it env.php:

To:

Call it 09_env.php:

Note from the Author or Editor:
Shouldn't be called that. We don't use the numbers for names elsewhere in the text. But we should edit the output on page 327. Anywhere that reads "09_env.php", change to "env.php".

Anonymous  Jul 12, 2008 
Printed
Page 333
Materials list

Please change:

All three of the retailers listed here sell tags
that match their readers in a variety of physical
packages, so choose the ones you like the best.

To:

Trossen Robotics, SparkFun, and Parallax sell tags
that match their readers in a variety of physical
packages, so choose the ones you like the best.

Note from the Author or Editor:
Change is good, make the change.

Error corrected. Will be fixed in next printing.

Anonymous  Jul 12, 2008 
Printed
Page 336
In figure 9-15

Change "LD1117-V33" to "LD1117-33V".

Note from the Author or Editor:
Correct. Make this change.

Anonymous  Jul 22, 2008 
Printed
Page 340
Last paragraph

Please delete this paragraph: When you start to develop projects that use location systems, you usually find that less is more. It?s not unusual to start a project thinking you need to know position, distance, and orientation, then pare away systems as you develop the project. The physical limitations of the things you build and the spaces you build them in will solve many problems for you.

Note from the Author or Editor:

Error corrected. Will be fixed in next printing.

Anonymous   
Printed
Page 344
Code listing, first line under "void loop()"

Change the code from:

for (note = 0; note < 127; note ++) {

to:

for (note =30; note <= 90, note++) {

Note from the Author or Editor:
Correct, please make this change

Error corrected. Will be fixed in next printing.

Anonymous  Aug 25, 2008 
Printed
Page 344
Code listing, comment below for loop

Please change 0x45 to 0x70

Note from the Author or Editor:
Correct, please make this change

Error corrected. Will be fixed in next printing.

Anonymous  Aug 25, 2008 
Printed
Page 345
Figure A-1

Remove the connection between pin 5 of the MIDI jack and the RX pin of the Arduino. Replace it with a connection from pin 5 of the MIDI jack to the Arduino TX pin.

Note from the Author or Editor:
Correct, we should make this change. But this change has been reported before.

Anonymous  Oct 02, 2008 
Printed
Page 346
Code listing preceding the noteOn function

Please change "less than 127" to "less than 128"

Note from the Author or Editor:
Correct, please make this change

Error corrected. Will be fixed in next printing.

Anonymous  Aug 25, 2008 
Printed
Page 364
Column 3, listing for Newark In One Electronics

Please delete the line reading "email: somewhere@something.com"

Note from the Author or Editor:
Please delete the line reading "Email: somewhere@something.com"

Error corrected. Will be fixed in next printing.

Anonymous  Aug 25, 2008 
Printed
Page 375
Code


On page 375, change the following code:

From:

void serialEvent(Serial myPort) {
// read the serial buffer:
String myString = myPort.readStringUntil(linefeed);
myString = trim(myString);

// if you got any bytes other than the linefeed:
if (myString != null) {
// if you haven't heard from the microcontroller yet, listen:
if ( madeContact == false) {
if (myString.equals("hello")) {
myPort.clear(); // clear the serial port buffer
madeContact = true; // you've made contact with the microcontroller
myPort.write('\r'); // ask for more
}
}

to:

void serialEvent(Serial myPort) {
// read the serial buffer:
String myString = myPort.readStringUntil(linefeed);
myString = trim(myString);

// if you got any bytes other than the linefeed:
if (myString != null) {
// if you haven't heard from the microcontroller yet, listen:
if ( madeContact == false) {
if (myString.equals("hello")) {
myPort.clear(); // clear the serial port buffer
madeContact = true; // you've made contact with the microcontroller
myPort.write('\r'); // ask for more
}
}

Anonymous  Nov 23, 2009  Dec 01, 2009
Printed
Page 378
The last block in the serialEvent() method in "Cat graphing program".

Please change:
if (myString != null) {
sensorValue = int(trim(myString));
drawGraph(); // call this method instead of println()
}

to:

if (myString != null) {
// get the sensor value. You may need to change the
// formula to scale for your own sensors:
sensorValue = int(trim(myString)) / 2 - 100;
// println(sensorValue);
drawGraph(); // call this method instead of println()
}

Note from the Author or Editor:
Change to

if (myString != null) {
// get the sensor value. You may need to change the
// formula to scale for your own sensors:
sensorValue = int(trim(myString));
// println(sensorValue);
drawGraph(); // call this method instead of println()
}

Error corrected. Will be fixed in next printing.

Anonymous  Oct 26, 2008 
Printed
Page 382
First paragraph, second column

The code listing here was not complete for the AIRNow web page scraper. For the full listing, see http://www.makingthingstalk.com/look-ma-no-computer/42/
-------------

Anonymous    Jun 01, 2008
Other Digital Version
382
First paragraph, second column

The code listing here was not complete for the AIRNow web page scraper. For the full listing, see http://www.makingthingstalk.com/look-ma-no-computer/42/
-------------

Anonymous    Jun 01, 2008
Printed
Page 384
First paragraph, second column

The code listing here is not complete for the AIRNow web page scraper. For the full listing, see http://www.makingthingstalk.com/look-ma-no-computer/42/

Anonymous   
Printed
Page 389
change

// if you got anything other than a C, try again:
deviceConnect()
to
// if you got anything other than a C,
// disconnect and let the user re-connect:
status = disconnected;
-------------

Anonymous    Jun 01, 2008
Printed
Page 389

The pong server code had an error. The delayCounter variable should be a long, not a float, and it should be initialized in the setup() not before. For an update, see http://www.makingthingstalk.com/chapter5/35/
-------------

Anonymous    Jun 01, 2008
Other Digital Version
389
change

// if you got anything other than a C, try again:
deviceConnect()
to
// if you got anything other than a C,
// disconnect and let the user re-connect:
status = disconnected;
-------------

Anonymous    Jun 01, 2008
Other Digital Version
389

The pong server code had an error. The delayCounter variable should be a long, not a float, and it should be initialized in the setup() not before. For an update, see http://www.makingthingstalk.com/chapter5/35/
-------------

Anonymous    Jun 01, 2008
Printed
Page 403
"Example code (Sharp GP2D12 IR Ranger Reader); Changed

int range = (6787 / (sensorValue - 3)) - 4;
Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop

to:

if (sensorValue> 3) {
int range = (6787 / (sensorValue - 3)) - 4;
Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop
}
-------------

Anonymous    Jun 01, 2008
Other Digital Version
403
"Example code (Sharp GP2D12 IR Ranger Reader); Changed

int range = (6787 / (sensorValue - 3)) - 4;
Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop

to:

if (sensorValue> 3) {
int range = (6787 / (sensorValue - 3)) - 4;
Serial.println(range, DEC); // print the sensor value
delay(10); // wait 10 milliseconds
// before the next loop
}
-------------

Anonymous    Jun 01, 2008
Printed
Page 404
Removed "(not used here) from comment for byte 7.

-------------

Anonymous    Jun 01, 2008
Other Digital Version
404
Removed "(not used here) from comment for byte 7.

-------------

Anonymous    Jun 01, 2008
Printed
Page 408
second column

The program listing for "Color Recognition with a Webcam" does not perform that function. It's a duplication of the previous program in the appendix, "Accelerometer Tilt." The correct code for color recognition can be found on page 298.

Anonymous   
Printed
Page 408
second column

The program listing for "Color Recognition with a Webcam" does not perform that function. It's a duplication of the previous program in the appendix, "Accelerometer Tilt." The correct code for color recognition could be found on page 298.
-------------

Anonymous    Jun 01, 2008
Other Digital Version
408
second column

The program listing for "Color Recognition with a Webcam" does not perform that function. It's a duplication of the previous program in the appendix, "Accelerometer Tilt." The correct code for color recognition could be found on page 298.
-------------

Anonymous    Jun 01, 2008