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