View Single Post
  #2   Spotlight this post!  
Unread 11-05-2010, 00:15
biojae's Avatar
biojae biojae is offline
Likes Omni drives :)
AKA: Justin Stocking
FTC #5011 (BOT SQUAD) && FTC#72(Garage bots)&& FRC#0399 (Eagle Robotics)
Team Role: College Student
 
Join Date: Oct 2008
Rookie Year: 2008
Location: Lancaster
Posts: 276
biojae is a jewel in the roughbiojae is a jewel in the roughbiojae is a jewel in the rough
Re: Compressor works in teleop but not autonomous?

compressor.start() won't start the compressor every time you call it.

It is designed to be called once for every time you stop it.
(it defaults to off)

When you call start, a semaphore is set to true.
This flag is checked twice a second by another thread, and if enabled (from the semaphore) and enabled (from the driver station) and the pressure switch pulls the IO pin to ground it sets the compressor's spike to turn on forward.

The line
Code:
c->Enabled()
is the semaphore that is set by calling start (and stop)

This is the thread that turns on and off the compressor (In C++, the Java version is very similar):
Code:
static void compressorChecker(Compressor *c)
{
         while (1)
         {
                 if (c->Enabled())
                 {
                        c->SetRelayValue( c->GetPressureSwitchValue() == 0 ? Relay::kOn : Relay::kOff );
                 }
                 else
                 {
                         c->SetRelayValue(Relay::kOff);
                }
                 Wait(0.5);
         }
}
This starts right after creating the compressor object.

You only need to call start once in the program.
__________________
FTC Team 72 - No site
FRC Team 399 - http://www.team399.org
2010 Rockwell Collins Innovation in Control Award - (Use of the CAN bus, among other reasons) Phoenix, Arizona!
Reply With Quote