Chapter 3 Solutions

Question Solutions

  1. Symptoms include erratic behavior such as going in unexpected directions or doing a confused dance.
  2. It’s when the Arduino restarts executing a sketch from the beginning.  Resets occur when you press/release the reset button, disconnect/reconnect power, or when the Arduino receives insufficient power due to brownout.
  3. If you add statements that make the piezospeaker play a tone at the beginning of all your sketches, it’ll play a tone if a brownout occurs.  That way, you can know whether to replace the batteries or check for an error in your navigation code.
  4. The tone function.
  5. A hertz is a measurement of the number of times per second a signal repeats itself.  It is abbreviated Hz. 

Exercise Solutions

  1. tone(4, 2000, 1500);     //example, your tone may be different.
  2. tone(4, 4000, 75);       //example, your tone may be different. 

Project Solutions

  1. Add E2 solution to the end of the for loop.
/*
 Robotics with the BOE Shield – Chapter 3, Project 1
*/

#include <Servo.h>                           // Include servo library
 
Servo servoLeft;                             // Declare left servo signal
Servo servoRight;                            // Declare right servo signal

void setup()                                 // Built in initialization block
{
  tone(4, 3000, 1000);                       // Play tone for 1 second
  delay(1000);                               // Delay to finish tone
 
  Serial.begin(9600);                        // Set data rate to 9600 bps
  servoLeft.attach(13);                      // Attach left signal to P13
}  
 
void loop()                                  // Main loop auto-repeats
{

  // Loop counts with pulseWidth from 1375 to 1625 in increments of 25.

  for(int pulseWidth = 1375; pulseWidth <= 1625; pulseWidth += 25)
  {
    Serial.print("pulseWidth = ");           // Display pulseWidth value
    Serial.println(pulseWidth);
    Serial.println("Press a key and click"); // User prompt
    Serial.println("Send to start servo...");

    while(Serial.available() == 0);          // Wait for character
    Serial.read();                           // Clear character

    Serial.println("Running...");
    servoLeft.writeMicroseconds(pulseWidth);   // Pin 13 servo speed = pulse
    delay(6000);                               // ..for 6 seconds
    servoLeft.writeMicroseconds(1500);         // Pin 13 servo speed = stop
    tone(4, 4000, 75);                         // Test complete
  }
}
  1. Add Servo servoRight, and servoRight.attach(12).  For same speed in opposite direction use:
servoRight.writeMicroseconds(1500 + (1500 – pulseWidth))

Remember to add a servoRight.writeMicroseconds(1500) after the 6-second run time.

/*
 Robotics with the BOE Shield – Chapter 3, Project 2
*/

#include <Servo.h>                           // Include servo library
 
Servo servoLeft;                             // Declare left servo signal
Servo servoRight;                            // Declare right servo signal

void setup()                                 // Built in initialization block
{
  tone(4, 3000, 1000);                       // Play tone for 1 second
  delay(1000);                               // Delay to finish tone
 
  Serial.begin(9600);                        // Set data rate to 9600 bps
  servoLeft.attach(13);                      // Attach left signal to P13
  servoRight.attach(12);                     // Attach right signal to P12
}  
 
void loop()                                  // Main loop auto-repeats
{

  // Loop counts with pulseWidth from 1375 to 1625 in increments of 25.

  for(int pulseWidth = 1375; pulseWidth <= 1625; pulseWidth += 25)
  {
    Serial.print("pulseWidth = ");           // Display pulseWidth value
    Serial.println(pulseWidth);
    Serial.println("Press a key and click"); // User prompt
    Serial.println("Send to start servo...");

    while(Serial.available() == 0);          // Wait for character
    Serial.read();                           // Clear character

    Serial.println("Running...");
    servoLeft.writeMicroseconds(pulseWidth);   // Pin 13 servo speed = pulse
    // Pin 12 servo opposite direction of pin 13 servo.
    servoRight.writeMicroseconds(1500 + (1500 - pulseWidth));   
    delay(6000);                               // ..for 6 seconds
    servoLeft.writeMicroseconds(1500);         // Pin 13 servo speed = stop
    servoRight.writeMicroseconds(1500);        // Pin 12 servo speed = stop
    tone(4, 4000, 75);                         // Test complete
  }
}