Lições em C, Arduino C

Uma das razões pelas quais me interessei pelo Arduino, além do meu interesse pela electrónica, foi pela possibilidade de programar em C, neste caso Arduino C que inclui algumas diferenças e em alguns casos mistura com C++.

Até agora tenho aproveitado para fazer uma reciclagem no C e também em algumas técnicas e truques de programação. Para além de criar ficheiros com código para ser referênciado, como a biblioteca L293x, também tenho usado algumas técnicas para debug de problemas, como por exemplo:

#define DEBUG
#ifdef DEBUG
  #define DEBUG_PRINT(x) Serial.print(x)
  #define DEBUG_PRINTLN(x) Serial.println(x)
#else
  #define DEBUG_PRINT(x)
  #define DEBUG_PRINTLN(x)
#endif

Com este código no início do programa (não esquecer de inicializar a porta série) podemos facilmente mandar escrever valores de variáveis sem ter que escrever ou comentar/descomentar todo o código. Podemos apenas comentar a linha #define DEDUG e todo o código auxiliar desaparece do binário compilado.

[código Arduino]
DEBUG_PRINT("Valor: ");
DEBUG_PRINTLN(valor);
[código Arduino]

Outra técnica de debug que por vezes uso em conjunto a porta série, é a conjugação com a função millis(). O objectivo é reduzir a quantidade de dados enviado para a porta-série, fazendo apenas uma amostragem de x em x tempo, o suficiente para perceber o conteúdo da variável e o funcionamento do programa.

Ao contrário de quando se usa a função delay(), esta técnica não pára a execução do programa, permitindo assim manter o normal funcionamento sem a interrupção. Para tal coloca-se o seguinte código quando pretendemos enviar para a porta série um valor:

long millisAntes = 0; // colocar como variável global

/* colocar junto à variável */
if (millis() - millisAntes > 1000) {
  Serial.println(valor);
  millisAntes = millis();
}

Etiquetas: ,

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s


%d bloggers like this: