Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of digitalInInterrupt_sample by
main.cpp@1:13e0c1956b54, 2017-01-23 (annotated)
- Committer:
- WilliamMarshQMUL
- Date:
- Mon Jan 23 17:26:17 2017 +0000
- Revision:
- 1:13e0c1956b54
- Parent:
- 0:a66a8cb0012c
- Child:
- 2:071f22412cdc
lab2 sample 2
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| WilliamMarshQMUL | 0:a66a8cb0012c | 1 | #include "mbed.h" |
| WilliamMarshQMUL | 0:a66a8cb0012c | 2 | #include "rtos.h" |
| WilliamMarshQMUL | 0:a66a8cb0012c | 3 | |
| WilliamMarshQMUL | 1:13e0c1956b54 | 4 | // Labs 2: Example program for using an interrupt (or callback) |
| WilliamMarshQMUL | 1:13e0c1956b54 | 5 | // ----------------------------------------------------------- |
| WilliamMarshQMUL | 1:13e0c1956b54 | 6 | // A callback function (corresponding to an ISR) is called when a button |
| WilliamMarshQMUL | 1:13e0c1956b54 | 7 | // is pressed |
| WilliamMarshQMUL | 1:13e0c1956b54 | 8 | // The callback uses a shared variable to signal another thread |
| WilliamMarshQMUL | 0:a66a8cb0012c | 9 | |
| WilliamMarshQMUL | 1:13e0c1956b54 | 10 | InterruptIn button(PTD0); |
| WilliamMarshQMUL | 0:a66a8cb0012c | 11 | DigitalOut led(LED_RED); |
| WilliamMarshQMUL | 0:a66a8cb0012c | 12 | |
| WilliamMarshQMUL | 1:13e0c1956b54 | 13 | Thread flashT ; |
| WilliamMarshQMUL | 1:13e0c1956b54 | 14 | volatile int pressEvent = 0 ; |
| WilliamMarshQMUL | 0:a66a8cb0012c | 15 | |
| WilliamMarshQMUL | 1:13e0c1956b54 | 16 | // Signal when the button is pressed |
| WilliamMarshQMUL | 1:13e0c1956b54 | 17 | // Note: bounce may occur |
| WilliamMarshQMUL | 1:13e0c1956b54 | 18 | void buttonCallback(){ |
| WilliamMarshQMUL | 1:13e0c1956b54 | 19 | pressEvent = 1 ; |
| WilliamMarshQMUL | 0:a66a8cb0012c | 20 | } |
| WilliamMarshQMUL | 0:a66a8cb0012c | 21 | |
| WilliamMarshQMUL | 0:a66a8cb0012c | 22 | // Toggle the LED every time the button is pressed |
| WilliamMarshQMUL | 1:13e0c1956b54 | 23 | // Note: the LED could be toggled in the callback |
| WilliamMarshQMUL | 0:a66a8cb0012c | 24 | void flash() { |
| WilliamMarshQMUL | 0:a66a8cb0012c | 25 | while(true) { |
| WilliamMarshQMUL | 0:a66a8cb0012c | 26 | if (pressEvent) { |
| WilliamMarshQMUL | 0:a66a8cb0012c | 27 | led = !led ; |
| WilliamMarshQMUL | 1:13e0c1956b54 | 28 | pressEvent = 0 ; // Clear the event variable |
| WilliamMarshQMUL | 0:a66a8cb0012c | 29 | } |
| WilliamMarshQMUL | 0:a66a8cb0012c | 30 | Thread::wait(100) ; |
| WilliamMarshQMUL | 0:a66a8cb0012c | 31 | } |
| WilliamMarshQMUL | 0:a66a8cb0012c | 32 | } |
| WilliamMarshQMUL | 0:a66a8cb0012c | 33 | |
| WilliamMarshQMUL | 0:a66a8cb0012c | 34 | int main() { |
| WilliamMarshQMUL | 1:13e0c1956b54 | 35 | button.mode(PullUp); // Ensure button i/p has pull up |
| WilliamMarshQMUL | 1:13e0c1956b54 | 36 | button.rise(&buttonCallback) ; // Attach function to rise event |
| WilliamMarshQMUL | 1:13e0c1956b54 | 37 | |
| WilliamMarshQMUL | 1:13e0c1956b54 | 38 | flashT.start(&flash) ; // Start the flashing thread running |
| WilliamMarshQMUL | 0:a66a8cb0012c | 39 | } |
