Como escrever uma grande biblioteca do Arduino - Notícias

Como escrever uma grande biblioteca do Arduino – Notícias

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Escrevemos centenas de bibliotecas e cometemos muitos erros. Aprenda o básico de como escrever uma boa biblioteca.





Favorito



Favorito


5

O SparkFun escreveu um grande número de bibliotecas para o Arduino ao longo de muitos anos. Esta é uma lista compilada de lições que aprendemos ao longo do caminho que podem tornar uma boa biblioteca do Arduino excelente. Por favor, considere-os na próxima vez que você escrever uma biblioteca.

Leia e siga o Guia de Estilo da API do Arduino para escrever bibliotecas

O Guia de Estilo da API do Arduino é um excelente ponto de partida para fazer com que os usuários se sintam confortáveis ​​com sua biblioteca e com a biblioteca XYZ. Eu realmente gosto. Certifique-se de estar sendo gentil com o usuário possível com sua biblioteca.

Leia e siga o Guia de Estilo do Arduino para escrever exemplos

Leia o guia de estilo do Arduino para dar um ponto de partida para seus exemplos. Estes são os princípios básicos. Vamos avançar mais adiante.

Escreva vários exemplos

Se o usuário não tiver outra documentação, ele poderá usar quase todos os recursos de um dispositivo, passando por todos os exemplos. Uma biblioteca deve ter um exemplo da maioria, se não todos, dos métodos da classe.

Use exemplos escaláveis

Crie seus exemplos com a convenção de nomenclatura “Example1_BasicReadings”, “Example2_SetReadRate”, etc. Isso tornará óbvio para o usuário por onde começar (por exemplo, Exemplo1), como mostrado abaixo:

Menu Arduino mostrando exemplos em ordem

Observe que a complexidade dos exemplos deve avançar. Todos precisarão de leituras básicas. Menos pessoas precisarão dos exemplos AdvancedI2C ou TwoSensors. Se você tiver vários tipos de interface para sua biblioteca (por exemplo, I2C e Serial), considere adicionar subpastas com exemplos que demonstram os diferentes métodos de biblioteca usando as diferentes interfaces.

Escreva exemplos tão limpos e leves quanto possível

O exemplo 1 deve fazer o que 90% dos usuários desejam fazer – nem mais nem menos. O Exemplo 1 do acelerômetro MMA8452Q é mostrado abaixo.

#include 
#include "SparkFun_MMA8452Q.h" // Click here to get the library: http://librarymanager/All#SparkFun_MMA8452Q

MMA8452Q accel;

void setup()

    Serial.begin(115200);
    Serial.println("MMA8452Q Basic Reading Code!");

    Wire.begin();

    if (accel.begin() == false)
    
        Serial.println("Not Connected. Please check connections and read the hookup guide.");
        while (1)
            ;
    


void loop()

    if (accel.available()) // Wait for new data from accelerometer
    
        // Acceleration of x, y, and z directions in g units
        Serial.print(accel.getCalculatedX(), 3);
        Serial.print("t");
        Serial.print(accel.getCalculatedY(), 3);
        Serial.print("t");
        Serial.print(accel.getCalculatedZ(), 3);
        Serial.println();
    

Observe como ele não faz nada além de gerar valores de aceleração – isso é tudo o que 90% dos usuários precisarão.

A biblioteca deve ter uma função begin () que retorne true se o dispositivo responder como esperamos e inicialize todas as configurações no caso de uso mais padrão / 90% que o usuário desejar. Minimize a quantidade de configuração que é feita no Exemplo 1.

Se o dispositivo não iniciar, congele e imprima. Os usuários copiarão e colarão exemplos juntos e é uma boa prática verificar se o dispositivo está online durante a instalação.

Novamente, Example 1 deve ser muito simples e demonstrar o que o usuário provavelmente deseja fazer. Não mostre ao usuário o quão emocionante e configurável é o seu widget. Os usuários só querem que ele pisque, então eles querem dançar, então vá devagar.

Eficiência não é fundamental; legibilidade é

Escreva sua biblioteca para que ela possa ser entendida e mantida pela comunidade. Se você tem uma função muito importante que absolutamente precisa ser escrita em montagem, vá em frente. Mas não escreva código denso e complicado quando um código mais detalhado puder fazer a mesma coisa.

Comece a série em 115200

