Exemplo n.º 1
0
void run_translatorI2C() {
	unsigned char mod, reg, val;

	uart_send_static_text("\f\a"
	                      "WELCOME to the RS232 - I2C translator on e-Puck\r\n"
								" 1 byte protocol ASL-EPFL 2006\r\n");
	e_i2cp_init();

	while (1) {
		e_getchar_uart1(&mod);	// #module
		mod=(unsigned char) (mod<<1);
		e_getchar_uart1(&reg);	// #register
		if (reg>127) {	// read
			e_i2cp_enable();
			val= e_i2cp_read(mod, reg&0x7f);	// read I2C
			e_i2cp_disable();
			e_send_uart1_char(&val, 1);
		} else {	// write
			e_getchar_uart1(&val);	// #value
			e_i2cp_enable();
			e_i2cp_write(mod, reg, val);	// write I2C
			e_i2cp_disable();
		}
	}
}
Exemplo n.º 2
0
void InitComModule(unsigned char owngroup, unsigned int ownaddress, unsigned char hardwareattenuatormode, unsigned char softwareattenuatorvalue) {
	e_i2cp_init();
	e_i2cp_enable();
                
	while (IsModulePlugged() == 0); // wait till module online

	SetOwnGroup(owngroup);
	SetOwnAddress(ownaddress);
	SetHardwareAttenuator(hardwareattenuatormode);
	SetSoftwareAttenuator(softwareattenuatorvalue);
	SetRadioEnabledState(1);
}
Exemplo n.º 3
0
void run_translatorI2C_b() {
	unsigned char mod, reg, val;

	uart_send_static_text("\f\a"
	                      "WELCOME to the RS232 - I2C translator on e-Puck\r\n"
								" multi byte protocol ASL-ETHZ 2007\r\n");
	e_i2cp_init();

	while (1) {
		e_getchar_uart1(&mod);	// #module
		e_getchar_uart1(&reg);	// #register
		if (mod>127) {	// read
		} else { //write
		}
	}
}
Exemplo n.º 4
0
void e_init_randb ( unsigned char mode )
{
	if ( mode == I2C )
	{
		/* Init I2C */
		e_i2cp_init();
		e_i2cp_enable();
	}
	else
	{
		/* Init UART2 */
		e_init_uart2();
		
		/* Clean UART buffer */
		char msg;
		while(e_getchar_uart2(&msg));

		/* Start Agendas */
		e_start_agendas_processing();

		/* Locate e-randb task */
		e_activate_agenda(e_randb_get_uart2, 2);
		
		/* Tell the board we work on UART mode */
		e_randb_set_uart_communication(UART);
	}

	/* Calculations are made on the BOARD*/
	calcOnBoard = TRUE;

	/* Init Global variables */
	erandbFinished = FALSE;
	erandbState = WAITING;
	erandbCounter = 0;

}
Exemplo n.º 5
0
int main(void) {

	// Locals General. -----------------------------------------------------
	char imu_board_id[9] = {0,0,0,0, 0,0,0,0, 0};
	char message[1024];	// Any message to send by UART1
	InitOscillator();			// Initialize the PLL (also disables wdt)
	__delay32(_50MILLISEC);

	// Init mcu ports ------------------------------------------------------

	init_port();    	// Initialize ports
	LED_ORNG =0;
	LED_RED = 1;

	// Init UARTS. ---------------------------------------------------------

	init_UART1();		// Initialize the serial communication (TTL / RS-232)
	init_UART2();
    broadcast_message("RC Testing program\n");

	// Init Analog Channels. -----------------------------------------------

	analog_initAnalog();	// Init the ADC module

	// Init SPI. ---------------------------------------------------------

	init_SPI();

	// Init I2C. ---------------------------------------------------------

	e_i2cp_init();
	e_i2cp_enable();
	__delay32(_50MILLISEC);
	e_i2c_write(0x00);	// dummy byte to get the START bit on the bus (believe it or not!)


	// Init RC. ----------------------------------------------------------
	initControlVariables(NULL);

    broadcast_message("Initialising RC\n");
	LED_ORNG =1;
	LED_RED = 1;

	BuzzerBip(1,1);		// Make x bips of the Buzzer (blocking)
	RCInitReception();
    // RCSetType(RC_WK2401);
    RCSetType(RC_WK2402);
    
    broadcast_message("Initialising IMU\n");
	// Init BUZZER. ----------------------------------------------------------
	__delay32(_200MILLISEC);  // Wait for the IMU to boot

	while (INT_IMU==0)		// Wait for the IMU to boot
	{
		FlashORNG ();						// Flash the LED	
	}
	read_imu_version(imu_board_id); imu_board_id[8] = 0;
	
    broadcast_message("Entering main loop\n");
	// Init BUZZER. ----------------------------------------------------------
	BuzzerBip(3,1);		// Make x bips of the Buzzer, blocking
	InitLoopTimer(control.params.T_ctrl_ms);// Initialize & Enable control loop timer (20ms; 50Hz)
	LED_RED = 0;
    while (1) {
        __delay32(5*_10MILLISEC);
        sprintf(message, "RC %+.2f %+.2f %+.2f %.2f %.2f %+.2f %+.2f %+.2f %s CTRL %02X %s %s\n", 
                RC_THROTTLE, RC_YAW, RC_ROLL, RC_PITCH,
                RC_THROTTLE_TRIM, RC_YAW_TRIM, RC_ROLL_TRIM, RC_PITCH_TRIM,
                string_of_rc_state(RCSMGetState()),
                control.flags.CONTROL_MODE,
                string_of_control_mode(control.flags.CONTROL_MODE),
                string_of_control_type(control.flags.CONTROL_MODE));
        broadcast_message(message);
    }

    return 0;
	
}	// End of main
Exemplo n.º 6
0
int run_asercom(void) {
	static char c1,c2,wait_cam=0;
	static int	i,j,n,speedr,speedl,positionr,positionl,LED_nbr,LED_action,accx,accy,accz,sound;
	static int cam_mode,cam_width,cam_heigth,cam_zoom,cam_size,cam_x1,cam_y1;
	static char first=0;
	char *ptr;
	static int mod, reg, val;
#ifdef IR_RECEIVER
	char ir_move = 0,ir_address= 0, ir_last_move = 0;
#endif
	static TypeAccSpheric accelero;
	//static TypeAccRaw accelero_raw;
	int use_bt=0;
	//e_init_port();    // configure port pins
	//e_start_agendas_processing();
	e_init_motors();
	//e_init_uart1();   // initialize UART to 115200 Kbaud
	//e_init_ad_scan();

	selector = getselector(); //SELECTOR0 + 2*SELECTOR1 + 4*SELECTOR2 + 8*SELECTOR3;
	if(selector==10) {
		use_bt=0;
	} else {
		use_bt=1;
	}

#ifdef FLOOR_SENSORS
	if(use_bt) {	// the I2C must remain disabled when using the gumstix extension
		e_i2cp_init();
	}
#endif

#ifdef IR_RECEIVER
	e_init_remote_control();
#endif
	if(RCONbits.POR) {	// reset if power on (some problem for few robots)
		RCONbits.POR=0;
		RESET();
	}
	/*read HW version from the eeprom (last word)*/
	static int HWversion=0xFFFF;
	ReadEE(0x7F,0xFFFE,&HWversion, 1);

	/*Cam default parameter*/
	cam_mode=RGB_565_MODE;
	cam_width=40; // DEFAULT_WIDTH;
	cam_heigth=40; // DEFAULT_HEIGHT;
	cam_zoom=8;
	cam_size=cam_width*cam_heigth*2;

	if(use_bt) {
		e_poxxxx_init_cam();
		//e_po6030k_set_sketch_mode(E_PO6030K_SKETCH_COLOR);
		e_poxxxx_config_cam((ARRAY_WIDTH -cam_width*cam_zoom)/2,(ARRAY_HEIGHT-cam_heigth*cam_zoom)/2,cam_width*cam_zoom,cam_heigth*cam_zoom,cam_zoom,cam_zoom,cam_mode);
		e_poxxxx_set_mirror(1,1);
		e_poxxxx_write_cam_registers();
	}
	
	e_acc_calibr();
	
	if(use_bt) {
	uart1_send_static_text("\f\a"
			"WELCOME to the SerCom protocol on e-Puck\r\n"
			"the EPFL education robot type \"H\" for help\r\n");
	} else {
	uart2_send_static_text("\f\a"
			"WELCOME to the SerCom protocol on e-Puck\r\n"
			"the EPFL education robot type \"H\" for help\r\n");
	}


	while(1) {
		if(use_bt) {
			while (e_getchar_uart1(&c)==0)
			#ifdef IR_RECEIVER
					{
						ir_move = e_get_data();
						ir_address = e_get_address();
						if (((ir_address ==  0)||(ir_address ==  8))&&(ir_move!=ir_last_move)){
							switch(ir_move) {
								case 1:
									speedr = SPEED_IR;
									speedl = SPEED_IR/2;
									break;
								case 2:
									speedr = SPEED_IR;
									speedl = SPEED_IR;
									break;
								case 3:
									speedr = SPEED_IR/2;
									speedl = SPEED_IR;
									break;
								case 4:
									speedr = SPEED_IR;
									speedl = -SPEED_IR;
									break;
								case 5:
									speedr = 0;
									speedl = 0;
									break;
								case 6:
									speedr = -SPEED_IR;
									speedl = SPEED_IR;
									break;
								case 7:
									speedr = -SPEED_IR;
									speedl = -SPEED_IR/2;
									break;
								case 8:
									speedr = -SPEED_IR;
									speedl = -SPEED_IR;
									break;
								case 9:
									speedr = -SPEED_IR/2;
									speedl = -SPEED_IR;
									break;
								case 0:
									if(first==0){
										e_init_sound();
										first=1;
									}
									e_play_sound(11028,8016);
									break;
								default:
									speedr = speedl = 0;
							}
							ir_last_move = ir_move;
							e_set_speed_left(speedl);
							e_set_speed_right(speedr);
							}
					}
			#else 
					;
			#endif
		} else {
			while (e_getchar_uart2(&c)==0)
			#ifdef IR_RECEIVER
					{
						ir_move = e_get_data();
						ir_address = e_get_address();
						if (((ir_address ==  0)||(ir_address ==  8))&&(ir_move!=ir_last_move)){
							switch(ir_move) {
								case 1:
									speedr = SPEED_IR;
									speedl = SPEED_IR/2;
									break;
								case 2:
									speedr = SPEED_IR;
									speedl = SPEED_IR;
									break;
								case 3:
									speedr = SPEED_IR/2;
									speedl = SPEED_IR;
									break;
								case 4:
									speedr = SPEED_IR;
									speedl = -SPEED_IR;
									break;
								case 5:
									speedr = 0;
									speedl = 0;
									break;
								case 6:
									speedr = -SPEED_IR;
									speedl = SPEED_IR;
									break;
								case 7:
									speedr = -SPEED_IR;
									speedl = -SPEED_IR/2;
									break;
								case 8:
									speedr = -SPEED_IR;
									speedl = -SPEED_IR;
									break;
								case 9:
									speedr = -SPEED_IR/2;
									speedl = -SPEED_IR;
									break;
								case 0:
									if(first==0){
										e_init_sound();
										first=1;
									}
									e_play_sound(11028,8016);
									break;
								default:
									speedr = speedl = 0;
							}
							ir_last_move = ir_move;
							e_set_speed_left(speedl);
							e_set_speed_right(speedr);
							}
					}
			#else 
					;
			#endif
		}

		if (c<0) { // binary mode (big endian)
			i=0;
			do {
				switch(-c) { 
        		case 'a': // Read acceleration sensors in a non
                  // filtered way, some as ASCII
          			accx = e_get_acc_filtered(0, 1); 
          			accy = e_get_acc_filtered(1, 1); 
          			accz = e_get_acc_filtered(2, 1); 
				
				//accx = e_get_acc(0);	//too much noisy
				//accy = e_get_acc(1);
				//accz = e_get_acc(2);

				buffer[i++] = accx & 0xff;
          			buffer[i++] = accx >> 8;
          			buffer[i++] = accy & 0xff;
          			buffer[i++] = accy >> 8;
          			buffer[i++] = accz & 0xff;
          			buffer[i++] = accz >> 8;
				
				/*
          			accelero_raw=e_read_acc_xyz();
				ptr=(char *)&accelero_raw.acc_x;
				buffer[i++]=(*ptr);
				ptr++;
				buffer[i++]=(*ptr);
				ptr++;

				ptr=(char *)&accelero_raw.acc_y;
				buffer[i++]=(*ptr);
				ptr++;
				buffer[i++]=(*ptr);
				ptr++;

				ptr=(char *)&accelero_raw.acc_z;
				buffer[i++]=(*ptr);
				ptr++;
				buffer[i++]=(*ptr);
				ptr++;
				*/
          			break;
				case 'A': // read acceleration sensors
					accelero=e_read_acc_spheric();
					ptr=(char *)&accelero.acceleration;
					buffer[i++]=(*ptr);
					ptr++;
					buffer[i++]=(*ptr);
					ptr++;
					buffer[i++]=(*ptr);
					ptr++;
					buffer[i++]=(*ptr);
				
					ptr=(char *)&accelero.orientation;
					buffer[i++]=(*ptr);
					ptr++;
					buffer[i++]=(*ptr);
					ptr++;
					buffer[i++]=(*ptr);
					ptr++;
					buffer[i++]=(*ptr);
		
					ptr=(char *)&accelero.inclination;
					buffer[i++]=(*ptr);
					ptr++;
					buffer[i++]=(*ptr);
					ptr++;
					buffer[i++]=(*ptr);
					ptr++;
					buffer[i++]=(*ptr);
				
					break;
				case 'b': // battery ok?
					buffer[i++] = BATT_LOW;
					break;
				case 'D': // set motor speed
					if(use_bt) {
						while (e_getchar_uart1(&c1)==0);
						while (e_getchar_uart1(&c2)==0);
					} else {
						while (e_getchar_uart2(&c1)==0);
						while (e_getchar_uart2(&c2)==0);
					}
					speedl=(unsigned char)c1+((unsigned int)c2<<8);
					if(use_bt) {
						while (e_getchar_uart1(&c1)==0);
						while (e_getchar_uart1(&c2)==0);
					} else {
						while (e_getchar_uart2(&c1)==0);
						while (e_getchar_uart2(&c2)==0);					
					}
					speedr=(unsigned char)c1+((unsigned  int)c2<<8);
					e_set_speed_left(speedl);
					e_set_speed_right(speedr);
					break;
        		case 'E': // get motor speed
          			buffer[i++] = speedl & 0xff;
          			buffer[i++] = speedl >> 8;
          			buffer[i++] = speedr & 0xff;
          			buffer[i++] = speedr >> 8;
          			break;
				case 'I': // get camera image
					if(use_bt) {
						e_poxxxx_launch_capture(&buffer[i+3]);
						wait_cam=1;
						buffer[i++]=(char)cam_mode&0xff;//send image parameter
						buffer[i++]=(char)cam_width&0xff;
						buffer[i++]=(char)cam_heigth&0xff;
						i+=cam_size;
					}
					break;
				case 'L': // set LED
					if(use_bt) {
						while (e_getchar_uart1(&c1)==0);
						while (e_getchar_uart1(&c2)==0);
					} else {
						while (e_getchar_uart2(&c1)==0);
						while (e_getchar_uart2(&c2)==0);
					}
					switch(c1) {
						case 8:
							if(use_bt) {
								e_set_body_led(c2);
							}
							break;
						case 9:
							if(use_bt) {
								e_set_front_led(c2);
							}
							break;
						default:
							e_set_led(c1,c2);
							break;
					}
					break;
				case 'M': // optional floor sensors
#ifdef FLOOR_SENSORS
					if(use_bt) {
	          			e_i2cp_init();
	          			e_i2cp_enable();
	          			e_i2cp_read(0xC0, 0);
	          			for(j = 0; j < 6; j++) {
	            			if (j % 2 == 0) buffer[i++] = e_i2cp_read(0xC0, j + 1);
	            			else            buffer[i++] = e_i2cp_read(0xC0, j - 1);
	          			}
#ifdef CLIFF_SENSORS
          				for(j=13; j<17; j++) {
            				if (j % 2 == 0) buffer[i++] = e_i2cp_read(0xC0, j - 1);
            				else            buffer[i++] = e_i2cp_read(0xC0, j + 1);	          				
	          			}
#endif
	          			e_i2cp_disable();
					}
#else
					for(j=0;j<6;j++) buffer[i++]=0;
#endif
					break;
				case 'N': // read proximity sensors
					if(use_bt) {
						for(j=0;j<8;j++) {
							n=e_get_calibrated_prox(j);	// or ? n=e_get_prox(j);
							buffer[i++]=n&0xff;
							buffer[i++]=n>>8;
						}
					} else {
						for(j=0;j<10;j++) {
							n=e_get_calibrated_prox(j);	// or ? n=e_get_prox(j);
							buffer[i++]=n&0xff;
							buffer[i++]=n>>8;
						}
					}
					break;
				case 'O': // read light sensors
					if(use_bt) {
						for(j=0;j<8;j++) {
	
							n=e_get_ambient_light(j);
							buffer[i++]=n&0xff;
							buffer[i++]=n>>8;
						}
					} else {
						for(j=0;j<10;j++) {
							n=e_get_ambient_light(j);
							buffer[i++]=n&0xff;
							buffer[i++]=n>>8;
						}
					}
					break;
				case 'Q': // read encoders
                    n=e_get_steps_left();
					buffer[i++]=n&0xff;
					buffer[i++]=n>>8;
                    n=e_get_steps_right();
					buffer[i++]=n&0xff;
					buffer[i++]=n>>8;
					break;
        		case 'u': // get last micro volumes
          			n = e_get_micro_volume(0);
          			buffer[i++] = n & 0xff;
          			buffer[i++] = n >> 8;

          			n = e_get_micro_volume(1);
          			buffer[i++] = n & 0xff;
          			buffer[i++] = n >> 8;

          			n = e_get_micro_volume(2);
          			buffer[i++] = n & 0xff;
          			buffer[i++] = n >> 8;
          			break;
				case 'U': // get micro buffer
					ptr=(char *)e_mic_scan;
					if(use_bt) {
						e_send_uart1_char(ptr,600);//send sound buffer
					} else {
						e_send_uart2_char(ptr,600);//send sound buffer
					}
					n=e_last_mic_scan_id;//send last scan
					buffer[i++]=n&0xff;
					break;
				default: // silently ignored
					break;
				}
				if(use_bt) {
					while (e_getchar_uart1(&c)==0); // get next command
				} else {
					while (e_getchar_uart2(&c)==0); // get next command
				}
			} while(c);