# 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.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.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
}
}
```