View Single Post
  #2   Spotlight this post!  
Unread 03-02-2008, 10:54
RyanN's Avatar
RyanN RyanN is offline
RyanN
AKA: Ryan Nazaretian
FRC #4901 (Garnet Squadron)
Team Role: Mentor
 
Join Date: Jun 2006
Rookie Year: 2005
Location: Columbia, SC
Posts: 1,126
RyanN has a reputation beyond reputeRyanN has a reputation beyond reputeRyanN has a reputation beyond reputeRyanN has a reputation beyond reputeRyanN has a reputation beyond reputeRyanN has a reputation beyond reputeRyanN has a reputation beyond reputeRyanN has a reputation beyond reputeRyanN has a reputation beyond reputeRyanN has a reputation beyond reputeRyanN has a reputation beyond repute
Re: Danger in Disconnected IR Receiver

I already made code that handles this well, and will blink the 4 red LEDs on the OI when the IR receiver is disconnected. I have posted this code in another thread, and have referred to it numerous times. It is really dangerous not to use some sort of safety code if the IR sensor becomes disconnected or it breaks. Here is my code I made:

Code:
//Variables should be declared at the beginning at the program
int mode = 0; //Set it to zero so the robot won't move!
int modea;
int irerror;
int errorloop;



//Switches off all the LEDs on the OI
Switch1_LED = 0;
Switch2_LED = 0;
Switch3_LED = 0;
Relay1_red = 0;
Relay2_red = 0;
Relay1_green = 0;
Relay2_green = 0;
Pwm1_green = 0;
Pwm2_green = 0;
Pwm1_red = 0;
Pwm2_red = 0;
/*The following code will check to make sure the IR sensor is not malfunctioning, 
or it is not disconnected, as no more than one button can be triggered at a time.*/
mode = 0; //If there is no signal from the IR board later in the code, then disable the robot
irerror = 1;
if ((rc_dig_in03 + rc_dig_in04 + rc_dig_in05 + rc_dig_in06) < 3) 
{ 
	irerror = 0; //Tells the disable program that there is no error detected
	if (rc_dig_in03 == 1)
	{
		modea = 1;	//Set to Mode 1 (1st button)
	}
	if (rc_dig_in04 == 1)
	{
		modea = 2;	//Set to Mode 2 (2nd button)
	}
	if (rc_dig_in05 == 1)
	{
		modea = 3;	//Set to Mode 3 (3rd button)
	}
	if (rc_dig_in06 == 1)
	{
		modea = 0;	//EMERGENCY STOP (4th button)
	}
	mode = modea;
}
//The following are the certain autonomous programs
//Each mode acts like a different program.  

if (mode == 1) //Mode 1
{
	printf("Mode 1 %d\r");
	Switch1_LED = 1;
//Put your custom programming here, this will execute when the first button is pressed			
}




if (mode == 2) //Mode 2
{
	printf("Mode 2 %d\r");
	Switch2_LED = 1;
//Put your custom programming here, this will execute when the second button is pressed
}





if (mode == 3) //Mode 3
{
	printf("Mode 3 %d\r");
	Switch3_LED = 1;
//Put your custom programming here, this will execute when the third button is pressed
}

 


//Leave the following code at the very end of the autonomous cycle, so it is sure to execute when and if it is needed.
if (mode == 0) //EMERGENCY STOP
{
	printf("Mode: Disabled %d\r");
	pwm01 = pwm02 = pwm03 = pwm04 = pwm05 = pwm06 = pwm07 = pwm08 = 127;
  	pwm09 = pwm10 = pwm11 = pwm12 = pwm13 = pwm14 = pwm15 = pwm16 = 127;
	relay1_fwd = relay1_rev = relay2_fwd = relay2_rev = 0;
	relay3_fwd = relay3_rev = relay4_fwd = relay4_rev = 0;
	relay5_fwd = relay5_rev = relay6_fwd = relay6_rev = 0;
	relay7_fwd = relay7_rev = relay8_fwd = relay8_rev = 0;	
	//The following code shows all the red lights
	//on the OI to tell the drivers that the autonomous
	//has been disabled
	Pwm1_red = 1;
	Pwm2_red = 1;
	Relay1_red = 1;
	Relay2_red = 1;
	if (irerror == 1) //If the IR has an error, then flash
	{
		printf("IR Sensor Problem, Check connection %d\r");
		errorloop++;
		if (errorloop > 5)
		{
			Pwm1_red = 0;
			Pwm2_red = 0;
			Relay1_red = 0;
			Relay2_red = 0;
		}
		if (errorloop > 9)
		{
			errorloop = 0;
		}
	}
}
__________________
Garnet Squadron
FRC 4901
Controls Mentor
@rnazaretian

Previous mentor and student from Team Fusion, FRC 364