Provides an extended version of DigitalOut that adds a "toggle()" function, and uses the RTOS Thread API to provide a "flash()" function that toggles the pin in the background at a given interval.
Example of use:
#include "mbed.h" #include "rtos.h" /* NOTE: Requires the RTOS library or a matching API */ #include "DigitalOutEx.h" DigitalOutEx led1(LED1); DigitalOutEx led2(LED2); int main() { led1.flash(200); led2.flash(500); Thread::wait(5000); led1.flash(50); Thread::wait(5000); led1 = 0; Thread::wait(5000); led1.flash(1000); while (1) { } }
DigitalOutEx.h
- Committer:
- Byrn
- Date:
- 2013-04-26
- Revision:
- 1:6f8ca7b70778
- Parent:
- 0:1798e1bf583a
File content as of revision 1:6f8ca7b70778:
#ifndef __DIGITALOUTEX_H__ #define __DIGITALOUTEX_H__ #include "mbed.h" #include "rtos.h" /** DigitalOutEx * * This class provides an extended version of DigitalOut that * adds a toggle() function, and uses the RTOS Thread API to * provide flashing services. */ class DigitalOutEx : public DigitalOut { public: /** Construct a new DigitalOutEx object. * @param pin The pin to control, e.g. LED1. */ DigitalOutEx(PinName pin); /** Set the state of the pin. * @param value The state to write; 0 or 1. */ void write(int value); /** Toggle the state of the pin. */ void toggle() { write(!read()); } /** Start 'flashing' the pin. * This will toggle the state of the pin at the given * interval. To stop flashing, simply set the state * of the pin. Flashing is performed in an RTOS Thread. * @param intervalMs The interval to flash in milliseconds. */ void flash(int intervalMs = 200); /** Return 1 if the pin is currently being 'flashed' * (toggled). */ int is_flashing() { return _flashing; } /** Stop the pin from 'flashing' if it is currently doing so. * The pin will be left in its current state (can be * determined with read()). */ void stop_flashing(); /** Set the state of the pin. Shorthand for write(). * @param value The state to write; 0 or 1. */ DigitalOutEx &operator=(int value); protected: Thread *_flashThread; int _flashing; int _flashInterval; static void _flash_thread(const void *argument); }; #endif