9600 bps e 115200 bps são as taxas de transmissão mais populares. O SparkFun terá todos os seus exemplos compilados e executados a 115200 bps, para que o usuário não precise adivinhar ou não veja a saída ao alternar entre exemplos e / ou produtos. Nos poucos casos em que é necessário um baud menor, deixe claro nos comentários no cabeçalho.

Escreva um código de exemplo que você possa explicar a um iniciante em uma ou duas frases

Considere o código mostrado abaixo. Ambas as declarações ‘se’ são válidas, mas como você as explica para um aluno / iniciante? Se você estiver dizendo coisas como “Ah, esse é um operador booleano que inverte o valor de retorno dessa função”, você está fazendo errado. Mantenha simples, idiota.

Evite usar um estrondo em um teste bool

Você pode escrever códigos C e CPP complexos dentro dos limites da sua biblioteca. Se um exemplo posterior (por exemplo, Exemplo7) precisar de código ou lógica mais avançada, tudo bem. Mas mantenha seus exemplos iniciais o mais simples possível.

Gere a biblioteca para que qualquer fluxo Wire, Serial ou SPI possa ser usado

Leia esta postagem do blog. Quando faz sentido, sua biblioteca aceita uma porta Wire ou Serial ou SPI na função .begin ().

Defina .begin () com os padrões para endereço e porta Wire

Se o dispositivo puder aceitar vários endereços, passe o endereço opcional para a função begin (). Adicione padrões à declaração da função begin. Por exemplo, no arquivo de cabeçalho:

Função Iniciar com padrões

Isso permite que o usuário chame accel.begin () sem argumentos, mas inicializa a biblioteca com o endereço padrão e Wire como a porta.

Organize os padrões das funções com a opção mais usada primeiro

Qual é o problema com o seguinte início() definição?

Padrões incorretos, fora de ordem

Ao colocar o Wire em primeiro lugar, forçamos o usuário a passar o Wire para a função begin quando o usuário deseja usar a biblioteca com um endereço diferente.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
A porta do fio na primeira posição está ruim

Noventa e nove por cento dos usuários desejam usar o Wire como a porta padrão, mas muitos usuários desejam alterar o endereço do dispositivo. Organize os padrões para que o endereço seja o primeiro e o Fio seja o segundo. Isso permite que o usuário chame um começo mais simplificado para alterar o endereço:

É melhor começar primeiro com o endereço

Tem uma função isConnected ()

isConnected() deve retornar true se um dispositivo reconhecer como esperávamos. Idealmente, o isConnected () testaria um ID ou o registro WHO_AM_I contendo uma função não alterável para aumentar a confiança de que estamos realmente conectados ao que pensamos ser. Às vezes, isso não é possível, então fazemos apenas um teste I2C ACK. IsConnected verifica se o dispositivo responde corretamente e retorna true. Essa função é frequentemente usada na função begin () (onde start faz essa verificação e qualquer configuração adicional), mas também é útil para varredura de barramento e identificação automática de dispositivos em um barramento.

Aqui está um teste completo de identificação:

Teste de código se um dispositivo estiver conectado
bool LPS25HB::isConnected()

    _i2cPort->beginTransmission(sensor_address);
    if (_i2cPort->endTransmission() == 0) //See if something ack's at this address
    
        if (getID() == LPS25HB_DEVID) //Make sure ID is what we expect
        
            return true;
        
        return false;
    
    return false;

Abaixo está um teste ACK simples que é bom, mas não é testado com a confiança mais alta:

Teste ACK simples

Não chame Wire.begin () na biblioteca

Exija um Wire.begin () dentro do esboço de exemplo, não na biblioteca. Chamar Wire.begin () em uma biblioteca reinicializará o hardware do Wire, causando uma redefinição da velocidade do relógio do Wire para 100kHz. Isso substitui qualquer comando setclock () que o usuário executou fora da biblioteca. Além disso, chamar vários Wire.begins pode causar instabilidade em algumas plataformas (ou seja, ESPs).

Não serial.print na sua biblioteca

Não presuma que o UART foi inicializado. Se você criar um Serial.println na sua biblioteca, a plataforma poderá falhar ou agir de maneira muito estranha se um Serial.begin () não tiver sido chamado. Não pense no usuário, deixe-o imprimir a saída de uma função. Não codifique Serial; genere sua biblioteca. Se necessário, permita que o usuário passe uma porta de depuração de sua escolha. Veja a Biblioteca RFID Simultânea para um exemplo.

