Pessoal, boa tarde !
Hoje é o casório da minha irmã e tive a ideia de colocar um arduino num capacete do noivo.
A ideia é ficar passando uma mensagem o tempo todo e quando eu apertar um botão (interrupção por hardware) aparecer uma mensagem:
Botao 1: "Pao duro"
Botao 2: Mão de vaca
Sobre como escrever no display, eu nao tenho duvidas.... meu problema é a rotina parar ler o botão na hora que eu apertar ir para a mensagem direto, executando o texto (isso eu sei) e retornando para a mensagem padrão.
O que eu fiz até agora e to batendo cabeça:
/*--------------------------
PABLO SAN JUAN - 10/11/2012
-------------------------*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //LCD(RS, E, D4, D5, D6, D7)
int botao0 = 0
int botao1 = 1
int var0 = 0
int var1 = 0
void setup()
{
lcd.begin(16, 2); //LCD com 16 colunas e 2 linhas
pinMode(botao0, INPUT);
pinMode(botao1, INPUT);
}
void loop(){
var0 = digitalRead(botao0) {
void botao();
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("*ENFIM CASADOS*");
lcd.setCursor(1,1);
lcd.print("PERLA S2 ANDRE");
delay(1000);
Piscar(200);
delay(1000);
lcd.clear();
delay(500);
lcd.setCursor(1,0);
lcd.print("COLABOREM !!!!");
lcd.setCursor(2,1);
lcd.print("LIBERA A ONCA");
delay(1000);
Piscar(300);
delay(1000);
lcd.clear();
delay(500);
lcd.setCursor(1,0);
lcd.print("COLABOREM !!!!");
lcd.setCursor(2,1);
lcd.print("LIBERA A ONCA");
delay(1000);
Piscar(300);
delay(3000);
//Leva para esquerda
for (int i=0; i<16; i++){
lcd.scrollDisplayLeft();
delay(100);
}
delay(500);
lcd.clear();
lcd.setCursor(2,0);
LetraPorLetra("OBRIGADO POR");
lcd.setCursor(1,1);
LetraPorLetra("COMPARECER !!!");
delay(2000);
//Leva para direita
for (int i=0; i<16; i++){
lcd.scrollDisplayRight();
delay(100);
}
delay(2000);
}
void Piscar(int tempo){
for (int i=0; i<11; i++){
lcd.noDisplay();
delay(tempo);
lcd.display();
delay(tempo);
}
}
void LetraPorLetra(String texto){
int tamanho = texto.length();
for (int i=0; i<tamanho; i++){
lcd.print(texto.substring(i,i+1));
delay(130);
}
}
void botao()
{
lcd.clear();
lcd.setCursor(3,0);
lcd.print("PAO DURO");
lcd.setCursor(1,1);
lcd.print("LIBERA A ONCA");
delay(1000);
Piscar(200);
delay(1000);
lcd.clear();
delay(500);
}
Obrigado !
Pablo - Guarulhos / SP
Tags:
Acho que o ideal seria vc criar uma delaymeu() que alem de gerar o delay() verifica os botoes.
Vc pode por um for(;;) pra quantidade de delay desejado e colocar {testabotao1;testabotao2;delay(1);} senao um toque rapido no botao pode ser ignorado pq o proc estava parado no delay()
Caso algum esteja apertado apresenta a mensagem correspondente.
Senão vc vai ter que esperar o ciclo todo rodar pra ele entrar na mensagem especial.
Cara.
Do modo abaixo funciona a contento..
Nao esta perfeito, mas da pro gasto acho...
testa ai.
/*--------------------------
PABLO SAN JUAN - 10/11/2012
-------------------------*/
#include <LiquidCrystal.h>
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //LCD(RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
int botao0 = 0;
int botao1 = 1;
int var0 = 0;
int var1 = 0;
void setup()
{
lcd.begin(16, 2); //LCD com 16 colunas e 2 linhas
pinMode(botao0, INPUT);
pinMode(botao1, INPUT);
attachInterrupt(botao0, botao_0, FALLING); // usa o pino digital 2 para interrupção
attachInterrupt(botao1, botao_1, FALLING); // usa o pino digital 3 para interrupção
}
void loop(){
//var0 = digitalRead(botao0) ;
//void botao();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("*ENFIM CASADOS*");
lcd.setCursor(1,1);
lcd.print("PERLA S2 ANDRE");
delay(1000);
Piscar(200);
delay(1000);
lcd.clear();
delay(500);
lcd.setCursor(1,0);
lcd.print("COLABOREM !!!!");
lcd.setCursor(2,1);
lcd.print("LIBERA A ONCA");
delay(1000);
Piscar(300);
delay(1000);
lcd.clear();
delay(500);
lcd.setCursor(1,0);
lcd.print("COLABOREM !!!!");
lcd.setCursor(2,1);
lcd.print("LIBERA A ONCA");
delay(1000);
Piscar(300);
delay(3000);
//Leva para esquerda
for (int i=0; i<16; i++){
lcd.scrollDisplayLeft();
delay(100);
}
delay(500);
lcd.clear();
lcd.setCursor(2,0);
LetraPorLetra("OBRIGADO POR");
lcd.setCursor(1,1);
LetraPorLetra("COMPARECER !!!");
delay(2000);
//Leva para direita
for (int i=0; i<16; i++){
lcd.scrollDisplayRight();
delay(100);
}
delay(2000);
}
void Piscar(int tempo){
for (int i=0; i<11; i++){
lcd.noDisplay();
delay(tempo);
lcd.display();
delay(tempo);
}
}
void LetraPorLetra(String texto){
int tamanho = texto.length();
for (int i=0; i<tamanho; i++){lcd.print(texto.substring(i,i+1));
delay(130);
}
}
void botao_0()
{ noInterrupts();
lcd.clear();
lcd.setCursor(3,0);
lcd.print("PAO DURO");
lcd.setCursor(1,1);
lcd.print("LIBERA A ONCA");
interrupts();
}
void botao_1()
{
noInterrupts();
lcd.clear();
lcd.setCursor(3,0);
lcd.print("MAO DE VACA");
lcd.setCursor(1,1);
lcd.print("LIBERA A ONCA");
interrupts();
}
Grande Gino.... joguei e o display nao apareceu nada....
Mesmo assim, agradeço imensamente a ajuda !
putz esqueci de falar.. a numeracao dos pinos do display esta trocada. é so descomentar uma linha e comentar a outra.
AHHAH.. foi a primeira coisa q fiz...quando mudei, ficou em loop as mensagens. Parece que tem duas coisas escrevendo ao mesmo tempo.
To gravando a flash sem os botoes mesmo... Abraço e obrigado !
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por