Re: Wiring the IR Receiver
Quote:
Originally Posted by chattycat14
(Post 687543)
Under the online window it changes from 0 to 1 when the button is pressed, but when the actual program is downloaded it retains the value of 1.
|
Online window??? Anyway, here is the code we're using. It has some safety built in, and shows the state on the OI.
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;
}
}
}
I think I took all of our personal, never to be seen code out, and I think I have all the variables declared in the beginning. I give the right for any team to use this, and I give no warranty. If it does not work, you can PM me, and I can try to help. I will not help with any of your personal programming though.
PS: We have tried this on our robot, and it works great! So I encourage any teams that aren't very programming savvy to try to use this to at least do something.
|