Make: Tokyo Meeting 06 (MTM06), standalone LED blinking demo (using PWM) Make: Tokyo Meeting 06 (MTM06)でNXPスタッフの胸(腹?)で光っていたmbed.このコードを使用していました

Dependencies:   mbed

Committer:
okano
Date:
Sun Nov 21 06:47:36 2010 +0000
Revision:
0:1060d9f7c8f7

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 0:1060d9f7c8f7 1 #include "mbed.h"
okano 0:1060d9f7c8f7 2
okano 0:1060d9f7c8f7 3 PwmOut led1(LED1);
okano 0:1060d9f7c8f7 4 PwmOut led2(LED2);
okano 0:1060d9f7c8f7 5 PwmOut led3(LED3);
okano 0:1060d9f7c8f7 6 PwmOut led4(LED4);
okano 0:1060d9f7c8f7 7
okano 0:1060d9f7c8f7 8 PwmOut led[ 4 ] = {led4, led3, led2, led1 };
okano 0:1060d9f7c8f7 9
okano 0:1060d9f7c8f7 10 #define UPDATE_RATE 100.0
okano 0:1060d9f7c8f7 11
okano 0:1060d9f7c8f7 12 class Blinker {
okano 0:1060d9f7c8f7 13 public:
okano 0:1060d9f7c8f7 14
okano 0:1060d9f7c8f7 15 typedef enum {
okano 0:1060d9f7c8f7 16 OFF,
okano 0:1060d9f7c8f7 17 ON,
okano 0:1060d9f7c8f7 18 STAY,
okano 0:1060d9f7c8f7 19 UP,
okano 0:1060d9f7c8f7 20 DOWN,
okano 0:1060d9f7c8f7 21 UPDOWN
okano 0:1060d9f7c8f7 22 } Mode;
okano 0:1060d9f7c8f7 23
okano 0:1060d9f7c8f7 24 Blinker( PinName pin ) :
okano 0:1060d9f7c8f7 25 output( pin ),
okano 0:1060d9f7c8f7 26 mode( UPDOWN ),
okano 0:1060d9f7c8f7 27 state( false ),
okano 0:1060d9f7c8f7 28 intensity( 0.0 ),
okano 0:1060d9f7c8f7 29 rate( 1.0 / UPDATE_RATE ),
okano 0:1060d9f7c8f7 30 direction( true ) {
okano 0:1060d9f7c8f7 31 t.attach( this, &Blinker::blinker_maintain, 1.0 / UPDATE_RATE );
okano 0:1060d9f7c8f7 32 output.period_ms( 1 );
okano 0:1060d9f7c8f7 33 output = intensity;
okano 0:1060d9f7c8f7 34 }
okano 0:1060d9f7c8f7 35
okano 0:1060d9f7c8f7 36 void start( void ) {
okano 0:1060d9f7c8f7 37 state = true;
okano 0:1060d9f7c8f7 38 }
okano 0:1060d9f7c8f7 39
okano 0:1060d9f7c8f7 40 void stop( void ) {
okano 0:1060d9f7c8f7 41 state = false;
okano 0:1060d9f7c8f7 42 }
okano 0:1060d9f7c8f7 43
okano 0:1060d9f7c8f7 44 void set_mode( Mode m ) {
okano 0:1060d9f7c8f7 45 mode = m;
okano 0:1060d9f7c8f7 46 }
okano 0:1060d9f7c8f7 47
okano 0:1060d9f7c8f7 48 void set_initial_intensity( float v ) {
okano 0:1060d9f7c8f7 49 intensity = v;
okano 0:1060d9f7c8f7 50 }
okano 0:1060d9f7c8f7 51
okano 0:1060d9f7c8f7 52 void set_frequency( float f ) {
okano 0:1060d9f7c8f7 53 rate = f / UPDATE_RATE;
okano 0:1060d9f7c8f7 54 }
okano 0:1060d9f7c8f7 55
okano 0:1060d9f7c8f7 56 private:
okano 0:1060d9f7c8f7 57 void blinker_maintain( void ) {
okano 0:1060d9f7c8f7 58
okano 0:1060d9f7c8f7 59 if ( OFF == state )
okano 0:1060d9f7c8f7 60 return;
okano 0:1060d9f7c8f7 61
okano 0:1060d9f7c8f7 62 switch ( mode ) {
okano 0:1060d9f7c8f7 63 case OFF :
okano 0:1060d9f7c8f7 64 intensity = 0.0;
okano 0:1060d9f7c8f7 65 break;
okano 0:1060d9f7c8f7 66 case ON :
okano 0:1060d9f7c8f7 67 intensity = 1.0;
okano 0:1060d9f7c8f7 68 break;
okano 0:1060d9f7c8f7 69 case STAY :
okano 0:1060d9f7c8f7 70 break;
okano 0:1060d9f7c8f7 71 case UP :
okano 0:1060d9f7c8f7 72 intensity += rate;
okano 0:1060d9f7c8f7 73 intensity = (1.0 < intensity) ? 0.0 : intensity;
okano 0:1060d9f7c8f7 74 break;
okano 0:1060d9f7c8f7 75 case DOWN :
okano 0:1060d9f7c8f7 76 intensity -= rate;
okano 0:1060d9f7c8f7 77 intensity = (intensity < 0.0) ? 1.0 : intensity;
okano 0:1060d9f7c8f7 78 break;
okano 0:1060d9f7c8f7 79 case UPDOWN :
okano 0:1060d9f7c8f7 80 direction = (intensity <= 0.0) ? true : direction;
okano 0:1060d9f7c8f7 81 direction = (1.0 <= intensity) ? false : direction;
okano 0:1060d9f7c8f7 82 intensity += direction ? (rate * 2.0) : -(rate * 2.0);
okano 0:1060d9f7c8f7 83 break;
okano 0:1060d9f7c8f7 84 default :
okano 0:1060d9f7c8f7 85 break;
okano 0:1060d9f7c8f7 86 }
okano 0:1060d9f7c8f7 87
okano 0:1060d9f7c8f7 88 output = intensity * intensity;
okano 0:1060d9f7c8f7 89 }
okano 0:1060d9f7c8f7 90
okano 0:1060d9f7c8f7 91 PwmOut output;
okano 0:1060d9f7c8f7 92 Ticker t;
okano 0:1060d9f7c8f7 93
okano 0:1060d9f7c8f7 94 Mode mode;
okano 0:1060d9f7c8f7 95 int state;
okano 0:1060d9f7c8f7 96 float intensity;
okano 0:1060d9f7c8f7 97 float rate;
okano 0:1060d9f7c8f7 98 float direction;
okano 0:1060d9f7c8f7 99 };
okano 0:1060d9f7c8f7 100
okano 0:1060d9f7c8f7 101 //Blinker b( LED1 );
okano 0:1060d9f7c8f7 102 Blinker b[ 4 ] = { LED4, LED3, LED2, LED1 };
okano 0:1060d9f7c8f7 103
okano 0:1060d9f7c8f7 104
okano 0:1060d9f7c8f7 105 int main() {
okano 0:1060d9f7c8f7 106
okano 0:1060d9f7c8f7 107
okano 0:1060d9f7c8f7 108 for ( int i = 0; i < 4; i++ ) {
okano 0:1060d9f7c8f7 109 b[ i ].set_frequency( 2 );
okano 0:1060d9f7c8f7 110 b[i].start();
okano 0:1060d9f7c8f7 111 }
okano 0:1060d9f7c8f7 112
okano 0:1060d9f7c8f7 113 while ( 1 ) {
okano 0:1060d9f7c8f7 114
okano 0:1060d9f7c8f7 115 for ( int i = 0; i < 4; i++ ) {
okano 0:1060d9f7c8f7 116 b[ i ].set_mode( Blinker::DOWN );
okano 0:1060d9f7c8f7 117 b[ i ].set_initial_intensity( 0.25 * (float)i );
okano 0:1060d9f7c8f7 118 }
okano 0:1060d9f7c8f7 119
okano 0:1060d9f7c8f7 120 wait( 2.0 );
okano 0:1060d9f7c8f7 121
okano 0:1060d9f7c8f7 122 for ( int n = 0; n < 40; n++ ) {
okano 0:1060d9f7c8f7 123 for ( int i = 0; i < 4; i++ ) {
okano 0:1060d9f7c8f7 124 b[ i ].set_mode( rand() & 0x1 ? Blinker::ON : Blinker::OFF );
okano 0:1060d9f7c8f7 125 }
okano 0:1060d9f7c8f7 126 wait( 0.05 );
okano 0:1060d9f7c8f7 127 }
okano 0:1060d9f7c8f7 128
okano 0:1060d9f7c8f7 129 for ( int i = 0; i < 4; i++ ) {
okano 0:1060d9f7c8f7 130 b[ i ].set_mode( Blinker::DOWN );
okano 0:1060d9f7c8f7 131 b[ i ].set_initial_intensity( 1.0 - (0.25 * (float)i) );
okano 0:1060d9f7c8f7 132 }
okano 0:1060d9f7c8f7 133
okano 0:1060d9f7c8f7 134 wait( 2.0 );
okano 0:1060d9f7c8f7 135
okano 0:1060d9f7c8f7 136 for ( int i = 0; i < 4; i++ ) {
okano 0:1060d9f7c8f7 137 b[ i ].set_mode( Blinker::UPDOWN );
okano 0:1060d9f7c8f7 138 b[ i ].set_initial_intensity( 0 );
okano 0:1060d9f7c8f7 139 }
okano 0:1060d9f7c8f7 140
okano 0:1060d9f7c8f7 141 wait( 2.0 );
okano 0:1060d9f7c8f7 142
okano 0:1060d9f7c8f7 143 for ( int i = 0; i < 4; i++ ) {
okano 0:1060d9f7c8f7 144 b[ i ].set_mode( Blinker::UPDOWN );
okano 0:1060d9f7c8f7 145 b[ i ].set_initial_intensity( (i & 0x1) ? 1 : 0 );
okano 0:1060d9f7c8f7 146 }
okano 0:1060d9f7c8f7 147
okano 0:1060d9f7c8f7 148 wait( 2.0 );
okano 0:1060d9f7c8f7 149
okano 0:1060d9f7c8f7 150 }
okano 0:1060d9f7c8f7 151
okano 0:1060d9f7c8f7 152 }