Hiroshi Yamaguchi / m0-PwmOut
Committer:
yamaguch
Date:
Thu Dec 22 04:29:40 2011 +0000
Revision:
0:8926d6546415

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }