Exemple #1
0
GT_STATUS sampleTest()
{
	GT_U8 macAddr[6] = {0x0,0x23,0x45,0x67,0x89,0xab};
	qdMultiDevStart();
	enableTag();
	sampleIsolatedCPUPort(qdMultiDev[0],macAddr);
	crossChipTrunkSetup();
	return GT_OK;
}
Exemple #2
0
void handleSpecialEvents(short* enc){
	static uint8_t oldTagValue = None;
	static short elapsedEnc[2] = {0,0};
	uint8_t resetAdjustSpeed = 0;
	//Check for Error
	if( tagValue & Error ){
		//Report Error, Clear Flag, and Do Nothing
		printw_err("Invalid RFID Tag!\n");
		disableTag(Error);
		lineFound = FALSE;
		return;
	}

	//Depending on tag values adjust motor speed
	if( tagValue != oldTagValue ){
		lineFound = FALSE;
		//Do first occurence actions
		uint8_t diff = tagValue & ~oldTagValue;
		//printw("diff = %X\n",diff);
		if( diff & SpeedUp){
			//Disable SPD DOWN
			disableTag(SlowDown);
			resetAdjustSpeed = 1;
		}

		if( diff & SlowDown ){
			//Disable SPD UP
			disableTag(SpeedUp);
			resetAdjustSpeed = 1;
		}

		if( diff & GoLeft ){
			//Disable RIGHT
			disableTag(GoRight);
			elapsedEnc[0] = 0;
			elapsedEnc[1] = 0;
		}
		
		if( diff & GoRight ){
			//Disable LEFT
			disableTag(GoLeft);
			elapsedEnc[0] = 0;
			elapsedEnc[1] = 0;
		}
		
		if( diff & EndZone){
			disableTag(SpeedUp);
			disableTag(SlowDown);
			disableTag(EndZone);
		}
	}

	if( tagValue & SpeedUp ){ //SPD UP
		setState("Go Fast");
		//adjust to target
		adjustSpeed(oldEnc[0], oldEnc[1], MAX_SPEED, resetAdjustSpeed);	 
	}
	if( tagValue & SlowDown ){ //SPD DOWN
		setState("Go Slow");
		//adjust to target
		adjustSpeed(oldEnc[0], oldEnc[1], MIN_SPEED, resetAdjustSpeed);		
	}
	if( tagValue & GoLeft ){ //LEFT
		setState("Go Left");
		//Update Encoder counts
		elapsedEnc[0] += enc[0];
		elapsedEnc[1] += enc[1];
		//Check angle
		float angle = enc2Ang(elapsedEnc[0], elapsedEnc[1]);
		switch( doTurn(angle,MIN_TURN_ANGLE,MAX_TURN_ANGLE) ){
			case 0: //Continue
				setMotorData(&motorData,32,96); //Half Speed 0-Radius Left Turn
				break;
			case 1: //Done, Proceed
				disableTag(GoLeft);
				break;
			case 2:	//Done, Blocked
				disableTag(GoLeft);
				enableTag(GoRight);
				//TODO: Handle stuck at corner situation
				break;
		} 
			
	}
	if( tagValue & GoRight ){ //RIGHT
		setState("Go Right");
		//Update Encoder counts
		elapsedEnc[0] += enc[0];
		elapsedEnc[1] += enc[1];
		//Check angle
		float angle = -enc2Ang(elapsedEnc[0], elapsedEnc[1]);
		switch( doTurn(angle,MIN_TURN_ANGLE,MAX_TURN_ANGLE) ){
			case 0: //Continue
				setMotorData(&motorData,96,32); //Half Speed 0-Radius Right Turn
				break;
			case 1: //Done, Proceed
				disableTag(GoRight);
				break;
			case 2:	//Done, Blocked
				disableTag(GoRight);
				enableTag(GoLeft);
				//TODO: Handle stuck at corner situation
				break;
		} 
		
	}

	if( tagValue & Finish ){ //FIN -- AT END TO ENSURE STOPPING IN EVENT OF OTHER TAGS
		//Stop if found line
		setMotorData(&motorData,64,64);
		//else slow down?
	}

	oldTagValue = tagValue;

	return;
}