Código para o menu no LCD

Dependencies:   mbed SDFileSystemSD TextLCD

Fork of TextLCD_HelloWorld2 by Wim Huiskamp

main.cpp

Committer:
claraluques
Date:
2018-05-11
Revision:
9:86b5a317fcd4
Parent:
8:b80f50544ddd
Child:
10:97002056ecda

File content as of revision 9:86b5a317fcd4:

#include "mbed.h"
#include "TextLCD.h"
 /*
// Host PC Communication channels
Serial pc(USBTX, USBRX); // tx, rx
 
//I2C Communication
I2C i2c_lcd(D14,D15); // SDA, SCL

//Botão push
InterruptIn botao(D7);

//LCD instantiation 
TextLCD_I2C lcd(&i2c_lcd, 0x7E, TextLCD::LCD20x4);         // I2C exp: I2C bus, PCF8574 Slaveaddress, LCD Type

//variáveis int
int colunas = lcd.columns();
int linhas = lcd.rows();
int c1 = 510000000;
int pontosl = 10;
int botpres;

//variáveis float
float coordx = 123;
float coardy = 456;
float coardz = 789;

//funções
void botao_press(void);
void botao_solto(void);

int main() { 
    lcd.setBacklight(TextLCD::LightOn); //liga backlight
    lcd.cls();        
    lcd.printf("Certifique-se de que voce esta seguro para comecar");
    
    botao.rise(&botao_press);
    botao.fall(&botao_solto); 
    wait(2);
    
    while(1){        
        while(1) {  
           
            
            if (c1>500000000) {      
                lcd.cls();
                lcd.printf("FUNCAO JOG");
                lcd.locate(0,1);
                //lcd.printf("X: %.1f Y: %d.1 Z: %d.1", coordx, coordy, coordz);
                lcd.locate(0,2);
                lcd.printf("Aperte > ok p/ salvar o ponto %c", 0x3E);
                //wait(0.5)
                //lcd.printf("Aperte ok p/ salvar o ponto %c", 0xff);
                InterruptIn botao(D7);
                c1 = 0;
                }
                
            c1++;
            
            if(botpres) { //se pressionado, aparece a tela de ponto salvo com contagem de pontos restantes
                lcd.cls(); 
                lcd.locate(0,0);
                lcd.printf("Voce salvou um ponto");
                lcd.locate(0,2);
                pontosl--;
                lcd.printf("Pontos livres: %d",pontosl);
                wait(2);
                c1=510000000;   
                break;   
                } 
        } 
    }
} 

void botao_press(void){
          botpres = 1;
          printf("pressionado\n\r");
          }
void botao_solto(void) {
          botpres = 0;
          printf("solto\n\r");
          }
               */
               
//#include mbed.h
//#include "TextLCD.h"

// Host PC Communication channels
Serial pc(USBTX, USBRX); // tx, rx
 
//I2C Communication
I2C i2c_lcd(D14,D15); // SDA, SCL

//Botão push
InterruptIn botao_enter(D13);
InterruptIn botao_cima(D10);
InterruptIn botao_baixo(D9);

//LCD instantiation 
TextLCD_I2C lcd(&i2c_lcd, 0x7E, TextLCD::LCD20x4);         // I2C exp: I2C bus, PCF8574 Slaveaddress, LCD Type

//variáveis int
//int max = 3;
//int min = 0;
int bot_enter;
int bot_cima;
int bot_baixo;
int penter = 0;
int pcima = 0;
int pbaixo = 0;
int cola;
int exec;

//variáveis float
float cx = 120.458;
float cy = 457.854;
float cz = 782.659;
float cx_salva;
float cy_salva;
float cz_salva;

//funções interrupt
void botenter_press(void);
void botenter_solto(void);

void botcima_press(void);
void botcima_solto(void);

void botbaixo_press(void);
void botbaixo_solto(void);

//criar classe "menu" (funções das telas)
class Menu{
    public:
    int linha;
    //int coluna;
    int func;
    
