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.
main.cpp@6:52f9ba83203c, 2020-01-24 (annotated)
- Committer:
- eencae
- Date:
- Fri Jan 24 12:07:07 2020 +0000
- Revision:
- 6:52f9ba83203c
- Parent:
- 5:d5bdf787ae1a
Updated for Gamepad2;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| eencae | 0:185ac7c21810 | 1 | /* |
| eencae | 0:185ac7c21810 | 2 | |
| eencae | 0:185ac7c21810 | 3 | 2645_InterruptIn |
| eencae | 0:185ac7c21810 | 4 | |
| eencae | 5:d5bdf787ae1a | 5 | Sample code from ELEC2645 |
| eencae | 1:58d6707580cb | 6 | |
| eencae | 1:58d6707580cb | 7 | Demonstrates how to use InterruptIn to generate an event-triggered interrupt |
| eencae | 0:185ac7c21810 | 8 | |
| eencae | 0:185ac7c21810 | 9 | (c) Craig A. Evans, University of Leeds, Jan 2016 |
| eencae | 6:52f9ba83203c | 10 | Updated January 2020 |
| eencae | 0:185ac7c21810 | 11 | |
| eencae | 0:185ac7c21810 | 12 | */ |
| eencae | 0:185ac7c21810 | 13 | |
| eencae | 0:185ac7c21810 | 14 | #include "mbed.h" |
| eencae | 0:185ac7c21810 | 15 | |
| eencae | 6:52f9ba83203c | 16 | // Create objects for button and LED |
| eencae | 6:52f9ba83203c | 17 | InterruptIn buttonA(PTC7); |
| eencae | 6:52f9ba83203c | 18 | DigitalOut led1(PTA2); |
| eencae | 0:185ac7c21810 | 19 | |
| eencae | 0:185ac7c21810 | 20 | // flag - must be volatile as changes within ISR |
| eencae | 2:20e71c579204 | 21 | // g_ prefix makes it easier to distinguish it as global |
| eencae | 6:52f9ba83203c | 22 | volatile int g_buttonA_flag = 0; |
| eencae | 0:185ac7c21810 | 23 | |
| eencae | 0:185ac7c21810 | 24 | // function prototypes |
| eencae | 6:52f9ba83203c | 25 | void buttonA_isr(); |
| eencae | 0:185ac7c21810 | 26 | |
| eencae | 0:185ac7c21810 | 27 | int main() |
| eencae | 0:185ac7c21810 | 28 | { |
| eencae | 6:52f9ba83203c | 29 | buttonA.mode(PullUp); // turn on internal pull-up resistor |
| eencae | 6:52f9ba83203c | 30 | // pin will be 1 (3.3 V) when not pressed and 0 (0 V) when pressed |
| eencae | 6:52f9ba83203c | 31 | |
| eencae | 6:52f9ba83203c | 32 | // We therefore need to look for a falling edge on the pin to fire the interrupt |
| eencae | 6:52f9ba83203c | 33 | // when the button is pressed |
| eencae | 6:52f9ba83203c | 34 | buttonA.fall(&buttonA_isr); |
| eencae | 6:52f9ba83203c | 35 | |
| eencae | 6:52f9ba83203c | 36 | // the LED is a common anode - writing a 1 to the pin will turn the LED OFF |
| eencae | 6:52f9ba83203c | 37 | led1 = 1; |
| eencae | 0:185ac7c21810 | 38 | |
| eencae | 0:185ac7c21810 | 39 | while (1) { |
| eencae | 0:185ac7c21810 | 40 | |
| eencae | 0:185ac7c21810 | 41 | // check if flag i.e. interrupt has occured |
| eencae | 6:52f9ba83203c | 42 | if (g_buttonA_flag) { |
| eencae | 6:52f9ba83203c | 43 | g_buttonA_flag = 0; // if it has, clear the flag |
| eencae | 0:185ac7c21810 | 44 | |
| eencae | 4:879718bd3126 | 45 | // send message over serial port - can observe in CoolTerm etc. |
| eencae | 4:879718bd3126 | 46 | printf("Execute task \n"); |
| eencae | 6:52f9ba83203c | 47 | |
| eencae | 6:52f9ba83203c | 48 | led1 = !led1; // toggle LED |
| eencae | 0:185ac7c21810 | 49 | } |
| eencae | 0:185ac7c21810 | 50 | |
| eencae | 0:185ac7c21810 | 51 | // put the MCU to sleep until an interrupt wakes it up |
| eencae | 0:185ac7c21810 | 52 | sleep(); |
| eencae | 0:185ac7c21810 | 53 | |
| eencae | 0:185ac7c21810 | 54 | } |
| eencae | 0:185ac7c21810 | 55 | } |
| eencae | 0:185ac7c21810 | 56 | |
| eencae | 6:52f9ba83203c | 57 | // Button A event-triggered interrupt |
| eencae | 6:52f9ba83203c | 58 | void buttonA_isr() |
| eencae | 0:185ac7c21810 | 59 | { |
| eencae | 6:52f9ba83203c | 60 | g_buttonA_flag = 1; // set flag in ISR |
| eencae | 0:185ac7c21810 | 61 | } |