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:8926d6546415, 2011-12-22 (annotated)
- Committer:
- yamaguch
- Date:
- Thu Dec 22 04:29:40 2011 +0000
- Revision:
- 0:8926d6546415
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| yamaguch | 0:8926d6546415 | 1 | #include "mbed.h" |
| yamaguch | 0:8926d6546415 | 2 | |
| yamaguch | 0:8926d6546415 | 3 | /** |
| yamaguch | 0:8926d6546415 | 4 | * PwmOut for M0 |
| yamaguch | 0:8926d6546415 | 5 | */ |
| yamaguch | 0:8926d6546415 | 6 | class M0PwmOut { |
| yamaguch | 0:8926d6546415 | 7 | public: |
| yamaguch | 0:8926d6546415 | 8 | M0PwmOut(PinName pwm, float period = 0.001) : pwm(pwm), period(period), duty(0) { |
| yamaguch | 0:8926d6546415 | 9 | this->pwm = 0; |
| yamaguch | 0:8926d6546415 | 10 | } |
| yamaguch | 0:8926d6546415 | 11 | |
| yamaguch | 0:8926d6546415 | 12 | void write(float duty) { |
| yamaguch | 0:8926d6546415 | 13 | if (duty <= 0.0) { |
| yamaguch | 0:8926d6546415 | 14 | this->duty = 0; |
| yamaguch | 0:8926d6546415 | 15 | pwm = 0; |
| yamaguch | 0:8926d6546415 | 16 | ticker.detach(); |
| yamaguch | 0:8926d6546415 | 17 | } else if (duty >= 1.0) { |
| yamaguch | 0:8926d6546415 | 18 | this->duty = 1; |
| yamaguch | 0:8926d6546415 | 19 | pwm = 1; |
| yamaguch | 0:8926d6546415 | 20 | ticker.detach(); |
| yamaguch | 0:8926d6546415 | 21 | } else { |
| yamaguch | 0:8926d6546415 | 22 | this->duty = duty; |
| yamaguch | 0:8926d6546415 | 23 | ticker.attach(this, &M0PwmOut::onTicker, period); |
| yamaguch | 0:8926d6546415 | 24 | } |
| yamaguch | 0:8926d6546415 | 25 | } |
| yamaguch | 0:8926d6546415 | 26 | |
| yamaguch | 0:8926d6546415 | 27 | float read() { |
| yamaguch | 0:8926d6546415 | 28 | return duty; |
| yamaguch | 0:8926d6546415 | 29 | } |
| yamaguch | 0:8926d6546415 | 30 | |
| yamaguch | 0:8926d6546415 | 31 | void operator=(float value) { |
| yamaguch | 0:8926d6546415 | 32 | write(value); |
| yamaguch | 0:8926d6546415 | 33 | } |
| yamaguch | 0:8926d6546415 | 34 | |
| yamaguch | 0:8926d6546415 | 35 | operator float() { |
| yamaguch | 0:8926d6546415 | 36 | return read(); |
| yamaguch | 0:8926d6546415 | 37 | } |
| yamaguch | 0:8926d6546415 | 38 | private: |
| yamaguch | 0:8926d6546415 | 39 | DigitalOut pwm; |
| yamaguch | 0:8926d6546415 | 40 | Ticker ticker; |
| yamaguch | 0:8926d6546415 | 41 | Timeout timeout; |
| yamaguch | 0:8926d6546415 | 42 | float period; |
| yamaguch | 0:8926d6546415 | 43 | float duty; |
| yamaguch | 0:8926d6546415 | 44 | |
| yamaguch | 0:8926d6546415 | 45 | void onTicker() { |
| yamaguch | 0:8926d6546415 | 46 | this->pwm = 1; |
| yamaguch | 0:8926d6546415 | 47 | timeout.attach(this, &M0PwmOut::onTimeout, duty * period); |
| yamaguch | 0:8926d6546415 | 48 | } |
| yamaguch | 0:8926d6546415 | 49 | |
| yamaguch | 0:8926d6546415 | 50 | void onTimeout() { |
| yamaguch | 0:8926d6546415 | 51 | this->pwm = 0; |
| yamaguch | 0:8926d6546415 | 52 | } |
| yamaguch | 0:8926d6546415 | 53 | }; |
| yamaguch | 0:8926d6546415 | 54 | |
| yamaguch | 0:8926d6546415 | 55 | int main () { |
| yamaguch | 0:8926d6546415 | 56 | M0PwmOut leds[] = {LED1, LED2, LED3, LED4}; |
| yamaguch | 0:8926d6546415 | 57 | |
| yamaguch | 0:8926d6546415 | 58 | for (int i = 0; i < 600; i++) { |
| yamaguch | 0:8926d6546415 | 59 | for (int j = 0; j < 4; j++) |
| yamaguch | 0:8926d6546415 | 60 | leds[j] = ((i + 5 * j) % 31) / 30.0; |
| yamaguch | 0:8926d6546415 | 61 | wait(0.2); |
| yamaguch | 0:8926d6546415 | 62 | } |
| yamaguch | 0:8926d6546415 | 63 | for (int i = 0; i < 4; i++) leds[i] = 0; |
| yamaguch | 0:8926d6546415 | 64 | } |