Log in

View Full Version : Autonomous mode does not work


Sunny
15-01-2008, 16:38
Hello I am a new programmer to FRC and having problems getting Autonomous mode to work. This is the code.

void User_Autonomous_Code(void)
{
/* Initialize all PWMs and Relays when entering Autonomous mode, or else it
will be stuck with the last values mapped from the joysticks. Remember,
even when Disabled it is reading inputs from the Operator Interface.
*/
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;



while (autonomous_mode) /* DO NOT CHANGE! */
{
if (statusflag.NEW_SPI_DATA) /* 26.2ms loop area */
{
Getdata(&rxdata); /* DO NOT DELETE, or you will be stuck here forever! */

/* Add your own autonomous code here. */
if(digital_io_01==1)
{
if(pwm01==127) //Full Forward
{

pwm01=254;
pwm02=254;
}
}
if(digital_io_02==1)//Full Left
{
if(pwm01==127)
{

pwm01=0;
pwm02=254;
}
}
if(digital_io_03==1)
{
if(pwm01==127) // Full Right
{

pwm01=254;
pwm02=0;
}
}





Generate_Pwms(pwm13,pwm14,pwm15,pwm16);

Putdata(&txdata); /* DO NOT DELETE, or you will get no PWM outputs! */
}
}
}

I think it should work but when we push the buttons on the remote only the ir board leds goes on and no pwm outputs. Also i tried just setting pwm01 and pwm02 to 254 without any ir inputs and the motors did nothing. The pwm cables are all plugged in properly and they work in RC mode. Any suggestions

amateurrobotguy
15-01-2008, 16:48
Autonomous mode has to be enable for autonomous code to work. You need to buy this device to test autonomous code

http://andymark.biz/am-0016.html

Sunny
15-01-2008, 16:52
We already made the dongle for it. And the controller says it is in autonomous mode.

kaszeta
15-01-2008, 19:15
Hello I am a new programmer to FRC and having problems getting Autonomous mode to work. This is the code.


My guess is that you're trying to read digital_io_xx variables, which aren't the inputs.

These should be rc_dig_in_xx variables instead.

divergentdave
15-01-2008, 22:58
My guess is that you're trying to read digital_io_xx variables, which aren't the inputs.

These should be rc_dig_in_xx variables instead.

Yes, this is correct. The digital_io_## variables just control whether a given port is to be used as an input or as an output. So, in your initialization, you'll want to setdigital_io_1 = digital_io_2 = digital_io_3 = digital_io_4 = INPUT;Then, later, your if statements should readif (rc_dig_in01)

Sunny
15-01-2008, 23:03
I changed the variables to what you said but it does not compile then. It gives this error
C:\Documents and Settings\Sunny Parikh\My Documents\Computer Programming\frc-code-2007-8722\FrcCode_2007_8722\user_routines_fast.c:114:Er ror [1105] symbol 'rc_dig_in_01' has not been defined

Besides I dont think that this is the problem. When i set my pwmxx to full forward without a if statement before it the motors did not work at all. I know for sure it is autonomous mode because of a printf statement I put in that is printing on the computer screen. The the pwm cables are plugged in correctly. I keep racking my head for a solution but i cant think of anything. Its probably something i did that was really stupid and cant figure out.

JohnC
16-01-2008, 04:18
It's "rc_dig_in##" not "rc_dig_in_##" - no final underscore.

Also, why are you checking the value of pwm01? It seems like it would make more sense just to use:if(rc_dig_in01) {
pwm01 = 254;
pwm02 = 254;
} else if(rc_dig_in02) {
pwm01 = 0;
pwm02 = 254;
} else if(rc_dig_in03) {
pwm01 = 254;
pwm02 = 0;
} else {
pwm01 = 127;
pwm02 = 127;
}

JBotAlan
16-01-2008, 07:34
With the current setup you have, the PWM outputs will only change if the output is already neutral--127. You want to pull these statements out, because once you have sent a command, the outputs will no longer be neutral--no longer 127.

Also, you do need to use rc_dig_in01 for digital input 1.

Let me know if you need more help.

Vanquish
16-01-2008, 15:27
while(rc_dig_in01)
{
if(pwm01==127)
{
pwm01=254;
pwm02=254;
}
else
{
pwm01=127;
pwm02=127;
}
}
/*
if(rc_dig_in02)
{

if(pwm01==127)
{
pwm01=0;
pwm02=254;
}
else
{
pwm01=127;
pwm02=127;
}

}
if(rc_dig_in03)
{

if(pwm01==127)
{
pwm01=254;
pwm02=0;
}
else
{
pwm01=127;
pwm02=127;
}

}

*/


When we uncomment the rest of this code we get a program error, an the program light on the RC turns red and nothing works. Any ideas?

p.s. i work with sunny

kaszeta
16-01-2008, 15:31
When we uncomment the rest of this code we get a program error, an the program light on the RC turns red and nothing works. Any ideas?

The while() is your problem. The value of rc_dig_in01 doesn't change between one execution of the while() loop and the next, so this loop either does nothing, or runs forever and you get the red-light-of-death.