Beispiel #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();
		}
	}
}
Beispiel #2
0
int ve_recv_int()
{
  char message[2];

  while(!e_ischar_uart1()){} /* Wait until arrive a message */
  while(e_getchar_uart1(message)==0);

  while(!e_ischar_uart1()){} /* Wait until arrive a message */
  while(e_getchar_uart1(message + 1)==0);

  int m0 = message[0];
  int m1 = message[1];

  return (m1<<8) | (m0 & 0xFF);
}
Beispiel #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
		}
	}
}
Beispiel #4
0
char recv_char()
{
  char message;

  while(!e_ischar_uart1()){} /* Wait until arrive a message */
  while(e_getchar_uart1(&message)==0);

  return message;
}
Beispiel #5
0
int main()
{
	e_init_port();
	e_init_uart1();
	
	int i;
	for (i = 0; i < 14; i++)
	{
		char c;
		while (!e_ischar_uart1());
		e_getchar_uart1(&c);
	}
	
	while (1)
	{
		char c;
		while (!e_ischar_uart1());
		e_getchar_uart1(&c);
		e_send_uart1_char(&c, 1);
		while (e_uart1_sending());
	}
	return 0;
}
Beispiel #6
0
void btcomWaitForCommand (char trigger)
{
    char msg;
    do
    {
			e_getchar_uart1 (&msg);
    }
    while (msg != trigger);
    
    // sleep a bit
    long int count;
    for(count = 0; count < 1000000; count++) 
			asm("nop");
}
Beispiel #7
0
//this blocks until a character comes over the bluetooth,
//then returns that character
char btcomGetCharacter()
{
    char result;
   // do
    //{
		e_getchar_uart1(&result);
   // }
   // while(msg != trigger);
    
    // sleep a bit
    long int count;
    for(count = 0; count < 1000000; count++) 
			asm("nop");

	return result;
}
Beispiel #8
0
/*! \brief The function to receive int values from matlab
 * \param data The array of int data you want to fill
 * \param array_size The length of the array
 * \return The number of int stored
 */
int e_receive_int_from_matlab(int* data, int array_size) {
	char c;
	int i=0;
	int temp_size=0;
	int flush = 0;
	
	do{
    	if (e_getchar_uart1(&c)) {	
		    // The first byte is the length of the datas
	    	if(i==0) {
		    	// LSB
		    	temp_size = (int)c;
		    }
			else if(i==1) {
			    // MSB
			    temp_size += ((int)c)<<8;
			    if((temp_size>>1) > array_size) {
				    // ! We will receive more data than the buffer can store
				    // Store as max data as possible, but excedded data will be flushed !
				    flush = 1;
					LED4 = LED4^1;
				    temp_size = (array_size<<1);
				}
		    }
			else {
			    // Then the datas come
			    if((i%2) == 0){
					// LSB
			    	data[i/2-1] = (int)c;
				}
				else{
			    	// MSB
			    	data[(i-1)/2-1] = (data[(i-1)/2-1] & 0b0000000011111111) | ((int)c)<<8;
				}
			}
     		i++;
		}	
Beispiel #9
0
int main(void) {

	// Locals General. -----------------------------------------------------
	char message[50];	// Any message to send by UART1

	 char	command[20], response[50];
	 int	c;
	 int	i, version;

	// Init Oscillator. ----------------------------------------------------
	InitOscillator();	// Initialize the PLL (also disables wdt)
	WaitMiliSec(50);
	// Init mcu ports ------------------------------------------------------
	init_port();    	// Initialize ports

	// Init UARTS. ---------------------------------------------------------	
	init_UART1();		// Initialize the serial communication (TTL / RS-232)
	init_UART2();		// Initialize the serial communication (TTL / RS-232)

	LED_ORNG=0;
//	LED_ORNG =1;

	// Welcome Message-----------------------------------------------------

	uart1_send_static_text("\n\n\rWELCOME to CoaX Bluetooth configuration");	// Welcome msg
	uart1_send_static_text("\n\rPress H (return) for help");

	while(1)
	{	
	   i = 0;
		c=0;
	   do
	   {
	     	if (e_getchar_uart1(&command[i]))
			{	
				c=command[i];
	    		i++;
			}	
	   }
	   while (((char)c != '\n')&&((char)c != '\x0d'));
	   command[i]='\0';
		
	   switch (command[0]) 
	   { 
		case 'P':	e_bt_read_local_pin_number(message);
					sprintf(response,"\n\rPIN code = %s",message);
					break;
		case 'O':	sscanf(command,"O,%s\n",message);
					if(e_bt_write_local_pin_number(message))
						sprintf(response,"\n\rError writting PIN");
					else
						sprintf(response,"\n\rPIN code = %s",message);
					break;
		case 'M':	sscanf(command,"M,%s\n",message);
					if(e_bt_write_local_name(message))
						sprintf(response,"\n\rError writting Name");
					else
						sprintf(response,"\n\rFriendly name = %s",message);
					break;
		case 'S':	sscanf(command,"S,%s\n",message);
					if(e_bt_write_local_pin_number(message))
						sprintf(response,"\n\rError writting PIN");
					else
						sprintf(response,"\n\rPIN code = %s",message);
					e_send_uart1_char(response,strlen(response)); 
					while(e_uart1_sending());
					sprintf(command,"CoaX_%s",message);
					if(e_bt_write_local_name(command))
						sprintf(response,"\n\rError writting Name");
					else
						sprintf(response,"\n\rFriendly name = %s",command);
					break;
		case 'N':	e_bt_read_local_name(message);
					sprintf(response,"\n\rFriendly name = %s",message);
					break;
		case 'R':	version=e_bt_reset();
					sprintf(response,"\n\rReset ok Firmware = %d",version);
					break;
		case 'H':	uart1_send_static_text("\n\r \"M,Name\" Write Name for Friendly Bluetooth name");
					uart1_send_static_text("\n\r \"N\" Read actual Friendly Bluetooth name");
					uart1_send_static_text("\n\r \"O,#\" Write # PIN number");
					uart1_send_static_text("\n\r \"P\" Read actual PIN number"); 
					uart1_send_static_text("\n\r \"R\" Soft reset Bluetooth module");	
					uart1_send_static_text("\n\r \"S,#\" Write # PIN number and same time CoaX_#");	
					
					response[0]='\n';
					response[1]='\0';
					break;
	   	default:    sprintf(response,"\n\rz,Command not found");
	                 	break;
	   }
	   e_send_uart1_char(response,strlen(response));
	   while(e_uart1_sending());
	 }
}
Beispiel #10
0
char waitForMessage(char msg) {
    char c;
    while(e_getchar_uart1(&c) <= 0 && c != msg);
    return c;
}
Beispiel #11
0
unsigned char receiveSingleChar() {
    unsigned char c;
    while(!e_getchar_uart1(&c));
    return c;
}
Beispiel #12
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);