Chapter 3 Solutions
Question Solutions
- Symptoms include erratic behavior such as going in unexpected directions or doing a confused dance.
- 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.
- 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.
- The tone function.
- A hertz is a measurement of the number of times per second a signal repeats itself. It is abbreviated Hz.
Exercise Solutions
- tone(4, 2000, 1500); //example, your tone may be different.
- tone(4, 4000, 75); //example, your tone may be different.
Project Solutions
- 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
}
}
- 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
}
}