Exemple #1
0
void roomba_t::setup(int BRC_pin) 
{
	// Bring baud rate control (BRC) pin low
	//  This wakes up the Open Interface so it listens for serial
	pinMode(BRC_pin,OUTPUT);
	digitalWrite(BRC_pin,HIGH); // BRC seems to be edge-triggered
	roomba_delay(ROOMBA_SYNC_TIME);
	digitalWrite(BRC_pin,LOW);
	
	for (int attempt=0;attempt<10;attempt++) 
	{
		sensor_packet_m.mode=0;
		roomba_delay(ROOMBA_SYNC_TIME);
		start();
		set_mode(roomba_t::FULL);
		set_led_clean(255,0xff); // orange == 128
		led_update();
		set_receive_sensors(true);
		for (int wait=0;wait<20;wait++) {
			update();
			if (sensor_packet_m.mode!=0) { // success!
				digitalWrite(BRC_pin,HIGH);
				return;
			}
			roomba_delay(100);
		}
		
		// Well, that didn't work.  Try reset command.
		reset();
	}
	
	digitalWrite(BRC_pin,HIGH);
}
Exemple #2
0
Roomba* roomba_init( const char* portpath ) 
{
    int fd = roomba_init_serialport( portpath, B57600 );
    if( fd == -1 ) return NULL;
    uint8_t cmd[1];
    
    cmd[0] = 128;      // START
    int n = write(fd, cmd, 1);
    if( n!=1 ) {
        perror("open_port: Unable to write to port ");
        return NULL;
    }
    roomba_delay(COMMANDPAUSE_MILLIS);
    
    cmd[0] = 130;   // CONTROL
    n = write(fd, cmd, 1);
    if( n!=1 ) {
        perror("open_port: Unable to write to port ");
        return NULL;
    }
    roomba_delay(COMMANDPAUSE_MILLIS);

    Roomba* roomba = calloc( 1, sizeof(Roomba) );
    roomba->fd = fd;
    strcpy(roomba->portpath, portpath);
    roomba->velocity = DEFAULT_VELOCITY;

    return roomba;
}
Exemple #3
0
void roomba_t::set_mode(const mode_t& mode)
{
	uint8_t id=ROOMBA_ID_PASSIVE_MODE;

	if(mode==SAFE)
		id=ROOMBA_ID_SAFE_MODE;
	else if(mode==FULL)
		id=ROOMBA_ID_FULL_MODE;

	serial_m->write(&id,1);
	roomba_delay(ROOMBA_SYNC_TIME);
}
Exemple #4
0
int main(int argc, char *argv[]) 
{
    char* serialport;
    speed_t baud = B57600;

fprintf(stderr, argv[0]);
    if ((!strncmp((argv[0]+strlen(argv[0])-13), "simpletest500",13))) {
        fprintf(stderr,"roomba 500 series\n");
        baud = B115200;	// running as simpletest500 sets baud rate to 115200
    } 

    if( argc>1 && strcmp(argv[1],"-p" )==0 ) {
        serialport = argv[2];
    } else {
        usage();
    }

    roombadebug = 1;

    Roomba* roomba = roomba_init( serialport, baud ); 
    
    roomba_forward( roomba );
    roomba_delay(1000); 

    roomba_backward( roomba );
    roomba_delay(1000); 

    roomba_spinleft( roomba );
    roomba_delay(1000); 

    roomba_spinright( roomba );
    roomba_delay(1000); 

    roomba_stop( roomba );
    
    roomba_close( roomba );
    roomba_free( roomba );

    return 0;
}
Exemple #5
0
void roomba_t::reset()
{
	uint8_t id=ROOMBA_ID_RESET;
	serial_m->write(&id,1);
	roomba_delay(ROOMBA_RESET_TIME);
}
Exemple #6
0
void roomba_t::stop()
{
	uint8_t id=ROOMBA_ID_STOP;
	serial_m->write(&id,1);
	roomba_delay(ROOMBA_SYNC_TIME);
}