Y SI / lib_PwmOutAllPin
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?

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