    void movercursor(int min, int max, int col){ //função para mover cursor de seleção
        linha = min;
        lcd.locate(col,min);
        lcd.printf("%c", 0x3E);
        while (bot_enter==penter){
            if (bot_cima==1){
                if (linha==min){
                    lcd.locate(col,min);
                    lcd.printf(" ");
                    linha=max;
                    lcd.locate(col, linha);
                    lcd.printf("%c", 0x3E);
                    } 
                else {
                    lcd.locate(col,linha);
                    lcd.printf(" ");
                    linha--;
                    lcd.locate(col, linha);
                    lcd.printf("%c", 0x3E);
                    }  
                bot_cima = 0;
                }
            if (bot_baixo==1){
                if (linha==max){
                    lcd.locate(col,max);
                    lcd.printf(" ");
                    linha=min;
                    lcd.locate(col, linha);
                    lcd.printf("%c", 0x3E);
                    }
                else {
                    lcd.locate(col,linha);
                    lcd.printf(" ");
                    linha++;
                    lcd.locate(col, linha);
                    lcd.printf("%c", 0x3E);
                    }
                bot_baixo = 0;
                }
            //lcd.locate(col, linha);
            //lcd.printf("%c", 0x3E);
            //printf("%d \n\r",linha);
            //printf("%d %d %d \n\r", bot_enter, bot_cima, bot_baixo);
            //wait_ms(500);
            }
            //printf("%d \n\r",linha);            
        }
        
                       
    //func 0
    void inicializar(){ //função tela incial de boas-vindas
        lcd.cls();
        lcd.locate(4,0);
        lcd.printf("Bem-vindo(a)");
        lcd.locate(0,1);
        lcd.printf("Utilize seu EPI para operar a maquina.");
        wait(1);
        func = 1;
        }
    
    //func 1    
    void menuprincipal(){ //função menu principal
        bot_enter = 0;
        lcd.cls();
        lcd.locate(1,0);
        lcd.printf("Modo JOG");
        lcd.locate(1,1);
        lcd.printf("Modo Automatico");
        lcd.locate(1,2);
        lcd.printf("Config");
        lcd.locate(1,3);
        lcd.printf("Zerar");
        movercursor(0,3,0);
        if (bot_enter!=penter){
            if (linha==0){
                func = 2;
                }
            else if (linha==1) {
                func = 3;
                }
            else if (linha==2) {
                func = 4;
                }
            else if (linha==3) {
                func = 8;
                }
            }
        } 
        
        
    //func 2    
    void jog(){ //função tela jog
        bot_enter = 0;
        lcd.cls();
        lcd.locate(4,0);
        lcd.printf("Coordenadas:");
        lcd.locate(0,1);
        lcd.printf("X:%.3f", cx);
        lcd.locate(0,2);
        lcd.printf("Y:%.3f", cy);
        lcd.locate(0,3);
        lcd.printf("Z:%.3f", cz);
        lcd.locate(11,1);
        lcd.printf("Salvar");
        lcd.locate(11,2);
        lcd.printf("Concluir");
        lcd.locate(11,3);
        lcd.printf("Cancelar");
        movercursor(1,3,10);
        if (bot_enter!=penter){
            if (linha==1){
                func = 5;
                cx_salva = cx;
                cy_salva = cy;
                cz_salva = cz;
                }
            else if (linha==2) {
                func = 7;
                }
            else if (linha==3) {
                func = 1;
                }
            }
        
        }
        
    //func 3
    
    //func 4
        
    //func 5
    void telasalvamento(){ //função para quando salvar um ponto
        lcd.cls();
        lcd.locate(0,0);
        lcd.printf("Voce salvou o ponto:");
        lcd.locate(5,1);
        lcd.printf("X: %.3f", cx_salva);
        lcd.locate(5,2);
        lcd.printf("Y: %.3f", cy_salva);
        lcd.locate(5,3);
        lcd.printf("Z: %.3f", cz_salva);
        wait(1);
        func = 6;
        }
        
    //func 6
    void telacola(){ //tela para escolher o tipo de sequencia da cola
        lcd.cls();
        bot_enter = 0;
        lcd.printf("P/ o proximo ponto:");
        lcd.locate(3,1);
        lcd.printf("Sem cola");
        lcd.locate(3,2);
        lcd.printf("Cola no ponto");
        lcd.locate(3,3);
        lcd.printf("Cola continua");
        movercursor(1,3,2);
        if (bot_enter!=penter){
            if (linha==1){
                cola = 0;
                func = 2;
                }
            else if (linha==2) {
                cola = 1;
                func = 2;
                }
            else if (linha==3) {
                cola = 2;
                func = 2;
                }
            }
        }
        
    
    //func 7        
    void executarprograma() { //tela para selecionar se deseja executar o programa
        lcd.cls();
        bot_enter = 0;
        lcd.locate(2,0);
        lcd.printf("VOCE CONCLUIU SEU");
        lcd.locate(5,1);
        lcd.printf("PROGRAMA.");
        lcd.locate(0,2);
        lcd.printf("Deseja");
        lcd.locate(0,3);
        lcd.printf("executa-lo?");
        lcd.locate(14,2);
        lcd.printf("Sim");
        lcd.locate(14,3);
        lcd.printf("Voltar");
        movercursor(2,3,13);
        if (bot_enter!=penter) {
            if (linha==2){
                exec = 1;
                func = 9;
                }
            else if (linha==3){
                exec = 0;
                func = 2;
                }
            }
        }
    
