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 Task326 by
main.cpp
- Committer:
- noutram
- Date:
- 2019-09-12
- Revision:
- 2:a5a574cd9474
- Parent:
- 0:57de85b71119
File content as of revision 2:a5a574cd9474:
#include "mbed.h"
#ifdef TARGET_NUCLEO_F429ZI
//Uncomment the following line to use onboard LEDs and Switch (F429ZI only)
//#define USEONBOARD
#endif
//A slight improvement - however, the pressing of the switch still registers
//spurious falling edges!
void sw1TimeOutHandler();
void sw1FallingEdge();
#define EDGE_RISEN 1
#define EDGE_FALLEN 0
//Global Objects
#ifdef USEONBOARD
DigitalOut red_led(LED3);
DigitalOut green_led(LED1);
InterruptIn sw1(USER_BUTTON);
#else
DigitalOut red_led(D7);
DigitalOut green_led(D5);
InterruptIn sw1(D4);
#endif
Timeout sw1TimeOut; //Used to prevent switch bounce
bool timerFired = false;
bool switchPressed = false;
//Interrupt service routine for handling the timeout
void sw1TimeOutHandler() {
timerFired = true;
sw1TimeOut.detach(); //Stop the timeout counter firing
sw1.fall(&sw1FallingEdge); //Now wait for a falling edge
}
//Interrupt service routive for SW1 falling edge (release)
void sw1FallingEdge() {
switchPressed = true;
sw1.fall(NULL); //Disable this interrupt
red_led = !red_led; //Toggle LED
sw1TimeOut.attach(&sw1TimeOutHandler, 0.2); //Start timeout counter
}
//Main - only has to initialise and sleep
int main() {
//Initial state
red_led = 0; //Set RED LED to OFF
green_led = 1;
//Configure interrupts, wait for first rising edge
sw1.fall(&sw1FallingEdge);
//Main Polling Loop
while (true) {
//Put CPU back to sleep
sleep();
//You can ONLY reach this point if an ISR wakes the CPU - now there are two
if (timerFired == true) {
timerFired = false; //Reset flag
}
if (switchPressed == true) {
switchPressed = false; //Reset flag
green_led = !green_led;
}
} //end while
}
