Arduino está destinado a ser una forma fácil para personas no técnicas y, por lo tanto, oculta todo lo que puede a simple vista para ser simple.
Para un proyecto simple, funciona a costa de la sobrecarga de copiar bibliotecas aquí y allá y usar el "IDE" de Arduino. Llamando a los programas "bocetos" y manipulándolo para ocultar, que está en C ++. Y así sucesivamente y así sucesivamente.
Si desea realizar proyectos más complicados, control de versiones, buen entorno y demás, debe abandonar "simplemente Arduino" y comenzar a utilizar herramientas más potentes y complicadas.
Yo personalmente uso
https://github.com/sudar/Arduino-Makefile
https://github.com/ladislas/Bare-Arduino-Project
y lo tengo en los repositorios de GIT.
De esta manera puedo compartir bibliotecas entre proyectos en grupo, también enlaces a bibliotecas fuera del árbol, así como submódulos gits, lo que le permite tener bibliotecas actualizadas de terceros disponibles para todos los proyectos, también aquellos antiguos.
Todavía uso mucho Arduino (como setup / loop, digitalRead y demás), pero también uso construcciones "normales" de g ++ en el camino. Más tarde, divergiré aún más para codificar código C / g ++ / .. probablemente, usando algunos RTOS más o menos, pero ahora mis necesidades aún no están tan lejos. (google "arduino rtos" Actualmente estoy leyendo https://github.com/greiman/NilRTOS-Arduino )
Arduino no pretende ser la "mejor práctica" de todos modos. Está destinado a ser "una forma rápida y fácil de hacer algo, cuando no sabes nada". Y funciona, ya que cualquiera y su perro pueden comenzar con Arduino y, si está interesado, puede llegar más lejos por su cuenta, o puede seguir con lo fácil y divertirse de todos modos.