Sample code on how to pass an optional function pointer to a library and set a single pin to either InterruptIn or DigitalOut.
This code can be used as a template to create a library where a single pin can be set to either InterruptIn or DigitalOut.
There are 3 ways to instantiate the library (example using the KL25Z board):
// 2 parameters : Only SDA and SCL are declared. DemoClass sensor(PTE0, PTE1); // 3 parameters : SDA, SCL and a DigitalOut are declared. DemoClass sensor(PTE0, PTE1, PTD7); // SDA, SCL // 4 parameters : SDA, SCL, InterruptIn and a user function pointer are declared. DemoClass sensor(PTE0, PTE1, PTD7, &sensor_irq); // ISR mode
Notice that the 3rd pin declaration switches from DigitalOut to InterruptIn when the user function pointer is added.
Diff: main.cpp
- Revision:
- 0:0a6e921b085b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat May 03 16:15:38 2014 +0000 @@ -0,0 +1,23 @@ +#include "mbed.h" +#include "DemoClass.h" + +bool Overflow = 0; + +// Forward declaration of the user-ISR +void sensor_irq(void); + +// 3 possible constructor calls (current example uses KL25Z pins) +//DemoClass sensor(PTE0, PTE1); // Free running mode +//DemoClass sensor(PTE0, PTE1, PTD7); // Sync mode +DemoClass sensor(PTE0, PTE1, PTD7, &sensor_irq); // ISR mode + +void sensor_irq(void) +{ + Overflow = 1; +} + +int main() +{ + while(1) + if(Overflow) Overflow = 0; +}