I espero que seja uma simples solicitação de um novato ao Arduino e à programação. Eu entendi que uma vez que um programa entra em uma seção de loop vazio, ele executa um loop indefinidamente. No entanto, recentemente vi exemplos de sketches onde outra seção void $$$$$ segue o fechamento (por}) do loop void. Enquanto escrevo isto, estou olhando para um exemplo relativo a um display de 7 segmentos onde “void Num_Write (int)” segue o fechamento do loop void. Se a seção “loop” faz exatamente isso, como fui levado a crer, como uma seção seguinte é acessada?
Obrigado, Rob
Comentários
- Ao chamá-lo. tutorialspoint.com/cplusplus/cpp_functions.htm
- Ele ' também é abordado no Referência do Arduino: arduino.cc/en/Reference/FunctionDeclaration
- Para completar: cplusplus.com/doc/tutorial/functions
Resposta
O void loop()
seção é uma função, o mesmo que void setup()
é uma função. Ao iniciar o programa Arduino de outra função, que você não consegue ver no IDE, chame setup()
e depois chame loop()
repetidamente.
Estas outras funções que você viu, ou seja, void Num_Write(int n)
podem ser chamadas de setup()
ou loop()
e eles irão executar suas instruções antes de retornar à função que os chamou. Também é possível que Num_Write()
possa chamar outras funções antes de retornar o controlador para a função que chamou .
O tipo void
é usado para representar nada (na verdade é mais complexo do que isso, mas para este nível de explicação nada servirá). Outras funções podem retornar outros tipos int
, char
, bool
por exemplo. Portanto, se tivéssemos uma função assim:
int theMeaningOfLife(void) { return 42; }
Esta é uma função que retorna um int
(um umber), então você a chamaria assim:
void setup() { int number = theMeaningOfLife(); }
Há um problema, a função deve ser declarada ANTES de ser usada, isso permite que o compilador sabe a que você está se referindo. A maneira mais simples de fazer isso é escrever a função acima da função que a está chamando. A segunda maneira é apenas escrever a assinatura da função acima da função usando-a, ou seja:
int theMeaningOfLife(void); void setup() { int number = theMeaningOfLife(); }
A melhor maneira (mas nem sempre prática em um Arduino ) é ter todas as declarações de função em um arquivo de cabeçalho (.h) e o código em um arquivo .cpp. (Dê uma olhada na biblioteca para ver o que quero dizer).
Resumo
Há apenas uma função que é chamada repetidamente e é a loop
função. Só porque uma função retorna void não significa que vai repetir repetidamente.
Comentários
- Você escreveu: “ a função deve ser declarada ANTES de ser usada ”. Na verdade, o IDE do Arduino executa seu código por meio de uma etapa de pré-processamento que faz isso para você, o que significa que você não precisa fazer isso sozinho. Eu ainda consideraria uma boa prática seguir essa regra, apenas porque ela torna o código compilável fora do IDE, por exemplo, com um Makefile .
- @EdgarBonet – Obrigado, nunca soube disso. Acho que devo esquecer, caso contrário, ' começarei a tentar no trabalho e acabarei arrancando meus cabelos tentando descobrir por que [ele] ganhou ' t compilar. 🙂