PWM LED brightness control for the 4 onboard LEDS. Each LED fades in and out at a differetnr rate/.

main.cpp

Committer:
neilp
Date:
2010-12-20
Revision:
0:dae51f35ea20

File content as of revision 0:dae51f35ea20:

#include "mbed.h"

// Use a simple PWM program to fade the 4 on-board LEDs
//  - Each LED fades on and off at different rates
//  - Uses on-board LEDs only, no external HW or PWM hardware required
//  - LED brightness is a factor of the duty cycle, i.e. how long the LED
//    is turned on during a given loop

// Setup the LED outputs and assign variables
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

int pwmloop = 0 ;         // loop counter from 0 to 255 and repeat
int led_value[4];        // array of led brightness
int led_change[4];        // array of led brightness change values

int i;                    // loop variable

int main() {
    led_value[0] = 3;    // init counter value
    led_value[1] = 5;
    led_value[2] = 7;
    led_value[3] = 9;

    led_change[0] = 5;    // set rate of led brightness change per led
    led_change[1] = 6;
    led_change[2] = 7;
    led_change[3] = 8;
            
    while(1) {
        
        for (pwmloop = 0; pwmloop < 256; pwmloop++) {
            // Drive LEDs, turned on when less than pwnloop, 0 = full off, 255 = full on
            if (led_value[0] < pwmloop) { led1 = 1; } else { led1 = 0; }
            if (led_value[1] < pwmloop) { led2 = 1; } else { led2 = 0; }
            if (led_value[2] < pwmloop) { led3 = 1; } else { led3 = 0; }
            if (led_value[3] < pwmloop) { led4 = 1; } else { led4 = 0; }

            // short wait - control over light fading speed, experiment with larger
            //              delays to show how the PWM is working.
            wait_us(20);
        }

        // Update LED brightness value at the end of the pwm loop
        for (i = 0; i<4; i++) {
            led_value[i] += led_change[i];
            
            // check range is withing 0 to 255, if not change direction
            if (led_value[i] > 255) {
                led_change[i] = -led_change[i];
            }
            if (led_value[i] < 0) {
                led_change[i] = -led_change[i];
            }            
        }
    }
}