PWM LED brightness control for the 4 onboard LEDS. Each LED fades in and out at a differetnr rate/.
main.cpp@0:dae51f35ea20, 2010-12-20 (annotated)
- Committer:
- neilp
- Date:
- Mon Dec 20 22:30:17 2010 +0000
- Revision:
- 0:dae51f35ea20
Who changed what in which revision?
User | Revision | Line number | New 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 |