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.
Diff: lib_PwmOutAllPin.cpp
- Revision:
- 1:8067d51d66bd
- Parent:
- 0:0e01d184dbab
- Child:
- 3:1d1669e8c9b1
--- a/lib_PwmOutAllPin.cpp Fri Jul 10 08:44:52 2015 +0000
+++ b/lib_PwmOutAllPin.cpp Fri Jul 10 14:04:19 2015 +0000
@@ -8,6 +8,7 @@
{
Pwm_period_us = 20000;
Pwm_Duty_Cycle = 0.0;
+ TickerPeriod.attach_us(this, &PwmOutAllPin::DigitalDown, Pwm_period_us);
}
/** Fixe le rapport cyclique au pourcentage (float) spécifié
@@ -19,11 +20,8 @@
*/
void PwmOutAllPin::write(float value)
{
- if(value != Pwm_Duty_Cycle)
- {
- Pwm_Duty_Cycle = value;
- UsePwm();
- }
+ Pwm_Duty_Cycle = value;
+ UsePwm();
}
/** Retourne la valeur courante du rapport cyclique de la sortie, mesurée sous la forme d'un pourcentage (float)
@@ -45,47 +43,47 @@
*/
void PwmOutAllPin::period(float seconds)
{
- Pwm_period_us = seconds*1000000;
- UsePwm();
+ period_us(seconds*1000000);
}
/** Fixe la période du PWM, spécifié en millisecondes (int), garde le même rapport cyclique.
*/
void PwmOutAllPin::period_ms(int ms)
{
- Pwm_period_us = ms*1000;
- UsePwm();
+ period_us(ms*1000);
}
/** Fixe la période du PWM, spécifié en microsecondes (int), garde le même rapport cyclique.
*/
void PwmOutAllPin::period_us(int us)
{
- Pwm_period_us = us-8;
- UsePwm();
+ if(us != Pwm_period_us)
+ {
+ Pwm_period_us = us;
+ UsePwm();
+ TickerPeriod.attach_us(this, &PwmOutAllPin::DigitalDown, Pwm_period_us);
+ }
}
/** Fixe la largeur d'impulsion du PWM, spécifié en secondes (float), garde la même période.
*/
void PwmOutAllPin::pulsewidth(float seconds)
{
- Pwm_Duty_Cycle = seconds*1000000/Pwm_period_us;
- UsePwm();
+ pulsewidth_us(seconds*1000000);
}
/** Fixe la largeur d'impulsion du PWM, spécifié en millisecondes (int), garde la même période.
*/
void PwmOutAllPin::pulsewidth_ms(int ms)
{
- Pwm_Duty_Cycle = ms*1000/Pwm_period_us;
- UsePwm();
+ pulsewidth_us(ms*1000);
}
/** Fixe la largeur d'impulsion du PWM, spécifié en microsecondes (int), garde la même période.
*/
void PwmOutAllPin::pulsewidth_us(int us)
{
- Pwm_Duty_Cycle = us/Pwm_period_us;
+ Pwm_Duty_Cycle = (float)us/Pwm_period_us;
UsePwm();
}
@@ -114,32 +112,34 @@
void PwmOutAllPin::DigitalUp(void)
{
- SwitchPin.attach_us(this, &PwmOutAllPin::DigitalDown, (Pwm_period_us*Pwm_Duty_Cycle));
PwmOutPin = 1;
}
void PwmOutAllPin::DigitalDown(void)
{
- SwitchPin.attach_us(this, &PwmOutAllPin::DigitalUp, (Pwm_period_us*(1.0-Pwm_Duty_Cycle)));
- PwmOutPin = 0;
+ if((Pwm_Duty_Cycle > 0.0) && (Pwm_Duty_Cycle < 1.0))
+ {
+ PwmOutPin = 0;
+ SwitchPin.attach_us(this, &PwmOutAllPin::DigitalUp, TimeDown);
+ }
}
void PwmOutAllPin::UsePwm(void)
{
if((Pwm_Duty_Cycle > 0.0) && (Pwm_Duty_Cycle < 1.0))
{
- DigitalUp();
+ TimeDown = Pwm_period_us*(1.0-Pwm_Duty_Cycle);
}
else if(Pwm_Duty_Cycle >= 1.0)
{
+ SwitchPin.detach();
Pwm_Duty_Cycle = 1.0;
- SwitchPin.detach();
PwmOutPin = 1;
}
else
{
+ SwitchPin.detach();
Pwm_Duty_Cycle = 0.0;
- SwitchPin.detach();
PwmOutPin = 0;
}
}
\ No newline at end of file