Figura 01 - Controle de Led's por chaves |
Primeiro, atribuímos os novos pinos de chaves na variáveis e configuramos como entradas e Led's como saídas, depois associamos cada chave á uma saída para definir o funcionamento.
Para esta aplicação utilizei a "Multi-Funcion Shield" sem o uso de uma biblioteca Arduino. Se você está elaborando projetos simples que exigem interruptores, leds e uma campainha, talvez não precise de tudo isso, então este guia não tem como objetivo substituir o uso da biblioteca, mas fornecer ao usuário uma maneira de acessar facilmente os recursos da placa "Multi-Funcion Shield".
Figura 02 - "Multi-Funcion Shield" |
- Um "Reset button" instalado para reinicializar o Arduino conectado.
- Três "Push buttons" botões de pressão definidos pelo usuário conectado nos pinos de entradas analógicas A1, A2, A3.
- Um "Potentiometer" para que você insira uma tensão variável no Arduino, conectado ao pino de entrada analógica A0.
- Um "Buzzer" que não é acionado diretamente de um pino do Arduino, mas controlado por um transistor conectado ao pino digital D3.
- Um "LED display" de 4 dígitos e 7 segmentos que é acionado por meio de registradores de deslocamento 74HC595 para selecionar o dígito e os segmentos desse dígito a serem energizados.
- Quatro LEDs montados na placa (pinos digitais D10, D11, D12, D13).
A primeira coisa que fazemos no início do programa é colocar uma pequena observação sobre o nome do programa, sua função e quem o criou:
1 2 3 | //Programa : Minuteria e pisca Leds com Arduino // Autor : Sinésio Gomes// Data : 18/05/2023 |
Após os comentários, vem é realizado a declaração e estado inicial das variáveis, com isso cada pino será associados á um componente, não sendo mais necessário saber qual pino está o componente.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Definição dos pinos de entradas #define S0 A1 // Nome do pino A1 #define S1 A2 // Nome do pino A2
#define S2 A3 // Nome do pino A3
// Definição dos pinos de saídas #define Led_Vm 13 // Nome do pino 13
#define Led_Vd 12 // Nome do pino 12
#define Buzzer 3 // Nome do pino 3
// Declaração do tipo e estado inicial das variáveis bool estado_S0 = 0; // Reset do pino A1
bool estado_S1 = 0; // Reset do pino A2
bool estado_S2 = 0; // Reset do pino A3 |
A terceira parte da programação é a estrutura do setup(). É nela que definimos quais componentes (pino) do Arduino serão utilizados como entradas e saídas e o estado inicial dos pinos de saída.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | void setup() { //Definição das chaves como entradas e dos led,s como saida
pinMode(S0, INPUT); // Pinos como entradas
pinMode(S1, INPUT);
pinMode(S2, INPUT);
pinMode(Led_Vm, OUTPUT); // Pinos como saídas
pinMode(Led_Vd, OUTPUT);
pinMode(Buzzer, OUTPUT);
//Apaga os led,s da saída
digitalWrite (Led_Vd, 1); // Reset dos pinos
digitalWrite (Led_Vm, 1);
digitalWrite (Buzzer, 1);
} |
Por último, temos o loop(), que contém as instruções para acender e apagar os led's conforme são acionados as chaves, cada chave terá uma função diferente.
37 38 39 40 41 42 43 44 75 | void loop() // Laço principal{ //Leitura das chaves estado_S0 = digitalRead (S0); // Lê entrada S0 estado_S1 = digitalRead (S1); // Lê entrada S1
estado_S2 = digitalRead (S2); // Lê entrada S2
// Agora será escrito a função de cada chave ... } |
Para esta estrutura de programação iremos utilizar o "if". O if é uma das estruturas mais básicas de programação em geral. O "if" significa "se" em inglês, e é exatamente isso que ele faz: ele verifica uma expressão e, apenas se ela for verdadeira, executa um conjunto de comandos. Em linguagem natural, ele executa uma lógica do tipo: "se isso for verdadeiro, então faça aquilo". Quando usamos um "if", ele segue o seguinte formato:
if(condição) { ... }
A lógica é muito simples: sempre que a condição for verdadeira, os comandos entre { e } são executados, caso contrário o programa prossegue sem executá-los. Vamos ver então como fica a função.
Função condicional da primeira chave, que liga 01 led, dentro do "loop()" ...
45 46 47 48 | // Função da primeira chave, se acionada if (estado_S0 == 0) { digitalWrite (Led_Vd, 1);
digitalWrite (Led_Vm, 0); }
|
Função condicional da segunda chave, que pisca dois Led's três vezes, dentro do "loop()" ...
49 50 51 52 53 54 55 65 | // Função da segunda chave, se acionada if (estado_S1 == 0) { digitalWrite (Led_Vd, 0);
|
Agora iremos utilizar o "if-else". O if-else, também conhecido como if-then-else, pode ser visto como uma extensão do comando if. Else em inglês significa "caso contrário", e ele faz exatamente o que o nome diz: "se isso for verdadeiro, então faça aquilo, caso contrário, faça outra coisa". Ele segue o seguinte formato:
if(condição) { ... } else { ... }
Para a função condicional da terceira chave, que liga o Buzzer por 5 segundos, e apagar os Led's dentro do "loop()" ...
65 66 67 68 69 70 71 72 73 74 75 | // Função da terceira chave, se acionada if (estado_S2 == 1) {digitalWrite (Buzzer, 1); }
|
O arquivo do diagrama elétrico - Semáforo de duas vias estará disponível em: 23_05_02_Controle_de_Led's_SRG (PDF).
Exercício proposto pelo Professor Murilo Henrique Miranda.
© Direitos de autor. 2023: Gomes; Sinésio Raimundo. Última atualização: 16/05/2023
Nenhum comentário:
Postar um comentário