Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:d5bbef547b76, 2019-11-14 (annotated)
- Committer:
- malyuskin
- Date:
- Thu Nov 14 22:01:13 2019 +0000
- Revision:
- 0:d5bbef547b76
LED lamp with full control - interrupt-based switch, Analog In and PWM out
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| malyuskin | 0:d5bbef547b76 | 1 | #include "mbed.h" |
| malyuskin | 0:d5bbef547b76 | 2 | InterruptIn button(A2); |
| malyuskin | 0:d5bbef547b76 | 3 | AnalogIn analog_value(A0); |
| malyuskin | 0:d5bbef547b76 | 4 | PwmOut ledpwm(A6); |
| malyuskin | 0:d5bbef547b76 | 5 | |
| malyuskin | 0:d5bbef547b76 | 6 | |
| malyuskin | 0:d5bbef547b76 | 7 | volatile bool state = 0; //initially lamp is OFF state is 0 |
| malyuskin | 0:d5bbef547b76 | 8 | |
| malyuskin | 0:d5bbef547b76 | 9 | void flip() { |
| malyuskin | 0:d5bbef547b76 | 10 | state = !state; } |
| malyuskin | 0:d5bbef547b76 | 11 | |
| malyuskin | 0:d5bbef547b76 | 12 | int main() { |
| malyuskin | 0:d5bbef547b76 | 13 | button.rise(&flip); // attach the address of the flip function to the rising edge |
| malyuskin | 0:d5bbef547b76 | 14 | |
| malyuskin | 0:d5bbef547b76 | 15 | float meas_r; // measured analog voltage on pin A0 |
| malyuskin | 0:d5bbef547b76 | 16 | |
| malyuskin | 0:d5bbef547b76 | 17 | |
| malyuskin | 0:d5bbef547b76 | 18 | while(1) { // wait around, interrupts will interrupt this! |
| malyuskin | 0:d5bbef547b76 | 19 | |
| malyuskin | 0:d5bbef547b76 | 20 | if (state==1){ //lamp is ON |
| malyuskin | 0:d5bbef547b76 | 21 | //... we can control brightness here using AnalogIn |
| malyuskin | 0:d5bbef547b76 | 22 | |
| malyuskin | 0:d5bbef547b76 | 23 | ledpwm.period_ms(10); // PWM period is 10ms |
| malyuskin | 0:d5bbef547b76 | 24 | |
| malyuskin | 0:d5bbef547b76 | 25 | meas_r = analog_value.read(); |
| malyuskin | 0:d5bbef547b76 | 26 | |
| malyuskin | 0:d5bbef547b76 | 27 | if (meas_r<0.1) {ledpwm.write(0.1);} // this is done to have led ON even when |
| malyuskin | 0:d5bbef547b76 | 28 | // voltage on analogIn A2 is 0 |
| malyuskin | 0:d5bbef547b76 | 29 | else ledpwm.write(meas_r); |
| malyuskin | 0:d5bbef547b76 | 30 | |
| malyuskin | 0:d5bbef547b76 | 31 | } |
| malyuskin | 0:d5bbef547b76 | 32 | |
| malyuskin | 0:d5bbef547b76 | 33 | else { |
| malyuskin | 0:d5bbef547b76 | 34 | //lamp is OFF |
| malyuskin | 0:d5bbef547b76 | 35 | //... set PWM to 0 |
| malyuskin | 0:d5bbef547b76 | 36 | |
| malyuskin | 0:d5bbef547b76 | 37 | ledpwm.period_ms(10); // PWM period is 10ms |
| malyuskin | 0:d5bbef547b76 | 38 | ledpwm.write(0.0); |
| malyuskin | 0:d5bbef547b76 | 39 | |
| malyuskin | 0:d5bbef547b76 | 40 | } |
| malyuskin | 0:d5bbef547b76 | 41 | wait(0.2); } |
| malyuskin | 0:d5bbef547b76 | 42 | } |
| malyuskin | 0:d5bbef547b76 | 43 | |
| malyuskin | 0:d5bbef547b76 | 44 | |
| malyuskin | 0:d5bbef547b76 | 45 | |
| malyuskin | 0:d5bbef547b76 | 46 | |
| malyuskin | 0:d5bbef547b76 | 47 | |
| malyuskin | 0:d5bbef547b76 | 48 | |
| malyuskin | 0:d5bbef547b76 | 49 |