LCD, Menu and Buttons
guys, i'm developing project filling machine there mat , pump , sensor , keypad , buttons , using arduino mega
- main question in regards lcd menu want on first screen after being triggered " bverde " button message hostname , passing 1 second show amount bottled . amount value entered in keypad ;
- after value entered keypad second screen shown , screen told amount of bottled , pressing " bamarelo " changes screen third screen show level of storage tank , pressing " bamarelo " again goes second screen , ie " bamarelo " act options button moves between these 2 screens ;
- using decrementador want same decrement value entered in first screen showing message lot ready , entering new value ;
- third button " bvermelho " emergency button pressed ie machine hangs.
- whole program based on examples , projects found here on forum , other sites .
follows program :
- main question in regards lcd menu want on first screen after being triggered " bverde " button message hostname , passing 1 second show amount bottled . amount value entered in keypad ;
- after value entered keypad second screen shown , screen told amount of bottled , pressing " bamarelo " changes screen third screen show level of storage tank , pressing " bamarelo " again goes second screen , ie " bamarelo " act options button moves between these 2 screens ;
- using decrementador want same decrement value entered in first screen showing message lot ready , entering new value ;
- third button " bvermelho " emergency button pressed ie machine hangs.
- whole program based on examples , projects found here on forum , other sites .
follows program :
code: [select]
#include <keypad.h>
#include <liquidcrystal.h>
liquidcrystal lcd(22,23,24,25,26,27); // declaraÇÃo dos pinos lcd no arduino
// definiÇÃo dos botÕes - verde. vermelho, amarelo
#define bverde a1 // os pinos analógicos podem ser
#define bamarelo a2 // usados como digitais, bastando
#define bvermelho a3 // referenciá-los por a0, a1..
#define bdown a4
#define bverde0 90 // valor de referência que a
#define bamarelo0 91 // função checkbutton() passa
#define bvermelho0 92 // indicando que um botão foi
#define bdown0 93 // solto
boolean averde, aamarelo, avermelho, adown; // grava o ultimo valor lidos nos botões.
// utilizado pela função checkbutton p/ identificar quando há uma alteração no estado pino dos botões
// definiÇÃo dos pinos e valores para o sensor, esteira e bomba
int contador = 0;
int sensor = 0;
int sensorpin = a0;
int motoresteira = 11;
int motorbomb= 12;
int estadomotor=0;
int estadosensor=1;
int led1=8;
int led2=9;
int led3=10;
int led4=2;
int buzzer=7;
int variavel; // variavel ser alterada pelo menu
char state=1; // variÁvel que guarda posiÇÃo atual menu
int dec=-1;
int i=0;
const byte lin = 4; // teclado possui 4 linhas
const byte col = 3; //teclado possui 3 colunas
char keys[lin][col] = {
{//matriz correspondente aos caracteres keypad
'1','2','3' }
,
{
'4','5','6' }
,
{
'7','8','9' }
,
{
'*','0','#' }
};
byte linpins[lin] = {
28,29,30,31}; //pinos arduino correspondentes colunas
byte colpins[col] = {
32,33,34}; //e linhas da matriz
keypad keypad = keypad( makekeymap(keys), linpins, colpins, lin, col );
char key = keypad.getkey();
void setup()
{
lcd.begin(16, 2); // iniciando biblioteca lcd
serial.begin(9600); // definiÇÃo da porta serial
pinmode(bverde, input); // botões
pinmode(bamarelo,input);
pinmode(bvermelho, input);
pinmode(bdown, input);
digitalwrite(bverde, high); // aciona o pull-up interno
digitalwrite(bamarelo,high); // dos botões
digitalwrite(bvermelho, high);
digitalwrite(bdown, high);
pinmode(sensorpin, input); //definir se variavel É entrada(imput) ou saida(output) de dados
pinmode(motoresteira, output);
pinmode(motorbomb, output);
pinmode(estadosensor, input);
pinmode(led1, output);
pinmode(led2, output);
pinmode(led3, output);
pinmode(led4, output);
pinmode(buzzer, output);
}
void esteira(){
sensor = digitalread(sensorpin); // variavel sensor corresponde ao sensorpin que estÁ ligado porta analÓgica a0 arduin
if(sensor == low){
digitalwrite(motoresteira, high); // se o sensor nÃo estiver acionado o motor da bomba esta parado e o led1 asceso
digitalwrite(led1,high);
digitalwrite(led2, low);
digitalwrite(motorbomb, low);
digitalwrite(buzzer, low);
}
if(sensor == high) { // se o sensor estiver acionado o motor da esteira esta parado e o led1 apaga
digitalwrite(motoresteira, low); // o motor da bomba liga e o led2 ascende e um toque de 2 segundo É
digitalwrite(motorbomb, high); // acionado pelo buzzer
digitalwrite(led1, low);
digitalwrite(led2, high);
delay(8000);//este delay serve para bomba jogar 200ml de agua na garrafa
contador++;
sensor == !sensor; //o sinal sensor É invertido para funÇao retornar de onde estava
}
estadosensor = digitalread(sensorpin); // o sinal sensor É mostrado no serial monitor
serial.println(sensor);
if(estadosensor == high){ // funÇao retorna ao estado inicial
digitalwrite(motoresteira, high);
digitalwrite(motorbomb, low);
digitalwrite(led1, high);
digitalwrite(led2, low);
digitalwrite(buzzer,low);
delay(2000);
}
}
void loop()
{
esteira();
switch (state) { // define checa qual tela atual
case 1: // executado quando na tela 1
switch (checkbutton()) {
case bverde:
lcd.setcursor(0,0);
lcd.print("maquina envase");
delay(1000);
lcd.setcursor(0,0);
lcd.print("quantidade lote:");
set_state(1);
break;
case bamarelo:
lcd.clear();
set_state(2); // antes de mudar de tela, é necessário limpar o
break;
lcd.clear();
set_state(3); // display com função lcd.clear()
// break;
default: // caso nenhum botão tenha sido apertado, ela executa set_state
set_state(1); // mesmo assim para atualizar o display.
}
break;
case 2: // executado quando na tela 2
switch (checkbutton()) {
case bverde:
lcd.clear();
set_state(1);
break;
case bamarelo: //
lcd.clear();
set_state(3);
break;
lcd.clear();
set_state(1);
break;
lcd.clear();
set_state(2);
break;
default:
set_state(2);
}
break;
case 3: // executado quando na tela 3
switch (checkbutton()) {
case bverde:
lcd.clear();
set_state(1);
case bamarelo:
lcd.clear();
set_state(2);
break;
lcd.clear();
set_state(3);
break;
lcd.clear();
set_state(1);
break;
default:
set_state(3);
}
break;
case 4: // executado quando na tela 4
switch (checkbutton()) {
case bamarelo:
lcd.clear();
set_state(1);
break;
default:
set_state(1);
}
break;
default:
;
}
}// fim loop
char checkbutton() {
if (averde!=digitalread(bverde)) {
averde=!averde;
if (averde) return bverde0;
else return bverde;
}
else
if (aamarelo!=digitalread(bamarelo)) {
aamarelo=!aamarelo;
if (aamarelo) return bamarelo0;
else return bamarelo;
}
else
if (avermelho!=digitalread(bvermelho)) {
avermelho=!avermelho;
if (avermelho) return bvermelho0;
else return bvermelho;
}
else
if (adown!=digitalread(bdown)) {
adown=!adown;
if (adown) return bdown0;
else return bdown;
}
else
return 0;
}
void producao() // funÇÃo que define quantidade de garrafas serem envasadas no dia
{
char key = keypad.getkey();
if (key != no_key){
lcd.setcursor(i,2);
lcd.print(key);
lcd.print(" garrafas");
i++;
}
}
void set_state(char index) {
state = index; // atualiza variável state para nova tela
switch (state) { // verifica qual tela atual e exibe o conteúdo correspondente
case 1: //==================== state 1
producao();
break;
case 2: //==================== state 2
lcd.setcursor(0,0);
lcd.print("qnt. envasada:");
lcd.setcursor(0,1);
lcd.print(contador); // mostra os segundos na tela
lcd.print(" garrafas");
delay(20);
break;
case 3: //==================== state 3
lcd.setcursor(0,0);
lcd.print("nivel tanque");
lcd.setcursor(1,2);
lcd.print("%");
break;
case 4: //==================== state 4
break;
default:
;
}
}
please re-attach code using code # button not quote button.
Arduino Forum > Using Arduino > Programming Questions > LCD, Menu and Buttons
arduino
Comments
Post a Comment