How do I use interrupt in Java?

I’ve been spent i lot of time trying to figure out how to use interrupt in java for FRC, but i didnt find anywhere on the web.

I need to use a interrupt with encoder and another one by time, each 25ms, a interruption be called.

thanks

If you look that the DigitalInput class in WPILibJ, you will notice that it inherits the InterruptableSensorBase methods. You can use that to interrupt on inputs hooked to an encoder.

The real question is why you think you need interrupts at all. The Encoder class in WPILibJ accesses hardware quadrature decoders in the FPGA that remove the need for interrupts or timers. If you are using simple encoders, then you can use the Counter class in WPILibJ. Both of these classes will keep track of how far the encoder has gone and will tell you how fast it’s moving.

-Joe

And what about a Timer interrupt?

In Java the simplest thing to do is create a high priority thread that runs in a loop calling sleep (or WPILibj’s Timer.delay) for 25 ms.

You can also use the java.util.Timer class for more complex activities. scheduleAtFixedRate() may be something to look at.

The only problem is that when i call sleep, the software stops at all, so i cant move the robot while this.

Should i call inside the thread or not?

You should call it in a separate thread if it blocks the execution of code you don’t want blocked.

Perhaps you should take a step back and explain what it is that you are trying to accomplish instead of asking how to implement the solution that you’ve come up with. Chances are there is a better way to accomplish it.

-Joe

I’m trying to call a interrupt each 25ms, because i want to write my own PID control, and with this interrupt i’m acumulate the error to calc the integral.

someone here said me to use a thread, and i did it, a diferent class with with the thread, overwriting the run method. But when i try to call .sleep to wait each 25ms, it stops the intire robot.

Have you tried the built-in PID classes?

I think we would need to see the code you use to start the thread to know if you are actually running in a separate thread. Also, if you are calling out into C land, you will block the whole Java VM until you return (unless you are using the “BlockingFunction” class).