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-12
Revision:
15:043bb371a50b
Parent:
14:ec8d10a34a2c
Child:
16:6912d19a0016

File content as of revision 15:043bb371a50b:

/*CÓDIGO PARA LCD MENU HELLEN - GRUPO T*/

#include "mbed.h"
#include "TextLCD.h"

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

//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); //não apagar

//variáveis int
int bot_enter;
int bot_cima;
int bot_baixo;
int penter = 0;
int pcima = 0;
int pbaixo = 0;
int cola;
int exec;
int select = 0;
int pontos = 10;

//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 para as telas)
class Menu{
    public:
    int linha;
    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;
                }
            }          
        }
                       
    //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:       ");
        lcd.locate(0,2);
        lcd.printf("Y:       ");
        lcd.locate(0,3);
        lcd.printf("Z:       ");
        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){                
                if (pontos>0){
                    pontos--;
                    cx_salva = cx;
                    cy_salva = cy;
                    cz_salva = cz;
                    func = 5;
                    }
                else if (pontos==0){
                    func = 16;
                    }
                }
            else if (linha==2) {
                func = 7;
                }
            else if (linha==3) {
                func = 1;
                pontos = 10;
                }
            }
        }
        
    //func 3
    void automatico(){ //tela modo automatico
        lcd.cls();
        bot_enter = 0;
        lcd.printf("Modo automatico");
        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){
                func = 12;
                }
            else if (linha==3){
                func = 1;
                }
            }
        }
    
    //func 4
    void config() {
        lcd.cls();
        bot_enter = 0;
        lcd.locate(1,0);
        lcd.printf("Definir velocidade");
        lcd.locate(1,1);
        lcd.printf("Limpar seringa cola");
        lcd.locate(1,2);
        lcd.printf("Desligar a maquina");
        lcd.locate(1,3);
        lcd.printf("Voltar");
        movercursor(0,3,0);
        if (bot_enter!=penter){
            if (linha==0) {
                func = 13;
                }
            else if (linha==1) {
                func = 14;
                }
            else if (linha==2) {
                func = 15;
                }
            else if (linha==3) {
                func = 1;
                }
            }        
        }
        
    //func 5
    void telasalvamento(){ //função para quando salvar um ponto
        lcd.cls();
        lcd.locate(0,0);
        lcd.printf("Voce salvou");
        lcd.locate(1,1);
        lcd.printf("X:%.3f", cx_salva);
        lcd.locate(1,2);
        lcd.printf("Y:%.3f", cy_salva);
        lcd.locate(1,3);
        lcd.printf("Z:%.3f", cz_salva);
        lcd.locate(13,1);
        lcd.printf("Pontos");
        lcd.locate(13,2);
        lcd.printf("livres");
        lcd.locate(16,3);
        lcd.printf("%d", pontos);
        wait(1);
        if (pontos>0){
            func = 6;
            }
        else if (pontos==0){
            func = 2;
            }
        }
        
    //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() { //tela aviso programa finalizado
        lcd.cls();
        lcd.locate(6,1);
        lcd.printf("PROGRAMA");
        lcd.locate(5,2);
        lcd.printf("FINALIZADO");
        wait(1);
        func = 1;
        }     
        
    //func 12
    
    //func 13
    
    //func 14
    
    //func 15
    
    //func 16
    void limitepontos(){ //tela para quando acabam os pontos
        lcd.cls();
        lcd.printf(" Voce atingiu o n%c   maximo de pontos.", 0xDF);
        lcd.locate(0,3);
        lcd.printf("Conclua seu programa");
        wait(1);
        func = 2;
        }      
    
    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_cima.rise(&botcima_press); //chama função botao para cima
    botao_baixo.rise(&botbaixo_press); //chama função bota para baixo
       
    while(1){    
        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;
            case 16: menu.limitepontos(); break;
            }
        } 
    }             
        
//função interrupt botão enter        
    void botenter_press(void){          
              penter = bot_enter;
              bot_enter = !bot_enter;
              printf("enter high");
              }
          
//função interrupt botão cima          
    void botcima_press(void){
              pcima = bot_cima;
              bot_cima = !bot_cima;
              printf("cima high");
              }

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