For CQ LPC1U35 board. Multitask scheduler demo project.,arduino,due,compatible

Dependencies:   Scheduler mbed

Fork of scheduler-demo by mi mi

led_tsk.cpp

Committer:
mimi3
Date:
2014-03-07
Revision:
2:6b3e85379edd
Parent:
1:48a906a94c32

File content as of revision 2:6b3e85379edd:

/*
#
# Copyright (C) 2010-2014, audin
# 2014/02: Modify for mbed for CQ LPC11U35
# 2013/08: Modify for mbed for LPC1114FN28
# 2013/07: Modify for LPCOpen Platform.
# 2011/04, 2012/11
# 2010/11
# http://avr.paslog.jp
# This file is licensed under the MIT License.
#
*/

#include "mbed.h"
#include "led_tsk.h"
#include "Scheduler.h"


/* for CQ ,lpc11u35 */
DigitalOut led1(P0_20);
DigitalOut led2(P0_21);

#define led1_on()		led1=0	/*  Negative on */
#define led1_off()		led1=1
#define led2_on()		led2=0	/*  Negative on */
#define led2_off()		led2=1

/*******************

* Fake PWM class

 *******************/
static void pwm_elm( int ms, int max_ms, DigitalOut *led )
{
    *led=0; 			// negative on
    taskWait( ms );
    *led=1;
    taskWait( max_ms - ms);
}

class pwm_fake_t
{
    int max_val, val, MIN_VAL, dir, speed;
    DigitalOut *led;
public:
    pwm_fake_t(DigitalOut *_led, int _speed) {
        max_val = speed = _speed;
        val = MIN_VAL = 0;
        dir =1;
        led = _led;
    }
    void run() {
        if( ( val >= max_val) || ( val <= MIN_VAL) ) {
            max_val = speed;//sio_get_led_blink_speed() + 3 ;	// change period
            max_val <<= 1;								// adjust time
            if( val <= MIN_VAL ) {
                dir = 1;
                taskWait( 1000 );							// wait 1src if led off
            } else {
                dir = -1;
                val = max_val;
            }
        }
        val += dir;
        pwm_elm( val, max_val, led );
    }
};

/*******************

* LED1 task

 *******************/
void led1_task( void )
{
    led1_off();
    pwm_fake_t pwm_led( &led1, 10+3);
    while( 1 ) {
        pwm_led.run();
    }
}

/*******************

* LED2 task

 *******************/
void led2_task( void )
{
    led2_off();
    taskWait( 666 );
    pwm_fake_t pwm_led( &led2, 6+3);
    while( 1 ) {
        pwm_led.run();
    }
}