Criando Bibliotecas para Arduino

AlxDroidDev:
Permita-me ser o advogado do diabo aqui. Não quero te desanimar: a idéia é boa, mas no mundo dos microcontroladores acho que não é boa idéia termos abstrações demais.

Apesar da linguagem ser OOP, nem sempre usar OOP vale a pena, pois quanto mais OOP se tem, maior e mais lento será o código final. Todas as abstrações de sua classe viram códigos e consomem não apenas bytes importantes na memória flash do uC, mas também ciclos de clock.

Existem uma corrente, um movimento que está até pensando em abolir coisas como "pinMode", afim de fazer a manipulação direta da direção de cada porta (PORTA, PORTB, DDRD, etc). Isto economiza muitos e muitos bytes em uma RAM.

A memória flash de nosso querido Atmega328 não é expansível, e os sketches estão ficando cada vez mais criativos, maiores e mais complexos. Por isto muita gente - eu entre eles - tem tentado achar formas de economizar bytes em um sketch compilado. Eu, recentemente, dei pulos de alegria quando pude ver que meu sketch compilou com 98 bytes a menos devido a algumas alterações como manipulação direta de porta. Tudo que era constante já estava na SRAM.

Apesar de não poder discordar com o que dizes (algures pelo fórum está um post meu dirigido ao Marcelo dizendo mais ou menos o mesmo), algo que tens de perceber é o objectivo da plataforma Arduino.

Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments.

E olhando a este objectivo, diria que o Arduino faz exactamente isso. Tudo bem que ocupa memória, etc... mas permite que leigos consigam passar ao lado do que não é de todo transparente para eles e atinjam algo.

Tu quando começaste a mexer no Arduino já sabias usar microcontroladores?

Quanto ao pinMode e coisas semelhantes, em tempos usei um compilador de C chamado CodeVisionAVR (podem tirar um demo do site http://hpinfotech.ro/) que tinha o que eles chamavam de codewizard... Basicamente era uma GUI para configurar as portas, UART, I2C, etc... e funcionava bem porque abstraia a pessoa do código para configurar os periféricos e fazía-o da forma mais eficiente possível. Talvez isto fosse melhor?