Continuously vary LED brightness between completely dark and fully lite.

Committer:
sitti
Date:
Wed Dec 29 03:32:39 2010 +0000
Revision:
0:26c09c4aba81
Child:
1:eef7593bdcc5
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sitti 0:26c09c4aba81 1 #include "mbed.h"
sitti 0:26c09c4aba81 2 #include "math.h"
sitti 0:26c09c4aba81 3 #include "Glowing.h"
sitti 0:26c09c4aba81 4
sitti 0:26c09c4aba81 5 Glowing::Glowing(PinName pin, float period, int steps, int offset) {
sitti 0:26c09c4aba81 6 // Set the constants
sitti 0:26c09c4aba81 7 s_port = new PwmOut(pin);
sitti 0:26c09c4aba81 8 s_steps = steps;
sitti 0:26c09c4aba81 9 s_step_offset = offset;
sitti 0:26c09c4aba81 10 c_circle = 2*acos(-1.0); // 2 PI
sitti 0:26c09c4aba81 11 c_step_time = period/steps;
sitti 0:26c09c4aba81 12 c_step_gradient = c_circle/steps;
sitti 0:26c09c4aba81 13 s_running = false;
sitti 0:26c09c4aba81 14 }
sitti 0:26c09c4aba81 15
sitti 0:26c09c4aba81 16 Glowing::~Glowing() {
sitti 0:26c09c4aba81 17 Stop();
sitti 0:26c09c4aba81 18 }
sitti 0:26c09c4aba81 19
sitti 0:26c09c4aba81 20 int Glowing::scale(float x) {
sitti 0:26c09c4aba81 21 // Scaling the input value from [-1.0 - 1.0] to [0 - 1000]
sitti 0:26c09c4aba81 22 return (int)((x + 1.0)*1000/2);
sitti 0:26c09c4aba81 23 }
sitti 0:26c09c4aba81 24 void Glowing::next(void) {
sitti 0:26c09c4aba81 25 // Set the PWM value
sitti 0:26c09c4aba81 26 s_port->pulsewidth_us(s_next_v);
sitti 0:26c09c4aba81 27 // Calculate the next step and the corresponding PWM value
sitti 0:26c09c4aba81 28 s_next_n = (s_next_n + 1) % s_steps;
sitti 0:26c09c4aba81 29 s_next_v = scale(cos(s_next_n * c_step_gradient));
sitti 0:26c09c4aba81 30 }
sitti 0:26c09c4aba81 31
sitti 0:26c09c4aba81 32 void Glowing::Start(void) {
sitti 0:26c09c4aba81 33 s_port->period_ms(1);
sitti 0:26c09c4aba81 34 s_next_v = 0.0;
sitti 0:26c09c4aba81 35 s_next_n = s_steps/2 + s_step_offset;
sitti 0:26c09c4aba81 36 attach(this, &Glowing::next, c_step_time);
sitti 0:26c09c4aba81 37 s_running = true;
sitti 0:26c09c4aba81 38 }
sitti 0:26c09c4aba81 39
sitti 0:26c09c4aba81 40 void Glowing::Stop(void) {
sitti 0:26c09c4aba81 41 if (s_running) {
sitti 0:26c09c4aba81 42 detach();
sitti 0:26c09c4aba81 43 }
sitti 0:26c09c4aba81 44 }