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-10
Revision:
8:b80f50544ddd
Parent:
7:e2c1b0338286
Child:
9:86b5a317fcd4

File content as of revision 8:b80f50544ddd:

#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;

//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(5);
        func = 1;
        }
    
    //func 1    
    void menuprincipal(){ //função menu principal
        //penter = bot_enter;
        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");
        movercursor(0,2,0);
        if (bot_enter!=penter){
            if (linha==0){
                func = 2;
                }
            else if (linha==1) {
                func = 3;
                }
            else if (linha==2) {
                func = 4;
                }
            }
        } 
        
        
    //func 2    
    void jog(){ //função tela jog
        //penter = bot_enter;
        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 5
    void telasalvamento(){
        lcd.cls();
        lcd.locate(0,0);
        lcd.printf("Voce salvou o ponto:");
        lcd.locate(4,1);
        lcd.printf("X:%.3f", cx_salva);
        lcd.locate(4,2);
        lcd.printf("Y:%.3f", cy_salva);
        lcd.locate(4,3);
        lcd.printf("Z:%.3f", cz_salva);
        wait(5);
        func = 6;
        }
        
        
        Menu();
};

Menu::Menu(){
    func = 0;
}

Menu menu;  

int main () {
    lcd.setBacklight(TextLCD::LightOn); //liga backlight
    lcd.setCursor(TextLCD::CurOff_BlkOff);
    
    botao_enter.rise(&botenter_press);
    //botao_enter.fall(&botenter_solto);
    
    botao_cima.rise(&botcima_press);
    //botao_cima.fall(&botcima_solto);
    
    botao_baixo.rise(&botbaixo_press);
    //botao_baixo.fall(&botbaixo_solto);
       
        
    while(1){    
        //printf("%d %d %d \n\r", bot_enter, bot_cima, bot_baixo);
        switch(menu.func){
            case 0: menu.inicializar(); break;
            case 1: menu.menuprincipal(); break;
            case 2: menu.jog(); break;
            //case 3: menu.notReferenced(2); break;
            //case 4: menu.notReferenced(3); break;
            //case 5: menu.referencing(); break;
            //case 6: menu.rootMenu(); break;
            //case 7: menu.manualControl(); break;
            //case 8: menu.positions(); break;
            //case 9: menu.selectPos(); break;
            //case 10: menu.selectPos(2); break;
            //case 11: menu.selectPos(3); break;
            //case 12: menu.run(); 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");
          }*/