Estou trabalhando com algumas bibliotecas que fornecem APIs para interagir com chips de hardware específicos (que fazem esses drivers?). No entanto, placas ou protetores personalizados diferentes terão o chip mapeado para pinos diferentes, o que significa que a biblioteca precisa ser modificada para cada caso. A necessidade de modificar a biblioteca não funciona bem com o Gerenciador de Biblioteca IDE do Arduino.
Existem padrões preferidos / recomendados para expor essa configuração para que a própria biblioteca não precise ser modificada todas as vezes?
Respostas:
O método que eu uso é fornecer os pinos como parâmetros para o construtor. Esses números de pinos são armazenados em variáveis para serem usados posteriormente na
.begin()
função e em outros lugares.Na maioria das vezes, uso listas de inicialização para simplificar as coisas. Por exemplo:
fonte
Eu usaria uma das duas possibilidades a seguir:
Use variáveis (de classe) e defina-as no construtor.
Vantagens:
Use um método separado (por exemplo, Init).
Vantagens:
Observações
Para configurações de pinos, a maioria dos circuitos estáticos é usada, portanto a primeira abordagem é provavelmente melhor.
Para configurações, principalmente o segundo método é melhor.
Se muitos pinos estiverem envolvidos (não é provável), use uma estrutura ou uma classe de configurações de pinos separada.
Macros
O que eu não aconselho são macros. Quando os usuários precisam alterar o código-fonte e instalar novas versões, eles precisam mesclar ou refazer as alterações novamente. As vantagens são um código um pouco menor (de máquina), provavelmente um pouco mais rápido e um pouco menos de uso de memória, mas todos os três aspectos são mínimos.
fonte
dependendo da sua abordagem.
1) se você apenas fornecer os arquivos binários + de cabeçalho, terá que fazer as variáveis de pinos.
2) se você fornecer o código-fonte e esperar que o usuário recompile o código-fonte, use macros.
fonte
Caso você evite o material do construtor C ++, que geralmente é um exagero no Arduino, você pode usar
#define
as macros do tipo objeto.Igual a:
O pré-processador substituirá perfeitamente
PIN_ONE
o número 1 ePIN_TWO
2, assumindo que essas definições estão no.h
arquivo de cabeçalho da biblioteca . Provavelmente, isso requer a menor quantidade de recursos em comparação com as outras soluções possíveis.fonte