This page lists confirmed errors fixed in the 6/08 reprint. Making Things Talk, 1e by Tom Igoe The catalog page for this title is http://www.oreilly.com/catalog/9780596510510/ This page was last updated June 16, 2008. If you have technical questions or error reports, you can send them to booktech@oreilly.com. Please specify the printing date of your copy or the digital version accessed. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem Confirmed errors fixed in 6/08: **** TOC **** On the second to the last page of the table of contents, Chapter 7 is labeled "The Tools". It should be labeled "Sessionless Networks". ------------- **** CHAPTER ONE **** (37) Arduino-009 and Wiring-0012 updated to Arduino-011 and Wiring-0016 {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 **** {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. ------------- [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('\r', BYTE); // send a return character to say delay(300); } [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('\r'); } [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('\r'); } ------------- [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. ------------- [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 **** {94} The Materials section: Changed: "Between 2 and 4 10-kilohm resistors" to "One 1-kilohm resistor" Changed: "84N2322" to "58K5001" ------------- {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. ------------- {104} Changed the following line: if (prevSensorValue >= threshold) { To: if (prevSensorValue > threshold) { Thanks to Shigeru Kobayashi for catching this. ------------- **** CHAPTER FOUR **** <117> In the Figure 4-1 caption, changed: WiMicro (left) To: WiMicro (right) ------------- (125) in the caption above the first photo on the page, changed: Micro-to-USV-adaptor to: Micro-to-USB-adaptor ------------- [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() ------------- {136} at the fifth line in the caption at the bottom, changed: one minute to: two minutes ------------- {137} Last paragraph, 2nd to last line, changed: one minute to: two minutes ------------- {141} at the first line of the comment in setup() method, removed 'led pins'. ------------- {145} in the comment at the third line of the code, changed 'message' to 'client'. **** CHAPTER FIVE **** {153} in the schematics in Figure 5-2, changed 'To Micro Reset pin' to 'To XPort Reset pin'. ------------- (154) in the upper-left picture, changed 'Switch imput' to 'Switch input'. ------------- {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; ------------- {162} in the schematics in Figure 5-7, changed 'To Micro Reset pin' to 'To XPort Reset pin'. ------------- (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() ------------- {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/ ------------- <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. ------------- (170), at the third line in the caption at the bottom, changed 'ach' to 'each'. ------------- {172}, at the first line in the top code block, changed 'horizontal' to 'vertical'. ------------- {174} in the caption at the bottom, 'At right' and 'At left' were swapped. ------------- **** CHAPTER SIX **** [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 **** {266} in the Materials list, changed "1 10μF capacitor" to "1 100μF capacitor" ------------- {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 } ------------- (273) Removed "(not used here) from comment for byte 7. ------------- **** APPENDIX C **** {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/ ------------- {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; ------------- {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/ ------------- {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 } ------------- (404) Removed "(not used here) from comment for byte 7. ------------- [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. -------------