simple sample code

Dependencies:   mbed

Committer:
okano
Date:
Mon Feb 03 06:40:03 2014 +0000
Revision:
0:359aaebee1d9
pam led sample

Who changed what in which revision?

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