Pololu 3pi Robot User Manual

Page 24

Advertising
background image

• Display sensor readings on the LCD. Since writing to the LCD takes a significant amount of time, you should
do this at most few times per second.

• Incorporate the buzzer into your program. You might want your 3pi to play music while it is driving
or make informational beeps that depend on what it is doing. See

Section 3

of the

command reference

[http://www.pololu.com/docs/0J18]

for more information on using the buzzer; for music, you’ll want to use the

PLAY_CHECK option to avoid disrupting your sensor readings.

The entire source code to this simple line following program is presented below, for your reference.

/*

* 3pi-linefollower - demo code for the Pololu 3pi Robot

*

* This code will follow a black line on a white background, using a

* very simple algorithm. It demonstrates auto-calibration and use of

* the 3pi IR sensors, motor control, bar graphs using custom

* characters, and music playback, making it a good starting point for

* developing your own more competitive line follower.

*

* http://www.pololu.com/docs/0J21

* http://www.pololu.com

* http://forum.pololu.com

*

*/

// The 3pi include file must be at the beginning of any program that

// uses the Pololu AVR library and 3pi.

#include <pololu/3pi.h>

// This include file allows data to be stored in program space. The

// ATmegaxx8 has 16x more program space than RAM, so large

// pieces of static data should be stored in program space.

#include <avr/pgmspace.h>

// Introductory messages. The "PROGMEM" identifier causes the data to

// go into program space.

const char welcome_line1[] PROGMEM = " Pololu";

const char welcome_line2[] PROGMEM = "3\xf7 Robot";

const char demo_name_line1[] PROGMEM = "Line";

const char demo_name_line2[] PROGMEM = "follower";

// A couple of simple tunes, stored in program space.

const char welcome[] PROGMEM = ">g32>>c32";

const char go[] PROGMEM = "L16 cdegreg4";

// Data for generating the characters used in load_custom_characters

// and display_readings. By reading levels[] starting at various

// offsets, we can generate all of the 7 extra characters needed for a

// bargraph. This is also stored in program space.

const char levels[] PROGMEM = {

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111

};

// This function loads custom characters into the LCD. Up to 8

// characters can be loaded; we use them for 7 levels of a bar graph.

void load_custom_characters()

{

lcd_load_custom_character(levels+0,0); // no offset, e.g. one bar

lcd_load_custom_character(levels+1,1); // two bars

lcd_load_custom_character(levels+2,2); // etc...

lcd_load_custom_character(levels+3,3);

Pololu 3pi Robot User's Guide

© 2001–2014 Pololu Corporation

7. Example Project #1: Line Following

Page 24 of 63

Advertising