The library can flash an LED or DigitalOut pin at 50% duty using a Ticker interrupt triggered toggle function. This library does NOT use wait() so that it can flash a pin while more code is being executed. Instead, it relies on Ticker generated interrupts. There is only one parameter required, the on/off time of the pin in seconds (i.e. 0.5 means 0.5 seconds on and 0.5 seconds off).
ToggleFlash.h
- Committer:
- PennElectric
- Date:
- 2012-12-23
- Revision:
- 3:dbd7ab16f171
- Parent:
- 2:fddd1a6486bd
File content as of revision 3:dbd7ab16f171:
/* Copyright (c) <2012> <P. Patel>, MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, publish, distribute, * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // ----------------------------- LED Ticker Interrupt Flasher ----------------------------------- #ifndef TOGGLE #define TOGGLE #include "mbed.h" /** LED Toggle-Flashing (50% duty) library based on Ticker interrupts instead of wait * * Example * @code * Flasher myflasher(p20, 1.5); // A flasher object attached to pin 20 with 1.5 second timing * * int main() { * while (1) { * myflasher.enable(); // Turn on flasher * * wait(3); // More code, simulated by wait * myflasher.disableTo(1); // Hold pin high myflasher.setTime(2); // Set new timing wait(3); myflasher.enable(); // Resume flashing wait(3); myflasher = 0; // Hold pin low (shorthand for disableTo(int state)) * } * } * @endcode */ class ToggleFlash { public: /** Create a Flasherer object connected to a pin * @param pin The pin to which the Flasherer is attached */ ToggleFlash(PinName pin); /** Create a Flasherer object connected to a pin and set the on-off time * @param pin The pin to which the Flasherer is attached * @param time The specified on-off time in seconds */ ToggleFlash(PinName pin, float time); /** Set the on-off time ex. 1.5 means on for 1.5 seconds off for 1.5 seconds * @param time The specified on-off time in seconds */ void setTime(float time); /** Retrieve the current time setting of the flasher object * @returns The current on-off time of the Flasher object */ float getTime(); /** Enable the flasher to start toggling pin * */ void enable(); /** Disable the flasher and give the pin a constant state * @param state 1 or 0 for constant on or constant off */ void disableTo(int state); /** Return the current status of the flasher * @returns 1 or 0 for flasher enabled or flasher disabled */ int readFlasher(); /** Return the current state of the pin * @returns 1 or 0 for currently set high or low */ int read(); #ifdef MBED_OPERATORS /** An operator shorthand for disableTo(int state) to give the pin a constant state */ ToggleFlash& operator= (int state) { disableTo(state); return *this; } /** An operator shorthand for read() to read pin's current state */ operator int() { return read(); } #endif private: DigitalOut _pin; int _flasherState; float _time; Ticker _flasher; void toggle(); }; #endif