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

Committer:
neilp
Date:
Mon Dec 20 22:30:17 2010 +0000
Revision:
0:dae51f35ea20

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
neilp 0:dae51f35ea20 1 #include "mbed.h"
neilp 0:dae51f35ea20 2
neilp 0:dae51f35ea20 3 // Use a simple PWM program to fade the 4 on-board LEDs
neilp 0:dae51f35ea20 4 // - Each LED fades on and off at different rates
neilp 0:dae51f35ea20 5 // - Uses on-board LEDs only, no external HW or PWM hardware required
neilp 0:dae51f35ea20 6 // - LED brightness is a factor of the duty cycle, i.e. how long the LED
neilp 0:dae51f35ea20 7 // is turned on during a given loop
neilp 0:dae51f35ea20 8
neilp 0:dae51f35ea20 9 // Setup the LED outputs and assign variables
neilp 0:dae51f35ea20 10 DigitalOut led1(LED1);
neilp 0:dae51f35ea20 11 DigitalOut led2(LED2);
neilp 0:dae51f35ea20 12 DigitalOut led3(LED3);
neilp 0:dae51f35ea20 13 DigitalOut led4(LED4);
neilp 0:dae51f35ea20 14
neilp 0:dae51f35ea20 15 int pwmloop = 0 ; // loop counter from 0 to 255 and repeat
neilp 0:dae51f35ea20 16 int led_value[4]; // array of led brightness
neilp 0:dae51f35ea20 17 int led_change[4]; // array of led brightness change values
neilp 0:dae51f35ea20 18
neilp 0:dae51f35ea20 19 int i; // loop variable
neilp 0:dae51f35ea20 20
neilp 0:dae51f35ea20 21 int main() {
neilp 0:dae51f35ea20 22 led_value[0] = 3; // init counter value
neilp 0:dae51f35ea20 23 led_value[1] = 5;
neilp 0:dae51f35ea20 24 led_value[2] = 7;
neilp 0:dae51f35ea20 25 led_value[3] = 9;
neilp 0:dae51f35ea20 26
neilp 0:dae51f35ea20 27 led_change[0] = 5; // set rate of led brightness change per led
neilp 0:dae51f35ea20 28 led_change[1] = 6;
neilp 0:dae51f35ea20 29 led_change[2] = 7;
neilp 0:dae51f35ea20 30 led_change[3] = 8;
neilp 0:dae51f35ea20 31
neilp 0:dae51f35ea20 32 while(1) {
neilp 0:dae51f35ea20 33
neilp 0:dae51f35ea20 34 for (pwmloop = 0; pwmloop < 256; pwmloop++) {
neilp 0:dae51f35ea20 35 // Drive LEDs, turned on when less than pwnloop, 0 = full off, 255 = full on
neilp 0:dae51f35ea20 36 if (led_value[0] < pwmloop) { led1 = 1; } else { led1 = 0; }
neilp 0:dae51f35ea20 37 if (led_value[1] < pwmloop) { led2 = 1; } else { led2 = 0; }
neilp 0:dae51f35ea20 38 if (led_value[2] < pwmloop) { led3 = 1; } else { led3 = 0; }
neilp 0:dae51f35ea20 39 if (led_value[3] < pwmloop) { led4 = 1; } else { led4 = 0; }
neilp 0:dae51f35ea20 40
neilp 0:dae51f35ea20 41 // short wait - control over light fading speed, experiment with larger
neilp 0:dae51f35ea20 42 // delays to show how the PWM is working.
neilp 0:dae51f35ea20 43 wait_us(20);
neilp 0:dae51f35ea20 44 }
neilp 0:dae51f35ea20 45
neilp 0:dae51f35ea20 46 // Update LED brightness value at the end of the pwm loop
neilp 0:dae51f35ea20 47 for (i = 0; i<4; i++) {
neilp 0:dae51f35ea20 48 led_value[i] += led_change[i];
neilp 0:dae51f35ea20 49
neilp 0:dae51f35ea20 50 // check range is withing 0 to 255, if not change direction
neilp 0:dae51f35ea20 51 if (led_value[i] > 255) {
neilp 0:dae51f35ea20 52 led_change[i] = -led_change[i];
neilp 0:dae51f35ea20 53 }
neilp 0:dae51f35ea20 54 if (led_value[i] < 0) {
neilp 0:dae51f35ea20 55 led_change[i] = -led_change[i];
neilp 0:dae51f35ea20 56 }
neilp 0:dae51f35ea20 57 }
neilp 0:dae51f35ea20 58 }
neilp 0:dae51f35ea20 59 }
neilp 0:dae51f35ea20 60