Source: https://cdn.sparkfun.com/assets/resources/4/4/Arduino_programming_part3_slides.pdf