
Make: Tokyo Meeting 06 (MTM06), standalone LED blinking demo (using PWM) Make: Tokyo Meeting 06 (MTM06)でNXPスタッフの胸(腹?)で光っていたmbed.このコードを使用していました
Revision 0:1060d9f7c8f7, committed 2010-11-21
- Comitter:
- okano
- Date:
- Sun Nov 21 06:47:36 2010 +0000
- Commit message:
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 1060d9f7c8f7 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Nov 21 06:47:36 2010 +0000 @@ -0,0 +1,152 @@ +#include "mbed.h" + +PwmOut led1(LED1); +PwmOut led2(LED2); +PwmOut led3(LED3); +PwmOut led4(LED4); + +PwmOut led[ 4 ] = {led4, led3, led2, led1 }; + +#define UPDATE_RATE 100.0 + +class Blinker { +public: + + typedef enum { + OFF, + ON, + STAY, + UP, + DOWN, + UPDOWN + } Mode; + + Blinker( PinName pin ) : + output( pin ), + mode( UPDOWN ), + state( false ), + intensity( 0.0 ), + rate( 1.0 / UPDATE_RATE ), + direction( true ) { + t.attach( this, &Blinker::blinker_maintain, 1.0 / UPDATE_RATE ); + output.period_ms( 1 ); + output = intensity; + } + + void start( void ) { + state = true; + } + + void stop( void ) { + state = false; + } + + void set_mode( Mode m ) { + mode = m; + } + + void set_initial_intensity( float v ) { + intensity = v; + } + + void set_frequency( float f ) { + rate = f / UPDATE_RATE; + } + +private: + void blinker_maintain( void ) { + + if ( OFF == state ) + return; + + switch ( mode ) { + case OFF : + intensity = 0.0; + break; + case ON : + intensity = 1.0; + break; + case STAY : + break; + case UP : + intensity += rate; + intensity = (1.0 < intensity) ? 0.0 : intensity; + break; + case DOWN : + intensity -= rate; + intensity = (intensity < 0.0) ? 1.0 : intensity; + break; + case UPDOWN : + direction = (intensity <= 0.0) ? true : direction; + direction = (1.0 <= intensity) ? false : direction; + intensity += direction ? (rate * 2.0) : -(rate * 2.0); + break; + default : + break; + } + + output = intensity * intensity; + } + + PwmOut output; + Ticker t; + + Mode mode; + int state; + float intensity; + float rate; + float direction; +}; + +//Blinker b( LED1 ); +Blinker b[ 4 ] = { LED4, LED3, LED2, LED1 }; + + +int main() { + + + for ( int i = 0; i < 4; i++ ) { + b[ i ].set_frequency( 2 ); + b[i].start(); + } + + while ( 1 ) { + + for ( int i = 0; i < 4; i++ ) { + b[ i ].set_mode( Blinker::DOWN ); + b[ i ].set_initial_intensity( 0.25 * (float)i ); + } + + wait( 2.0 ); + + for ( int n = 0; n < 40; n++ ) { + for ( int i = 0; i < 4; i++ ) { + b[ i ].set_mode( rand() & 0x1 ? Blinker::ON : Blinker::OFF ); + } + wait( 0.05 ); + } + + for ( int i = 0; i < 4; i++ ) { + b[ i ].set_mode( Blinker::DOWN ); + b[ i ].set_initial_intensity( 1.0 - (0.25 * (float)i) ); + } + + wait( 2.0 ); + + for ( int i = 0; i < 4; i++ ) { + b[ i ].set_mode( Blinker::UPDOWN ); + b[ i ].set_initial_intensity( 0 ); + } + + wait( 2.0 ); + + for ( int i = 0; i < 4; i++ ) { + b[ i ].set_mode( Blinker::UPDOWN ); + b[ i ].set_initial_intensity( (i & 0x1) ? 1 : 0 ); + } + + wait( 2.0 ); + + } + +}
diff -r 000000000000 -r 1060d9f7c8f7 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Nov 21 06:47:36 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e