31 lines
847 B
C++
31 lines
847 B
C++
/** Bit bang low frequency PWM.
|
|
*
|
|
* Parameters:
|
|
* outputPin (byte) - Pin number to output PWM.
|
|
* dutyCycle (byte) - PWM from 0 - 100.
|
|
* period (unsigned long) - Period in milliseconds.
|
|
*/
|
|
void slowPWM(byte outputPin, byte dutyCycle, unsigned long period)
|
|
{
|
|
pinMode(outputPin, OUTPUT);
|
|
static byte outputState = LOW;
|
|
static unsigned long lastSwitchTime = 0;
|
|
|
|
unsigned long onTime = (dutyCycle * period) / 100;
|
|
unsigned long offTime = period - onTime;
|
|
|
|
unsigned long currentTime = millis();
|
|
|
|
if (outputState == HIGH && (currentTime - lastSwitchTime >= onTime))
|
|
{
|
|
lastSwitchTime = currentTime;
|
|
outputState = LOW;
|
|
}
|
|
if (outputState == LOW && (currentTime - lastSwitchTime >= offTime))
|
|
{
|
|
lastSwitchTime = currentTime;
|
|
outputState = HIGH;
|
|
}
|
|
digitalWrite(outputPin, outputState);
|
|
}
|