Example #1
0
void Pololu3pi::init(unsigned int line_sensor_timeout_us, unsigned char disable_emitter_pin)
{
	// Set up the line sensor and turn off the emitters.
	// The sensors are on PC0..4, and the emitter is on PC5.
	unsigned char pins[5] = {14,15,16,17,18};
	if(disable_emitter_pin)
		qtr3pi.init(pins,5,line_sensor_timeout_us,255);
	else
		qtr3pi.init(pins,5,line_sensor_timeout_us,19);

	qtr3pi.emittersOff();

#ifndef ARDUINO
	// reset the time in lib-pololu mode only 
	OrangutanTime::reset();
#endif
}
Example #2
0
void test_qtr()
{
  OrangutanLCD::clear();

  OrangutanLCD::print(sizeof(PololuQTRSensorsAnalog));
  delay_ms(1000);

  OrangutanLCD::clear();

  // Load bar graph characters.
  // Together with space and the solid block at 255, this makes almost
  // all possible bar heights, with two to spare.
  unsigned char i;
  for(i=0;i<6;i++)
  {
    OrangutanLCD::loadCustomCharacter(bars+i,i);
  }
  OrangutanLCD::loadCustomCharacter(left_bar,6);
  OrangutanLCD::loadCustomCharacter(right_bar,7);

  // test RC
  unsigned int values[5];

  // raw values

  while(!OrangutanPushbuttons::isPressed(ALL_BUTTONS))
  {
    OrangutanLCD::clear();

    qtr.read(values);

    printf("IR+ %4ud",values[0]);

    display_values(values,2000);

    qtr.calibrate(QTR_EMITTERS_ON);

    assert(qtr.calibratedMaximumOn != 0); // make sure the malloc worked
    assert(qtr.calibratedMinimumOn != 0); // make sure the malloc worked

    OrangutanLCD::gotoXY(5,1);
    //    OrangutanLCD::print(qtr.calibratedMinimumOn[0]);
    delay_ms(50);
  }
 
  OrangutanPushbuttons::waitForButton(ALL_BUTTONS);

  // calibrated values
  while(!OrangutanPushbuttons::isPressed(ALL_BUTTONS))
  {
    qtr.readCalibrated(values);

    OrangutanLCD::clear();
    printf("C + %4ud",values[0]);

    display_values(values,1000);
    delay_ms(50);
  }

  OrangutanPushbuttons::waitForButton(ALL_BUTTONS);

  // off values
  while(!OrangutanPushbuttons::isPressed(ALL_BUTTONS))
  {
    OrangutanLCD::clear();

    qtr.read(values,QTR_EMITTERS_OFF);

    printf("IR- %4ud",values[0]);

    display_values(values,2000);

    qtr.calibrate(QTR_EMITTERS_OFF);

    assert(qtr.calibratedMaximumOff != 0); // make sure the malloc
					   // worked
    assert(qtr.calibratedMinimumOff != 0); // make sure the malloc worked

    OrangutanLCD::gotoXY(5,1);
    OrangutanLCD::print(qtr.calibratedMinimumOff[0]);
    delay_ms(50);
  }

  OrangutanPushbuttons::waitForButton(ALL_BUTTONS);

  // calibrated values
  while(!OrangutanPushbuttons::isPressed(ALL_BUTTONS))
  {
    qtr.readCalibrated(values, QTR_EMITTERS_OFF);

    OrangutanLCD::clear();
    printf("C - %4ud",values[0]);

    display_values(values,1000);
    delay_ms(50);
  }

  OrangutanPushbuttons::waitForButton(ALL_BUTTONS);

  while(!OrangutanPushbuttons::isPressed(ALL_BUTTONS))
  {
    OrangutanLCD::clear();

    qtr.read(values,QTR_EMITTERS_ON_AND_OFF);

    printf("IR+-%4ud",values[0]);

    display_values(values,2000);
    delay_ms(50);
  }

  OrangutanPushbuttons::waitForButton(ALL_BUTTONS);

  // calibrated values
  while(!OrangutanPushbuttons::isPressed(ALL_BUTTONS))
  {
    qtr.readCalibrated(values, QTR_EMITTERS_ON_AND_OFF);

    OrangutanLCD::clear();
    printf("C +-%4ud",values[0]);

    display_values(values,1000);
    delay_ms(50);
  }

  OrangutanPushbuttons::waitForButton(ALL_BUTTONS);

  // line detection
  while(!OrangutanPushbuttons::isPressed(ALL_BUTTONS))
  {
    unsigned int pos = qtr.readLine(values);

    OrangutanLCD::clear();

    // we want pos = 0-499 to print zero spaces, etc
    unsigned char spaces = (pos+500)/1000;
    for(i=0;i<spaces;i++)
      OrangutanLCD::print(' ');

    // print the bar to the left, middle, or right, as appropriate
    if(pos == 0)
      OrangutanLCD::print((char)6); // all the way on the left
    else if(pos == 4000)
      OrangutanLCD::print((char)7); // all the way on the right
    else if((pos+500)%1000 <= 333)
      OrangutanLCD::print((char)6);
    else if((pos+500)%1000 <= 666)
      OrangutanLCD::print('|');
    else OrangutanLCD::print((char)7);

    display_values(values,1000);
    delay_ms(50);
  }

  OrangutanPushbuttons::waitForButton(ALL_BUTTONS);
}
Example #3
0
extern "C" unsigned int read_line_white(unsigned int *sensor_values, unsigned char readMode)
{
	return qtr3pi.readLine(sensor_values, readMode, 1);
}
Example #4
0
extern "C" void read_line_sensors_calibrated(unsigned int *sensor_values, unsigned char readMode)
{
	qtr3pi.readCalibrated(sensor_values, readMode);
}
Example #5
0
extern "C" void line_sensors_reset_calibration()
{
	qtr3pi.resetCalibration();
}
Example #6
0
extern "C" void calibrate_line_sensors(unsigned char readMode)
{
	qtr3pi.calibrate(readMode);
}
Example #7
0
extern "C" void emitters_off()
{
	qtr3pi.emittersOff();
}
Example #8
0
extern "C" void emitters_on()
{
	qtr3pi.emittersOn();
}
Example #9
0
extern "C" void read_line_sensors(unsigned int *sensor_values, unsigned char readMode)
{
	return qtr3pi.read(sensor_values, readMode);
}
Example #10
0
unsigned int Pololu3pi::readLine(unsigned int *sensor_values, unsigned char readMode, unsigned char white_line)
{
	return qtr3pi.readLine(sensor_values, readMode, white_line);
}
Example #11
0
void Pololu3pi::readLineSensorsCalibrated(unsigned int *sensor_values, unsigned char readMode)
{
	qtr3pi.readCalibrated(sensor_values, readMode);
}
Example #12
0
void Pololu3pi::lineSensorsResetCalibration()
{
	qtr3pi.resetCalibration();
}
Example #13
0
void Pololu3pi::calibrateLineSensors(unsigned char readMode)
{
	qtr3pi.calibrate(readMode);
}
Example #14
0
void Pololu3pi::emittersOff()
{
	qtr3pi.emittersOff();
}
Example #15
0
void Pololu3pi::readLineSensors(unsigned int *sensor_values, unsigned char readMode)
{
	return qtr3pi.read(sensor_values, readMode);
}