Boas práticas de progamação em IDE Arduino

Que boas práticas se recomendam neste ambiente IDE? O uso de variáveis globais tem impacto do desempenho do sistema? De que forma é que organizam as funções? o void loop() é colocado antes ou depois das outras funções?
Uma vez um programador disse me que a função principal, main() no C deve ser a ultima da sequencia. Isto é coerente?
Estas questões são relevantes para mim. Agradeço os vossos inputs. Obrigado :slight_smile:

O uso de variáveis globais afecta principalmente a segurança do código. Se a variável não for global, apenas pode ser alterada num sítio relativamente pequeno. Se for global, pode ser alterada em todo o lado e isso pode dar chatice.

Normalmente na maior parte do código do Arduino isso não é um grande problema, mas não deve ser feito.

O arduino esconde o motivo pelo qual a main() é a última função a ser chamada. O motivo pelo qual isso é feito em C puro é para garantir que o compilador sabe da existência da função antes de ser chamada. Isso também pode ser resolvido fazendo a declaração da função no início e depois escrever o resto onde quiseres no código.

Regra geral, as funções são divididas em ficheiros separados para poderem ser mantidas de forma mais limpa. Isso é aliás um dos problemas do Arduino já que a IDE é horrível e não se dá a fazer esse tipo de divisão de código. Por outro lado, podes sempre criar uma biblioteca para incorporar esse código em específico e apenas chamar código no script do Arduino em alto nível.

Neste caso a pode-se considerar como main() a loop(), não é? :slight_smile:

Não...

A main() regra geral seria uma função deste género:

int main () {

//código de setup do microcontrolador
while (1) {
  //código do microcontrolador
}


}

No pedaço de código em cima, a função setup é chamada no lugar do primeiro comentário e a função loop() substitui o while(1).
Isto está definido num dos ficheiros do Arduino, mas não me lembro exactamente qual. Resumindo, a loop e setup fazem parte da main.

Sim, entendi. Aliás, depois de ver o que escreveste faz todo o sentido. Obrigado.

:slight_smile:

Adicionar apenas que muita gente que começa a programar microcontroladores, esquece-se do loop() ou while(1), porque até então um programa tem uma tarefa em especifico ou é programada numa linguagem diferente como Visual Basic...

Eu lembro-me de ser um desses e perguntar ao professor porque é que o meu programa não funciona. LOL