Construir um sketch para piscar um led com um tempo determinado
O sketch deve conter 3 botões que permitam:
- OK - entrar e sair do menu
- INC - Aumenta o tempo de on/off da rotina para piscar o led
- DEC - Diminui o tempo de on/off da rotina para piscar o led
Funcionamento do sketch:
- Ao iniciar o programa pisca o led
- Se o botão OK for pressionado o programa para de piscar o led e entra em um menu para aumentar ou diminuir o tempo de on/off da rotina para piscar o led
- Montar a simulação
- Montar o hardware para apresentação da atividade
Exemplo - Menu
O exemplo mostrado no sketch abaixo pisca um led.
Ao pressionar o botão OK o programa para de piscar o led e entra no menu
Dentro do menu ao pressionar o botão OK o programa sai do menu volta piscar o led
Fluxograma de funcionamento do skecth
Diagrama de ligação do exemplo
/*
* Nome: menuTempo_0_0_0.ino
*
* Menu de controle do tempo de piscar o led
*
*
* Mostra no LCD o controle de tempo de piscar um LED
*
* O circuito:
* botão de pressão OK conectado ao pino 8 de GND
* Led indicativo conectado ao pino 11
* LCD 16 x 2 I2C – SDA/A4 SCL/A5
*
* Versão:
* 0.0.0 -> Lê as entradas digitais A e B imprime o valor no LCD
* Botão - IDE ARDUINO - Exemplos\02.Digital\Button
* Criado em 2005 by DojoDave <http://www.0j0.org>
* Modificado em 30/08/2011 por Tom Igoe
* This example code is in the public domain.
* https://www.arduino.cc/en/Tutorial/BuiltInExamples/Button
* Arduino Pilger - LCD I2C https://pilger-arduino.blogspot.com/2018/11/blog-post_80.html
*
* Data: 19/10/2021
* Luiz Oscar Ruschel Pilger
*/
// Inclui o código de biblioteca:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// apelidos
#define endereco 0x27 // endereços mais comum 0x27 para o CI Philips PCF8574T
//#define endereco 0x3F // endereços mais comum 0x3F para o CI Philips PCF8574AT
#define colunas 16
#define linhas 2
// entradas
#define btOk 8
// saidas
#define led 11
// criar a intância lcd
LiquidCrystal_I2C lcd(endereco, colunas, linhas); // Criando uma estrutura com o nome "lcd" nos parâmetros indicados
// variáveis globais
byte tempo = 1; // varivale para indicar o tempo em s
bool menu = 0; // variável para indicar dentro (1) ou fora do menu (0)
void delayS (int segundos) {
for (int i = 0; i < 100 * segundos; i++) {
if (digitalRead(btOk) == 0) { // testa o botão ok
while (digitalRead(btOk) == 0); // espera soltar o botão ok
menu = 1; // seta a variável menu para 1 para ter acesso ao menu
}
delay (10);
}
}
void setup() {
// GPIOs - inicializa os pinos digital OK E LED
pinMode(btOk, INPUT_PULLUP); // iniciliaza o pino 8 como entrada com resistor de pull up ativado
pinMode(led, OUTPUT); // iniciliaza o pino 11 como saída
// LCD
lcd.init(); // Inicializando o LCD
lcd.backlight(); // Ligando o BackLight do LCD
}
void loop() {
atualizaLcd();
piscaLed();
// abre o menu
while (menu == 1) {
controleMenu();
}
}
void atualizaLcd(void){
lcd.setCursor(0, 0); // posiciona na primeira coluna (0) e primeira linha (0)
lcd.print("Led Pisca T="); // imprime texto
lcd.print(tempo, DEC); // imprime a variável x no formato decimal
lcd.print("s "); // imprime texto
}
void piscaLed(void) {
// pisca o led com o tempo especificado
digitalWrite(led, HIGH);
delayS(tempo);
digitalWrite(led, LOW);
delayS(tempo);
}
void controleMenu (void) {
lcd.setCursor(0, 0); // posiciona na primeira coluna (0) e primeira linha (0)
lcd.print("Dentro Menu "); // imprime texto
if (digitalRead(btOk) == 0) { // testa o botão ok
while (digitalRead(btOk) == 0); // espera soltar o botão ok
menu = 0; // seta a variável menu para 0 para sair do menu
}
}
esta faltando informações aqui .. onde esta para iniciar o DEC e o INC
ResponderExcluir