Ensinando o Robô a Pensar: Como Organizar e Turbinar Códigos em C++
Até agora, nós criamos projetos onde o Arduino executa comandos diretos: piscar uma luz ou tocar um som. Mas conforme vai aprendendo começamos a inventar robôs maiores, colocar tudo direto no código começa a virar uma bagunça difícil de mudar. Hoje, vamos aprender a organizar e aperfeiçoar o nosso código usando Variáveis Globais e Funções Próprias, deixando o robô pronto para receber superpoderes!
📦 Passo 1: O Poder das Variáveis (A Caixa com Nome)
Conceito: Imagine que você mudou o LED do pino 13 para o pino 7. Se o seu código tiver 20 linhas controlando esse LED, você terá que mudar o número 13 por 7 vinte vezes! Cansativo, né? Para resolver isso, criamos uma Variável no topo do código.
A variável funciona como uma caixa organizadora onde escrevemos uma etiqueta do lado de fora (o nome) e guardamos o número do pino lá dentro. Se precisarmos mudar o pino, mudamos apenas uma vez no topo do código!
// Criamos as caixas antes do setup() para que todo o código as conheça int pinoLed = 13; int pinoBuzzer = 8; int tempoEspera = 500; // Tempo em milissegundos
🛠️ Passo 2: Criando Nossos Próprios Comandos (Funções)
Conceito: O Arduino já conhece comandos como digitalWrite(). Mas e se nós pudéssemos inventar um comando totalmente novo? Por exemplo, um comando chamado comemorar() ou dispararAlarme()?
Na programação, isso se chama Função. Nós agrupamos vários comandos pequenos dentro de um bloco e damos um nome para ele. Depois, quando o robô precisar executar aquela ação, basta chamar o nome que inventamos.
Como construir uma Função em C++
Para criar uma função que não devolve nenhum número, começamos com a palavra void, seguida do nome que escolhemos e de parênteses:
void dispararAlarme() {
digitalWrite(pinoLed, HIGH);
tone(pinoBuzzer, 1500, 200);
delay(200);
digitalWrite(pinoLed, LOW);
noTone(pinoBuzzer);
delay(200);
}
🤖 O Código Perfeito e Organizado
Veja abaixo como o código principal (dentro do loop) fica incrivelmente limpo e fácil de ler quando usamos variáveis e funções. Qualquer pessoa consegue entender o que o robô está fazendo de verdade!
// 1. DECORANDO O QUARTO (Variáveis Globais)
int pinoLed = 13;
int pinoBuzzer = 8;
int pinoBotao = 2;
void setup() {
pinMode(pinoLed, OUTPUT);
pinMode(pinoBuzzer, OUTPUT);
pinMode(pinoBotao, INPUT);
}
// 2. INVENTANDO AS AÇÕES DO ROBÔ (Funções Personalizadas)
void dispararAlarme() {
digitalWrite(pinoLed, HIGH);
tone(pinoBuzzer, 1500, 100);
delay(100);
digitalWrite(pinoLed, LOW);
delay(100);
}
void modoSeguro() {
digitalWrite(pinoLed, LOW);
noTone(pinoBuzzer);
}
// 3. A ROTINA DO ROBÔ (Super Limpa e Fácil!)
void loop() {
// Se o botão for apertado, o robô executa o alarme
if (digitalRead(pinoBotao) == HIGH) {
dispararAlarme();
}
// Senão, ele fica no modo seguro
else {
modoSeguro();
}
}
🧠 Como Acrescentar Mais Lógicas Agora?
Agora que o código está organizado por blocos de funções, ensinar novas lógicas fica muito mais divertido. Se quiser adicionar uma "Dança do Robô" ou um "Modo Pisca-Pisca Festivo", você não precisa mexer na estrutura do alarme. Ela só precisa criar uma função nova, como void dancaDoRobo(), e chamá-la dentro do if ou do else!
Vamos criar uma terceira função chamada
void bipDeLigado() que toque um som bem rápido apenas uma vez quando o robô inicia. Dica: onde essa função deve ser colocada para rodar só uma vez? Exatamente, dentro do setup()! Isso consolida conhecimento sobre as estrutura de um código.
Comentários
Postar um comentário