    //func 8
    void telazerar(){ //tela para zerar a máquina
        lcd.cls();
        bot_enter = 0;
        lcd.locate(2,0);
        lcd.printf("Pressione OK para zerar as coordenadas");
        lcd.locate(7,2);
        lcd.printf("OK");
        lcd.locate(7,3);
        lcd.printf("Voltar");            
        movercursor(2,3,6);
        if (bot_enter!=penter) {
            if (linha==2){
                cx = 0;
                cy = 0;
                cz = 0;
                func = 10;
                }
            else if (linha==3){
                func = 1;
                }
            }
        }
        
    
    //func 9
    void executando(){ //tela de executando
        lcd.cls();
        lcd.locate(4,1);
        lcd.printf("Executando");
        int contador = 0;
        while (exec==1){
            lcd.locate(14,1);
            lcd.printf(".  ");
            wait(0.5);
            lcd.locate(14,1);
            lcd.printf(".. ");
            wait(0.5);
            lcd.locate(14,1);
            lcd.printf("...");
            wait(0.5);
            lcd.locate(14,1);
            lcd.printf("   ");
            wait(0.5);
            contador++;
            if (contador>=2){
                exec = 0;
                func = 11;
                }
            }
        }
    
    //func 10
    void zerado() { //tela avisando que a máquina foi zerada
        lcd.cls();
        lcd.locate(5,1);
        lcd.printf("Voce zerou");
        lcd.locate(5,2);
        lcd.printf("a maquina!");
        wait(1);
        func = 8;
        }
        
    //func 11
    void finalizado() {
        lcd.cls();
        lcd.locate(6,1);
        lcd.printf("PROGRAMA");
        lcd.locate(5,2);
        lcd.printf("FINALIZADO");
        wait(1);
        func = 1;
        }       
    
    Menu(); //não apagar
};

Menu::Menu(){ //não apagar
    func = 0;
    }

Menu menu;  

int main () {
    lcd.setBacklight(TextLCD::LightOn); //liga backlight
    lcd.setCursor(TextLCD::CurOff_BlkOff); //define tipo de cursor
    
    botao_enter.rise(&botenter_press); //chama função botao enter
    //botao_enter.fall(&botenter_solto);
    
    botao_cima.rise(&botcima_press); //chama função botao para cima
    //botao_cima.fall(&botcima_solto);
    
    botao_baixo.rise(&botbaixo_press); //chama função bota para baixo
    //botao_baixo.fall(&botbaixo_solto);
       
        
    while(1){    
        //printf("%d %d %d \n\r", bot_enter, bot_cima, bot_baixo);
        switch(menu.func){ //faz com que as telas sejam iniciadas
            case 0: menu.inicializar(); break;
            case 1: menu.menuprincipal(); break;
            case 2: menu.jog(); break;
            //case 3: menu.automatico(); break;
            //case 4: menu.config(); break;
            case 5: menu.telasalvamento(); break;
            case 6: menu.telacola(); break;
            case 7: menu.executarprograma(); break;
            case 8: menu.telazerar(); break;
            case 9: menu.executando(); break;
            case 10: menu.zerado(); break;
            case 11: menu.finalizado(); break;
    
            }
        } 
    }     
                
                     
        
        
        
        
//função interrupt botão enter
        
void botenter_press(void){
          
          penter = bot_enter;
          bot_enter = !bot_enter;
          printf("enter high");
          }
/*void botenter_solto(void) {
          penter = bot_enter;
          bot_enter = !bot_enter;
          printf("enter low");
          }*/
          
//função interrupt botão cima
          
void botcima_press(void){
          pcima = bot_cima;
          bot_cima = !bot_cima;
          printf("cima high");
          }
/*void botcima_solto(void) {
          pcima = bot_cima;
          bot_cima = !bot_cima;
          printf("cima low");
          }*/

//função interrupt botão baixo          
          
void botbaixo_press(void){
          pbaixo = bot_baixo;
          bot_baixo = !bot_baixo;
          printf("baixo high");
          }
/*void botbaixo_solto(void) {
          pbaixo = bot_baixo;
          bot_baixo = !bot_baixo;
          printf("baixo low");
          }*/