https://medium.com/@tontonialberto/solid-programming-for-arduino-the-dependency-inversion-principle-4ce3bdb787d1