Processor Interrupts with Arduino
What Are the Advantages?
At this point you might wonder, "Why use an interrupt at all? Why not just occasionally use a
digitalRead() on pin 2 to check its status? Won't that do the same thing?"
The answer depends on the situation. If you only cared what the status of the pin was at a certain point in your code or time frame, then a
digitalRead() will probably suffice. If you wanted to continuously monitor the pin, you could poll the pin frequently with
digitalRead()'s. However, you could easily miss data between reads. This missed information could be vital in many real time systems. Not to mention, the more often you're polling for data, the more processor time that is being wasted doing that rather than executing useful code.
Let's look at the system that monitors and controls the anti-lock braking of a car as a critical timing example. If a sensor detects the car starting to lose traction, you really don't care about what part of program is currently being executed, because something needs to be done about this situation immediately to assure the car retains traction and hopefully avoids an accident or worse. If you were just polling the sensor in this situation, the sensor may be polled too late and the event could be missed entirely. The beauty of interrupts is that they can prompt execution immediately, when it's necessary.