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
00001 /** Lib PwmOutAllPin using TimeOut 00002 * 00003 * Copyright (c) 2014, cstyles (http://mbed.org) 00004 * 00005 * Exemple: 00006 * @code 00007 * #include "mbed.h" 00008 * #include "lib_PwmOutAllPin.h" 00009 * 00010 * PwmOutAllPin pin1(p20); 00011 * PwmOutAllPin pin2(p12); 00012 * 00013 * int main() 00014 * { 00015 * pin2.period(0.0002); 00016 * pin2 = 0.25; 00017 * pin1 = 0.5; 00018 * pin1.period_us(20); 00019 * 00020 * while(1) 00021 * { 00022 * wait(0.25); 00023 * } 00024 * } 00025 * @endcode 00026 * @file lib_PwmOutAllPin.h 00027 * @purpose library for PwmOut on all pins 00028 * @date 2015 00029 * @author Yannic Simon 00030 */ 00031 00032 #include "lib_PwmOutAllPin.h" 00033 00034 /** Crée un PwmOutAllPin connecté à la pin spécifiée 00035 * @note init period 20ms and duty cycle 0% 00036 * @param pin Pin à connecter 00037 */ 00038 PwmOutAllPin::PwmOutAllPin(PinName pin) : PwmOutPin(pin) 00039 { 00040 Pwm_period_us = 20000; 00041 Pwm_Duty_Cycle = 0.0; 00042 TickerPeriod.attach_us(this, &PwmOutAllPin::DigitalDown, Pwm_period_us); 00043 } 00044 00045 /** Fixe le rapport cyclique au pourcentage (float) spécifié 00046 * 00047 * @param value Une valeure floating-point représentant le rapport cyclique, 00048 * spécifié sous la forme d'un pourcentage. La valeur doit être comprise entre 00049 * 0.0f (correspondant à 0%) et 1.0f (correspondant à 100%). 00050 * Les valeurs exterieures à cette plage sont saturées à 0.0f ou 1.0f. 00051 */ 00052 void PwmOutAllPin::write(float value) 00053 { 00054 Pwm_Duty_Cycle = value; 00055 UsePwm(); 00056 } 00057 00058 /** Retourne la valeur courante du rapport cyclique de la sortie, mesurée sous la forme d'un pourcentage (float) 00059 * 00060 * @returns 00061 * Une valeur floating-point représentant la valeur courante du rapport cyclique qui est sur la pin de sortie, 00062 * mesurée sous la forme d'un pourcentage. La valeur doit être comprise entre 00063 * 0.0f (correspondant à 0%) et 1.0f (correspondant à 100%). 00064 */ 00065 float PwmOutAllPin::read(void) 00066 { 00067 return Pwm_Duty_Cycle; 00068 } 00069 00070 /** Fixe la période du PWM, spécifié en secondes (float), garde le même rapport cyclique. 00071 * 00072 * @note 00073 * La résolution est en microsecondes mais les périodes inférieure à 100µs sont imprécises. 00074 */ 00075 void PwmOutAllPin::period(float seconds) 00076 { 00077 period_us(seconds*1000000); 00078 } 00079 00080 /** Fixe la période du PWM, spécifié en millisecondes (int), garde le même rapport cyclique. 00081 */ 00082 void PwmOutAllPin::period_ms(int ms) 00083 { 00084 period_us(ms*1000); 00085 } 00086 00087 /** Fixe la période du PWM, spécifié en microsecondes (int), garde le même rapport cyclique. 00088 */ 00089 void PwmOutAllPin::period_us(int us) 00090 { 00091 if(us != Pwm_period_us) 00092 { 00093 Pwm_period_us = us; 00094 UsePwm(); 00095 TickerPeriod.attach_us(this, &PwmOutAllPin::DigitalDown, Pwm_period_us); 00096 } 00097 } 00098 00099 /** Fixe la largeur d'impulsion du PWM, spécifié en secondes (float), garde la même période. 00100 */ 00101 void PwmOutAllPin::pulsewidth(float seconds) 00102 { 00103 pulsewidth_us(seconds*1000000); 00104 } 00105 00106 /** Fixe la largeur d'impulsion du PWM, spécifié en millisecondes (int), garde la même période. 00107 */ 00108 void PwmOutAllPin::pulsewidth_ms(int ms) 00109 { 00110 pulsewidth_us(ms*1000); 00111 } 00112 00113 /** Fixe la largeur d'impulsion du PWM, spécifié en microsecondes (int), garde la même période. 00114 */ 00115 void PwmOutAllPin::pulsewidth_us(int us) 00116 { 00117 Pwm_Duty_Cycle = (float)us/Pwm_period_us; 00118 UsePwm(); 00119 } 00120 00121 /** raccourci pour write() 00122 */ 00123 PwmOutAllPin& PwmOutAllPin::operator= (float value) 00124 { 00125 write(value); 00126 return *this; 00127 } 00128 00129 /** raccourci pour effectuer des opperations mathématique avec write() 00130 */ 00131 PwmOutAllPin& PwmOutAllPin::operator= (PwmOutAllPin& rhs) 00132 { 00133 write(rhs.read()); 00134 return *this; 00135 } 00136 00137 /** raccourci pour read() 00138 */ 00139 PwmOutAllPin::operator float() 00140 { 00141 return read(); 00142 } 00143 00144 void PwmOutAllPin::DigitalUp(void) 00145 { 00146 PwmOutPin = 1; 00147 } 00148 00149 void PwmOutAllPin::DigitalDown(void) 00150 { 00151 if((Pwm_Duty_Cycle > 0.0) && (Pwm_Duty_Cycle < 1.0)) 00152 { 00153 PwmOutPin = 0; 00154 SwitchPin.attach_us(this, &PwmOutAllPin::DigitalUp, TimeDown); 00155 } 00156 } 00157 00158 void PwmOutAllPin::UsePwm(void) 00159 { 00160 if((Pwm_Duty_Cycle > 0.0) && (Pwm_Duty_Cycle < 1.0)) 00161 { 00162 TimeDown = Pwm_period_us*(1.0-Pwm_Duty_Cycle); 00163 } 00164 else if(Pwm_Duty_Cycle >= 1.0) 00165 { 00166 SwitchPin.detach(); 00167 Pwm_Duty_Cycle = 1.0; 00168 PwmOutPin = 1; 00169 } 00170 else 00171 { 00172 SwitchPin.detach(); 00173 Pwm_Duty_Cycle = 0.0; 00174 PwmOutPin = 0; 00175 } 00176 }
Generated on Tue Jul 12 2022 21:26:04 by
1.7.2