simple sample code

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
okano
Date:
Mon Feb 03 06:40:03 2014 +0000
Commit message:
pam led sample

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 359aaebee1d9 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Feb 03 06:40:03 2014 +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 359aaebee1d9 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Feb 03 06:40:03 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f
\ No newline at end of file