Neste exercício vamos aprender como separar o código de um Sketch do Arduino em múltiplos arquivos
Para separar um Sketch do Arduino entre múltiplos arquivos .ino, basta adicionar mais arquivos ao mesmo diretório.
O arquivo que possuir o mesmo nome do diretório do sketch é considerado o arquivo 'principal', e portanto deve ter os métodos setup() e loop().
O restante dos arquivos são concatenados em ordem alfabética, portando podem haver problemas relacionados a arquivos anteriores referenciando entidades definidas somente em arquivos posteriores nessa ordem.
Exemplo:
// principal/extra.ino
void minhaFuncao() {
Serial.println("Olá de outro arquivo!");
}// principal/principal.ino
void setup() {
Serial.begin(9600);
}
void loop() {
minhaFuncao();
}Outra alternativa mais complexa é utilizar uma combinação de arquivos .h + .cpp para introduzir um outro módulo ao seu sketch.
Esta é a estrutura mais tradicional de projetos em C++, e pode-se mostrar necessária em cenários fora da IDE do Arduino.
O arquivo Header deve conter as definições das entidades definidas pelo arquivo C Plus Plus, que deve conter as implementações.
Exemplo:
// soma.h
// A definição de uma função não necessita de nomes de parâmetros, somente seus tipos
int somar2(int, int);int somar2(int x, int y) {
return x + y;
}Para a execução desse cenário você necessita somente de um pushbutton conectado a seu Arduino.
- 1 Pushbutton
- 1 Resistor 300 Ohm
Faça que a porta serial informe se o botão está pressionado ou não num intervalo razoável.
Para isto, crie funções em um arquivo secundário e as invoque das funções setup() e loop() do arquivo principal.
Neste passo opcional, leia na seção de Links a documentação de como criar classes no C++ e crie uma classe para manipular com maior conveniência um Pushbutton.
Ela deve receber como parâmetros:
- Um pino no qual o pushbutton que deve manejar está conectado
- Um pointer para uma função de callback que seja chamada quando o botão é pressionado
- Opcionalmente um tempo mínimo entre detectar dois pressionamentos do botão
Desafio extra: Adicionar suporte a "múltiplos cliques", passando a quantidade de pressionamentos detectados no intervalo de tempo para o callback.
Quer dizer, ao invés da assinatura do callback ser void (*callback)(), torná-la void (*callback)(int clicks).