Continuously vary LED brightness between completely dark and fully lite.
Glowing.cpp@0:26c09c4aba81, 2010-12-29 (annotated)
- Committer:
- sitti
- Date:
- Wed Dec 29 03:32:39 2010 +0000
- Revision:
- 0:26c09c4aba81
- Child:
- 1:eef7593bdcc5
1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |