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.
lib_PwmOutAllPin.cpp@0:0e01d184dbab, 2015-07-10 (annotated)
- Committer:
- YSI
- Date:
- Fri Jul 10 08:44:52 2015 +0000
- Revision:
- 0:0e01d184dbab
- Child:
- 1:8067d51d66bd
lib_PwmOutAllPin
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| YSI | 0:0e01d184dbab | 1 | #include "lib_PwmOutAllPin.h" |
| YSI | 0:0e01d184dbab | 2 | |
| YSI | 0:0e01d184dbab | 3 | /** Crée un PwmOutAllPin connecté à la pin spécifié |
| YSI | 0:0e01d184dbab | 4 | * |
| YSI | 0:0e01d184dbab | 5 | * @param pin Pin à connecter |
| YSI | 0:0e01d184dbab | 6 | */ |
| YSI | 0:0e01d184dbab | 7 | PwmOutAllPin::PwmOutAllPin(PinName pin) : PwmOutPin(pin) |
| YSI | 0:0e01d184dbab | 8 | { |
| YSI | 0:0e01d184dbab | 9 | Pwm_period_us = 20000; |
| YSI | 0:0e01d184dbab | 10 | Pwm_Duty_Cycle = 0.0; |
| YSI | 0:0e01d184dbab | 11 | } |
| YSI | 0:0e01d184dbab | 12 | |
| YSI | 0:0e01d184dbab | 13 | /** Fixe le rapport cyclique au pourcentage (float) spécifié |
| YSI | 0:0e01d184dbab | 14 | * |
| YSI | 0:0e01d184dbab | 15 | * @param value Une valeure floating-point représentant le rapport cyclique, |
| YSI | 0:0e01d184dbab | 16 | * spécifié sous la forme d'un pourcentage. La valeur doit être comprise entre |
| YSI | 0:0e01d184dbab | 17 | * 0.0f (correspondant à 0%) et 1.0f (correspondant à 100%). |
| YSI | 0:0e01d184dbab | 18 | * Les valeurs exterieures à cette plage sont saturées à 0.0f ou 1.0f. |
| YSI | 0:0e01d184dbab | 19 | */ |
| YSI | 0:0e01d184dbab | 20 | void PwmOutAllPin::write(float value) |
| YSI | 0:0e01d184dbab | 21 | { |
| YSI | 0:0e01d184dbab | 22 | if(value != Pwm_Duty_Cycle) |
| YSI | 0:0e01d184dbab | 23 | { |
| YSI | 0:0e01d184dbab | 24 | Pwm_Duty_Cycle = value; |
| YSI | 0:0e01d184dbab | 25 | UsePwm(); |
| YSI | 0:0e01d184dbab | 26 | } |
| YSI | 0:0e01d184dbab | 27 | } |
| YSI | 0:0e01d184dbab | 28 | |
| YSI | 0:0e01d184dbab | 29 | /** Retourne la valeur courante du rapport cyclique de la sortie, mesurée sous la forme d'un pourcentage (float) |
| YSI | 0:0e01d184dbab | 30 | * |
| YSI | 0:0e01d184dbab | 31 | * @returns |
| YSI | 0:0e01d184dbab | 32 | * Une valeur floating-point représentant la valeur courante du rapport cyclique qui est sur la pin de sortie, |
| YSI | 0:0e01d184dbab | 33 | * mesurée sous la forme d'un pourcentage. La valeur doit être comprise entre |
| YSI | 0:0e01d184dbab | 34 | * 0.0f (correspondant à 0%) et 1.0f (correspondant à 100%). |
| YSI | 0:0e01d184dbab | 35 | */ |
| YSI | 0:0e01d184dbab | 36 | float PwmOutAllPin::read(void) |
| YSI | 0:0e01d184dbab | 37 | { |
| YSI | 0:0e01d184dbab | 38 | return Pwm_Duty_Cycle; |
| YSI | 0:0e01d184dbab | 39 | } |
| YSI | 0:0e01d184dbab | 40 | |
| YSI | 0:0e01d184dbab | 41 | /** Fixe la période du PWM, spécifié en secondes (float), garde le même rapport cyclique. |
| YSI | 0:0e01d184dbab | 42 | * |
| YSI | 0:0e01d184dbab | 43 | * @note |
| YSI | 0:0e01d184dbab | 44 | * La résolution est en microsecondes mais les périodes inférieure à 100µs sont imprécises. |
| YSI | 0:0e01d184dbab | 45 | */ |
| YSI | 0:0e01d184dbab | 46 | void PwmOutAllPin::period(float seconds) |
| YSI | 0:0e01d184dbab | 47 | { |
| YSI | 0:0e01d184dbab | 48 | Pwm_period_us = seconds*1000000; |
| YSI | 0:0e01d184dbab | 49 | UsePwm(); |
| YSI | 0:0e01d184dbab | 50 | } |
| YSI | 0:0e01d184dbab | 51 | |
| YSI | 0:0e01d184dbab | 52 | /** Fixe la période du PWM, spécifié en millisecondes (int), garde le même rapport cyclique. |
| YSI | 0:0e01d184dbab | 53 | */ |
| YSI | 0:0e01d184dbab | 54 | void PwmOutAllPin::period_ms(int ms) |
| YSI | 0:0e01d184dbab | 55 | { |
| YSI | 0:0e01d184dbab | 56 | Pwm_period_us = ms*1000; |
| YSI | 0:0e01d184dbab | 57 | UsePwm(); |
| YSI | 0:0e01d184dbab | 58 | } |
| YSI | 0:0e01d184dbab | 59 | |
| YSI | 0:0e01d184dbab | 60 | /** Fixe la période du PWM, spécifié en microsecondes (int), garde le même rapport cyclique. |
| YSI | 0:0e01d184dbab | 61 | */ |
| YSI | 0:0e01d184dbab | 62 | void PwmOutAllPin::period_us(int us) |
| YSI | 0:0e01d184dbab | 63 | { |
| YSI | 0:0e01d184dbab | 64 | Pwm_period_us = us-8; |
| YSI | 0:0e01d184dbab | 65 | UsePwm(); |
| YSI | 0:0e01d184dbab | 66 | } |
| YSI | 0:0e01d184dbab | 67 | |
| YSI | 0:0e01d184dbab | 68 | /** Fixe la largeur d'impulsion du PWM, spécifié en secondes (float), garde la même période. |
| YSI | 0:0e01d184dbab | 69 | */ |
| YSI | 0:0e01d184dbab | 70 | void PwmOutAllPin::pulsewidth(float seconds) |
| YSI | 0:0e01d184dbab | 71 | { |
| YSI | 0:0e01d184dbab | 72 | Pwm_Duty_Cycle = seconds*1000000/Pwm_period_us; |
| YSI | 0:0e01d184dbab | 73 | UsePwm(); |
| YSI | 0:0e01d184dbab | 74 | } |
| YSI | 0:0e01d184dbab | 75 | |
| YSI | 0:0e01d184dbab | 76 | /** Fixe la largeur d'impulsion du PWM, spécifié en millisecondes (int), garde la même période. |
| YSI | 0:0e01d184dbab | 77 | */ |
| YSI | 0:0e01d184dbab | 78 | void PwmOutAllPin::pulsewidth_ms(int ms) |
| YSI | 0:0e01d184dbab | 79 | { |
| YSI | 0:0e01d184dbab | 80 | Pwm_Duty_Cycle = ms*1000/Pwm_period_us; |
| YSI | 0:0e01d184dbab | 81 | UsePwm(); |
| YSI | 0:0e01d184dbab | 82 | } |
| YSI | 0:0e01d184dbab | 83 | |
| YSI | 0:0e01d184dbab | 84 | /** Fixe la largeur d'impulsion du PWM, spécifié en microsecondes (int), garde la même période. |
| YSI | 0:0e01d184dbab | 85 | */ |
| YSI | 0:0e01d184dbab | 86 | void PwmOutAllPin::pulsewidth_us(int us) |
| YSI | 0:0e01d184dbab | 87 | { |
| YSI | 0:0e01d184dbab | 88 | Pwm_Duty_Cycle = us/Pwm_period_us; |
| YSI | 0:0e01d184dbab | 89 | UsePwm(); |
| YSI | 0:0e01d184dbab | 90 | } |
| YSI | 0:0e01d184dbab | 91 | |
| YSI | 0:0e01d184dbab | 92 | /** raccourci pour write() |
| YSI | 0:0e01d184dbab | 93 | */ |
| YSI | 0:0e01d184dbab | 94 | PwmOutAllPin& PwmOutAllPin::operator= (float value) |
| YSI | 0:0e01d184dbab | 95 | { |
| YSI | 0:0e01d184dbab | 96 | write(value); |
| YSI | 0:0e01d184dbab | 97 | return *this; |
| YSI | 0:0e01d184dbab | 98 | } |
| YSI | 0:0e01d184dbab | 99 | |
| YSI | 0:0e01d184dbab | 100 | /** raccourci pour effectuer des opperations mathématique avec write() |
| YSI | 0:0e01d184dbab | 101 | */ |
| YSI | 0:0e01d184dbab | 102 | PwmOutAllPin& PwmOutAllPin::operator= (PwmOutAllPin& rhs) |
| YSI | 0:0e01d184dbab | 103 | { |
| YSI | 0:0e01d184dbab | 104 | write(rhs.read()); |
| YSI | 0:0e01d184dbab | 105 | return *this; |
| YSI | 0:0e01d184dbab | 106 | } |
| YSI | 0:0e01d184dbab | 107 | |
| YSI | 0:0e01d184dbab | 108 | /** raccourci pour read() |
| YSI | 0:0e01d184dbab | 109 | */ |
| YSI | 0:0e01d184dbab | 110 | PwmOutAllPin::operator float() |
| YSI | 0:0e01d184dbab | 111 | { |
| YSI | 0:0e01d184dbab | 112 | return read(); |
| YSI | 0:0e01d184dbab | 113 | } |
| YSI | 0:0e01d184dbab | 114 | |
| YSI | 0:0e01d184dbab | 115 | void PwmOutAllPin::DigitalUp(void) |
| YSI | 0:0e01d184dbab | 116 | { |
| YSI | 0:0e01d184dbab | 117 | SwitchPin.attach_us(this, &PwmOutAllPin::DigitalDown, (Pwm_period_us*Pwm_Duty_Cycle)); |
| YSI | 0:0e01d184dbab | 118 | PwmOutPin = 1; |
| YSI | 0:0e01d184dbab | 119 | } |
| YSI | 0:0e01d184dbab | 120 | |
| YSI | 0:0e01d184dbab | 121 | void PwmOutAllPin::DigitalDown(void) |
| YSI | 0:0e01d184dbab | 122 | { |
| YSI | 0:0e01d184dbab | 123 | SwitchPin.attach_us(this, &PwmOutAllPin::DigitalUp, (Pwm_period_us*(1.0-Pwm_Duty_Cycle))); |
| YSI | 0:0e01d184dbab | 124 | PwmOutPin = 0; |
| YSI | 0:0e01d184dbab | 125 | } |
| YSI | 0:0e01d184dbab | 126 | |
| YSI | 0:0e01d184dbab | 127 | void PwmOutAllPin::UsePwm(void) |
| YSI | 0:0e01d184dbab | 128 | { |
| YSI | 0:0e01d184dbab | 129 | if((Pwm_Duty_Cycle > 0.0) && (Pwm_Duty_Cycle < 1.0)) |
| YSI | 0:0e01d184dbab | 130 | { |
| YSI | 0:0e01d184dbab | 131 | DigitalUp(); |
| YSI | 0:0e01d184dbab | 132 | } |
| YSI | 0:0e01d184dbab | 133 | else if(Pwm_Duty_Cycle >= 1.0) |
| YSI | 0:0e01d184dbab | 134 | { |
| YSI | 0:0e01d184dbab | 135 | Pwm_Duty_Cycle = 1.0; |
| YSI | 0:0e01d184dbab | 136 | SwitchPin.detach(); |
| YSI | 0:0e01d184dbab | 137 | PwmOutPin = 1; |
| YSI | 0:0e01d184dbab | 138 | } |
| YSI | 0:0e01d184dbab | 139 | else |
| YSI | 0:0e01d184dbab | 140 | { |
| YSI | 0:0e01d184dbab | 141 | Pwm_Duty_Cycle = 0.0; |
| YSI | 0:0e01d184dbab | 142 | SwitchPin.detach(); |
| YSI | 0:0e01d184dbab | 143 | PwmOutPin = 0; |
| YSI | 0:0e01d184dbab | 144 | } |
| YSI | 0:0e01d184dbab | 145 | } |