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

Exibições: 451

Responder esta

Respostas a este tópico

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 !

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço