Balazs Szalai / Mbed 2 deprecated 4led-dim2

Dependencies:   mbed

Committer:
szalabala
Date:
Fri Apr 01 00:48:37 2011 +0000
Revision:
0:e90fdaaa28ef

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
szalabala 0:e90fdaaa28ef 1 // dimmed kitt LED blinking
szalabala 0:e90fdaaa28ef 2 // the question was how to enable dimming on multiple digital led the same time.
szalabala 0:e90fdaaa28ef 3 // it could be done simpler with math/sin, yet it I found it more fun
szalabala 0:e90fdaaa28ef 4 #include "mbed.h"
szalabala 0:e90fdaaa28ef 5
szalabala 0:e90fdaaa28ef 6 DigitalOut led[4] = { LED1, LED2, LED3, LED4 };
szalabala 0:e90fdaaa28ef 7 int dim[4] = { 1, 1, 1, 1 }; // 1:always on N: darker, I use 1..100
szalabala 0:e90fdaaa28ef 8
szalabala 0:e90fdaaa28ef 9 void Dim( ) {
szalabala 0:e90fdaaa28ef 10 for (long int i=0; i < 10000; ++i) { // repeat a few times just to slow down
szalabala 0:e90fdaaa28ef 11 for (int i2=0; i2<4; ++i2) {
szalabala 0:e90fdaaa28ef 12 led[i2] = (((i%dim[i2])==0) ? 1 : 0);
szalabala 0:e90fdaaa28ef 13 }
szalabala 0:e90fdaaa28ef 14 }
szalabala 0:e90fdaaa28ef 15 }
szalabala 0:e90fdaaa28ef 16
szalabala 0:e90fdaaa28ef 17 void Update1( int i ) { // i:1..99
szalabala 0:e90fdaaa28ef 18 dim[0] = i;
szalabala 0:e90fdaaa28ef 19 dim[1] = (i-33)%200 + 1;
szalabala 0:e90fdaaa28ef 20 dim[2] = (i-66)%200 + 1;
szalabala 0:e90fdaaa28ef 21 dim[3] = i-100; // could be (i-100)%200 + 1;
szalabala 0:e90fdaaa28ef 22 }
szalabala 0:e90fdaaa28ef 23
szalabala 0:e90fdaaa28ef 24 void Update2( int i ) { // i:1..99
szalabala 0:e90fdaaa28ef 25 dim[0] = 100-i;
szalabala 0:e90fdaaa28ef 26 dim[1] = (i-66)%200 + 1;
szalabala 0:e90fdaaa28ef 27 dim[2] = (i-33)%200 + 1;
szalabala 0:e90fdaaa28ef 28 dim[3] = i;
szalabala 0:e90fdaaa28ef 29 }
szalabala 0:e90fdaaa28ef 30
szalabala 0:e90fdaaa28ef 31 /* phase-shift the LED dimming 1..100 positive, 101..199 going back
szalabala 0:e90fdaaa28ef 32 that work, but the above is easier to understand
szalabala 0:e90fdaaa28ef 33 int Rate( int i ) { // calculate dim rate, convert 1..200 to 1..100..1
szalabala 0:e90fdaaa28ef 34 return (i<100) ? i : (200-i);
szalabala 0:e90fdaaa28ef 35 }
szalabala 0:e90fdaaa28ef 36 void Update( int i ) {
szalabala 0:e90fdaaa28ef 37 dim[0] = Rate( i%200 + 1 );
szalabala 0:e90fdaaa28ef 38 dim[1] = Rate( (i+(i<100?-33:33))%200 + 1);
szalabala 0:e90fdaaa28ef 39 dim[2] = Rate( (i+(i<100?-66:66))%200 + 1);
szalabala 0:e90fdaaa28ef 40 dim[3] = Rate( (i+100)%200 + 1);
szalabala 0:e90fdaaa28ef 41 }
szalabala 0:e90fdaaa28ef 42 */
szalabala 0:e90fdaaa28ef 43
szalabala 0:e90fdaaa28ef 44 int main() {
szalabala 0:e90fdaaa28ef 45 while(1) {
szalabala 0:e90fdaaa28ef 46 for (int i = 1; i <100; ++i ) // to
szalabala 0:e90fdaaa28ef 47 {
szalabala 0:e90fdaaa28ef 48 Update1( i );
szalabala 0:e90fdaaa28ef 49 Dim( );
szalabala 0:e90fdaaa28ef 50 }
szalabala 0:e90fdaaa28ef 51 for (long int i = 1; i <100; ++i ) // and back
szalabala 0:e90fdaaa28ef 52 {
szalabala 0:e90fdaaa28ef 53 Update2( i );
szalabala 0:e90fdaaa28ef 54 Dim( );
szalabala 0:e90fdaaa28ef 55 }
szalabala 0:e90fdaaa28ef 56 }
szalabala 0:e90fdaaa28ef 57 }