factor out an animation helper and add Blinky struct

this makes it easier to add new animations without duplicating
boilerplate code