// #define SERIAL_ON
#define PWM_PIN LED_BUILTIN
int i, freq = 1000; // 1Hz peak to peak
bool j;
void setup() {
#ifdef SERIAL_ON
Serial.begin(115200);
Serial.println("PWM on LED_BUILTIN");
#endif
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
#ifdef SERIAL_ON
Serial.print(j);
Serial.print(" ");
Serial.print(i);
Serial.println();
#endif
if (i >= freq) { // end of cycle
j = !j; // change phase
i = 0; // restart cycle
}
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // invert state
switch (j) {
case (0):
delayMicroseconds(freq * j + i); // % duty cycle
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
delayMicroseconds(freq * !j - i);
break;
case (1):
delayMicroseconds(freq * j - i);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
delayMicroseconds(freq * !j + i);
break;
}
i++; // increasing to 100% duty cycle
}