Use conventional programming structures such as loops, local variables, and functions to implement software PWM using the on-board LED.
This exercise demonstrates how defining functions can improve clarity and maintainability of the code by reducing redundancy. Another framing is that function definitions constitute a new application-specific language. By creating a new abstraction of the low-level ramp pattern, it becomes to simpler to express the solution to the higher-order problem of generating the complex blink pattern over time.