예제 #1
0
void InitNunchuck(){
	uint8 init1[2] = {0xF0, 0x55};
	uint8 init2[2] = {0xFB, 0x00};
	uint8 finish = 0;
	Err_LED_1_Write(1);
	JoystickOut(128,128);
    while(finish==0){
		I2C_MasterClearStatus();
		I2C_MasterWriteBuf(0x52, init1, 2, I2C_MODE_COMPLETE_XFER);
        CyDelay(1);
		if (0u == (I2C_MasterStatus() & I2C_MSTAT_ERR_XFER)){
            I2C_MasterClearStatus();
			I2C_MasterWriteBuf(0x52, init2, 2, I2C_MODE_COMPLETE_XFER);
			CyDelay(1);
			if (0u == (I2C_MasterStatus() & I2C_MSTAT_ERR_XFER)){
				finish = 1;
			}	
        }
		CyDelay(100);
    }
	Err_LED_1_Write(0);
}
예제 #2
0
void RunNunchuck(void){
	uint8 clear[] = {0x00}; 
	uint8 buffer[16];
	unsigned short wiichuck[7];	
	Err_LED_1_Write(0);
	Err_LED_2_Write(0);
	JoystickInit();
	I2C_Start();
	InitNunchuck();
    for(;;)
    {
		I2C_MasterClearStatus();
		CyDelay(1);
        I2C_MasterWriteBuf(0x52, clear, 1, I2C_MODE_COMPLETE_XFER);
		CyDelay(1);
		I2C_MasterWriteBuf(0x52, clear, 1, I2C_MODE_COMPLETE_XFER);
		CyDelay(1);
		I2C_MasterWriteBuf(0x52, clear, 1, I2C_MODE_COMPLETE_XFER);
		CyDelay(1);
		if (0u != (I2C_MasterStatus() & I2C_MSTAT_ERR_XFER)){
			InitNunchuck();
        }else{
			I2C_MasterClearStatus();
			CyDelay(1);
            I2C_MasterReadBuf(0x52, buffer, 6, I2C_MODE_COMPLETE_XFER);   // Nunchuck data is 6 bytes, but for whatever reason, MEMOREX Wireless Nunchuck wants to send 8...
            CyDelay(1);
			if (0u != (I2C_MasterStatus() & I2C_MSTAT_ERR_XFER)){
                InitNunchuck();
            }else{
                wiichuck[0] = buffer[1];// X Axis Joystick
                wiichuck[1] = buffer[0];// Y Axis Joystick
                wiichuck[2] = (((unsigned short) buffer[2]) << 2) + (((unsigned short) buffer[5]) & (3<<2));    // X Axis Accel
                wiichuck[3] = (((unsigned short) buffer[3]) << 2) + (((unsigned short) buffer[5]) & (3<<4));    // Y Axis Accel
                wiichuck[4] = (((unsigned short) buffer[4]) << 2) + (((unsigned short) buffer[5]) & (3<<6));    // Z Axis Accel
                wiichuck[5] = buffer[5] & (1 << 1) ? 0 : 1;  //'C' Button 
                wiichuck[6] = buffer[5] & (1 << 0) ? 0 : 1;  //'Z' Button
				if(wiichuck[5]) JoystickOut(128,128);
				else JoystickOut(wiichuck[0],wiichuck[1]);
            }
		}
		Err_LED_2_Write(~Err_LED_2_Read());
		CyDelay(100);
    }
}
예제 #3
0
void ResetWatchdog(void){
	if( ms + WATCHDOG_TIMEOUT >= MS_PER_SEC) WatchdogOverflow = 1;
	WatchdogTime = (( ms + WATCHDOG_TIMEOUT ) % MS_PER_SEC);
	Err_LED_1_Write(0);
}
예제 #4
0
void WatchdogTimeout(void){
	SetLeftMotor(0); //stop the bot
	SetRightMotor(0);
	VelCtrlRunning = 0;
	Err_LED_1_Write(1);
}