Inclua um link para a biblioteca no exemplo

Há uma tonelada de bibliotecas com nomes semelhantes. Em quais das 15 bibliotecas disponíveis do KeyPad este esboço se baseia? Adicione um link em um comentário após a inclusão do cabeçalho que exibe a biblioteca necessária no gerenciador de bibliotecas.

#include  // Click here to get the library:http://librarymanager/All#SparkFun_LPS25HB

Comente seu código

Eu realmente tenho que escrever isso em voz alta? Use comentários suficientes para descrever código não óbvio, mas seja sucinto. Antes de cada função no CPP, comente seu uso e saída. Limite o comprimento da linha para 80 caracteres.

Use um arquivo keywords.txt formatado corretamente

Tenha um arquivo keywords.txt (consulte o final deste tutorial) em sua biblioteca para que todas as funções sejam destacadas. Se você tiver muitas funções, use o SparkFun Keyword File Generator para criar o arquivo de palavras-chave. Se você estiver modificando manualmente um arquivo de palavras-chave, não use espaços e use uma guia para separar KEYWORD2 e o nome da função. Caso contrário, você receberá uma visita de per1234, uma pessoa legal tentando corrigir todos os arquivos de palavras-chave. Per1234 é épico.

Evite erros comuns de I2C

Koepel escreveu uma ótima lista de erros comuns de I2C no Arduino. Evite-os.

Evite passar Strings

O método String (capital ‘S’) no Arduino usa uma grande quantidade de memória e tende a causar problemas em projetos de maior escala. As cordas em S devem ser fortemente evitadas nas bibliotecas. Use char * se precisar passar mensagens de aviso para dentro / fora da biblioteca. Consulte a biblioteca ICM-20948 para obter um bom exemplo de distribuição de uma matriz de caracteres para mensagens de erro imprimíveis.

Use um link simbólico para ativar a gravação de exemplo

O Arduino protege os esboços de exemplo nas bibliotecas. Para contornar isso, crie um link simbólico (mklink no Windows) do diretório da biblioteca de trabalho (controlado por repo / versão) para o diretório Arduino libraries. Isso permitirá que você faça modificações sem precisar copiar / colar suas alterações no diretório Arduino libraries.

Não roube código

Eu realmente tenho que escrever isso em voz alta? Sinta-se livre para usar o código de outras fontes, mas use a atribuição adequada e a manutenção da licença.

Evite duplicar o trabalho e não bifurque o código

Se uma biblioteca já foi gravada, considere adicionar ou aumentar uma biblioteca já criada. Dito isto, trabalhe apenas com colaboradores que sejam responsivos. Entre em contato com o autor com as alterações propostas antes de escrever uma ramificação gigante e enviar um PR. Se eles estiverem abertos a alterações, continue. Se eles falharem em responder ou decidirem que um recurso necessário não é importante para eles (genérica a porta Wire é comum), decida se deve começar do zero ou de um garfo.

Crie uma versão adequada após todas as alterações da biblioteca

A atualização de uma biblioteca requer o aumento correto da versão da biblioteca no arquivo library.properties, a confirmação e a execução de uma liberação que corresponda à versão do arquivo. Isso é tedioso e propenso a erros, por isso criamos uma ferramenta! Use a ferramenta de lançamento SparkFun GitHub para atualizar a versão de uma biblioteca. Leia as Perguntas frequentes do Arduino Library Manager para obter detalhes sobre como o Arduino Library Manager funciona.

Sites que devem ser lidos também:

https://holidayservice-tn.com/meditacao-vipassana-em-chiang-mai-ganhe-clareza-no-mosteiro-do-silencio/

https://draincleaningdenverco.com/como-eu-comecei-a-ganhar-dinheiro-na-internet-minha-historia/

https://clipstudio.com.br/desafio-de-30-dias-3-beber-mais-agua/

https://proverasfestas.com.br/como-otimizar-o-conteudo-que-sera-lido-e-compartilhado/

https://coniferinc.com/usando-a-mistura-de-marketing-para-controlar-o-sucesso/

https://weeventos.com.br/impressao-codigo-bude-net/

https://testmygeekstuff.com/evite-a-armadilha-dos-custos-fundamentos-do-trabalho-independente-bem-sucedido/

https://responsibleradio.com/engenharia-automovel-emprego-e-carreira-na-industria-automobilistica/

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Leia Também  Dias finais para a venda do kit de primavera - Notícias