First commit. Non blocking Led and Buzzer library

Dependents:   non_blocking_Led_Buzze_HelloWorld

Led.cpp

Committer:
tsungta
Date:
2016-11-21
Revision:
0:c18c119011ec

File content as of revision 0:c18c119011ec:

/******************** (C) COPYRIGHT 2016 Delta Electronics, Inc. ***************
*
* File Name : Led.cpp
* Authors   : Tsungta Wu - CPBG (tsungta.wu@deltaww.com)
* Version   : V.1.0.1
* Date      : 2016/Nov/14
*
*******************************************************************************/

#include "Led.h"
#include "mbed.h"

static uint8_t on_logic; 

using namespace mbed;
 
Led::Led(PinName pin, uint8_t On_Logic) : _led(pin) {
    on_logic = On_Logic;
    _led = !on_logic;//turn off when init

}

static float Int;
static uint8_t* Toggle;
static uint16_t Num;
static uint16_t toggle_cnt;

 /**turn off led instantaneous 
  * usually not used 
  */
  
void Led::offLed() {
     _led = !on_logic;
     toggle_cnt = Num;
}

/** Turn on led with given duration.
 * @param time - the duration of the tone in seconds
 */
     
void Led::simpleBlink(float time) {
    _led = on_logic;
    tnext.attach(this,&Led::offLed, time);   // time to off
}
  
void Led::nextToggle() {
    if (++toggle_cnt < Num) {
      if (Toggle[toggle_cnt] > 0)    
        _led = on_logic;
      else
        _led = !on_logic;  
      tnext.attach(this,&Led::nextToggle, Int);   // time to off
    } else offLed();
}

void Led::toggleLed (uint8_t* toggle_on_off, uint16_t toggle_num, float tonggle_time) {
    offLed();
    
    Int = tonggle_time;  
    Num = toggle_num;
    Toggle = toggle_on_off;
    
    toggle_cnt = 0;
    if (on_logic)
        _led = Toggle[toggle_cnt];
    else
        _led = !Toggle[toggle_cnt];  
    tnext.attach(this,&Led::nextToggle, Int);   // time to off    
}