Projeto Mecatrônico - 2020 - G3 / Mbed 2 deprecated Pipetagem

Dependencies:   mbed Pipetagem_automatica

LCD.h

Committer:
alexandrezf
Date:
2020-06-29
Revision:
3:8e4c26964bd1
Parent:
1:3dbb9b66b990

File content as of revision 3:8e4c26964bd1:

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

//Portas da LCD:
TextLCD lcd(D10,D11,D4,D5,D8,D9);

//Entrada A0 para botões LCD:
AnalogIn Botoes_LCD(A5);
AnalogIn SCL(PC_3);
AnalogIn SDA(PC_2);

//Definição de variáveis:
int estado2 = 1;
int lcd_key = 0;
float adc_key_in = 0;
int quantidade = 0;
 
//Definição Botões LCD:
#define btnDIREITA 0
#define btnCIMA 1
#define btnBAIXO 2
#define btnESQUERDA 3
#define btnSELECT 4
#define btnRESET 5

//Definição Funções LCD:
void Botao_Emergencia(void);
void apeditarpipetagem(void);
void apiniciarpipetagem(void);
void apinformacoesdoprocesso(void);
void apdesligar(void);
void editarpipetagem(void);
void funcaoquantidade(void);
void funcaoposicao(void);
void iniciarpipetagem(void);
void informacoesdoprocesso(void);
void desligar(void);
void repetir(void);
void movimentacao(void);
 
 
//Função de leitura LCD:
int read_LCD_buttons(){
    //Recebe leitura e multiplica por 1000:
    adc_key_in = Botoes_LCD.read()*1000;
    //Enquanto nenhum Botão estiver ativado:
    //(Funciona como um loop para garantir que não passe pela função sem que um botão haja sido pressionado)
    while (adc_key_in>900){
        adc_key_in = Botoes_LCD.read()*1000;
        }
    //Condição de retorno para cada botão:
    if (adc_key_in < 50)  return btnDIREITA;
    if (adc_key_in < 150) return btnCIMA;
    if (adc_key_in < 300) return btnBAIXO;
    if (adc_key_in < 450) return btnESQUERDA;
    if (adc_key_in < 800) return btnSELECT;
    
    
    
    
    }
    
//Função de exibição do Menu principal:
void exibirMenu () {
    lcd.cls();
    lcd.printf("Selecione a");
    lcd.setAddress(0,1);
    lcd.printf("operacao:");
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
        case btnBAIXO: apeditarpipetagem(); break;
        default: exibirMenu();
        }
    }

//Função de apresentação da parte "Editar Pipetagem":
void apeditarpipetagem() {
    //Limpa a tela
    lcd.cls();
    //Inicia das coordenadas 0,0
    lcd.setAddress(0,0);
    //Apresenta o texto ao usuário:
    lcd.printf("Editar pipetagem");
    wait(0.5);
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
        //Caso direita tenha sido pressionada:
        case btnDIREITA: 
        //Limpa tela
        lcd.cls();
        //Inicia função "Editar Pipetagem"
        editarpipetagem(); break;
        //Caso baixo tenha sido pressionada
        //Segue para próxima apresentação
        case btnBAIXO: apiniciarpipetagem(); break;
        //Caso nenhum dos anteriores tenha sido pressionado, reinicia a função, para que não interrompa o programa por erro de aperto de botão.
        default: apeditarpipetagem();
        }
    }
//Função da parte "Editar pipetagem":
void editarpipetagem(){
    
    lcd.cls();
    lcd.setAddress(0,0);
    lcd.printf("Quantidade?");
    wait(0.5);
    lcd_key = read_LCD_buttons();
    
    switch (lcd_key){
        case btnESQUERDA: apeditarpipetagem(); break;
        
        //Caso acesse quantidade:
        case btnDIREITA: 
            lcd.cls();
            funcaoquantidade(); break;
        
        case btnBAIXO:
            lcd.cls();
            lcd.printf("Posicao?");
            wait(0.5);
            lcd_key = read_LCD_buttons();
            switch(lcd_key){
                //Caso acesse posição:
                case btnDIREITA: funcaoposicao(); break;
                case btnESQUERDA: apeditarpipetagem(); break;
                case btnCIMA: editarpipetagem(); break;
                }
            break;
        }
    } 
//Função de definição de quantidade:
void funcaoquantidade(){
    wait(0.5);
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
        
        case btnESQUERDA: apeditarpipetagem(); break;
        
        case btnBAIXO:
            quantidade = quantidade - 1;
            lcd.setAddress(0,0);
            lcd.printf("Por enquanto:");
            lcd.setAddress(0,1);
            lcd.printf("%d",quantidade);
            funcaoquantidade();
            break;
        case btnDIREITA:
            quantidade = quantidade + 10;
            lcd.setAddress(0,0);
            lcd.printf("Por enquanto:");
            lcd.setAddress(0,1);
            lcd.printf("%d",quantidade);
            funcaoquantidade();
            break;
        case btnCIMA:
            quantidade = quantidade + 1;
            lcd.setAddress(0,0);
            lcd.printf("Por enquanto:");
            lcd.setAddress(0,1);
            lcd.printf("%d",quantidade);    
            funcaoquantidade();
            break;
        case btnSELECT:
            lcd.cls();
            lcd.setAddress(0,0);
            lcd.printf("Quantidade final:");
            lcd.setAddress(0,1);
            lcd.printf("%d", quantidade);
            wait(0.5);
            lcd_key = read_LCD_buttons();
            switch (lcd_key){
                case btnSELECT:
                    //Condição de retorno para confirmar valor:
                    exibirMenu();
                    break;
                }
            break;
        }
    }
//função de definição de posição:
void funcaoposicao(){
    while(estado2 == 1) {
        wait(0.5);
        lcd_key = read_LCD_buttons();
        switch (lcd_key){
            case btnSELECT: 
                estado2 = 0;
                break;
            }
        //O acesso à função joystick externa desta biblioteca permite a movimentação dos motores para salvar a posição do usuário, 
        //a qual será retornada como "PosicaoUsuário" e conterá 3 valores, x, y e z respectivamente. (joystick.h)
        joystick();
        }
    exibirMenu();
    }
//Função de apresentação da parte "Iniciar Pipetagem":
void apiniciarpipetagem(){
    lcd.cls();
    lcd.setAddress(0,0);
    lcd.printf("Iniciar");
    lcd.setAddress(0,1);
    lcd.printf("pipetagem");  
    wait(0.5);
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
        case btnDIREITA:
            iniciarpipetagem(); break;
            
        case btnBAIXO:
            apinformacoesdoprocesso(); break;
            
        case btnCIMA:
            apeditarpipetagem(); break;
            
        default: apiniciarpipetagem();
            
        }
    }
//Função da parte "Iniciar Pipetagem":
void iniciarpipetagem(){
    lcd.cls();
    lcd.setAddress(0,0);
    lcd.printf("Iniciando");
    lcd.setAddress(0,1);
    lcd.printf("Pipetagem...");  
    wait(1);
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
        case btnESQUERDA: apiniciarpipetagem(); break;
        //Execução da função repetir que efetivamente realizará a pipetagem: (LCD.h)
        case btnDIREITA: repetir(); break;
        }
    }
//Função de apresentação da parte "Informacoes do processo":
void apinformacoesdoprocesso(){
    lcd.cls();
    lcd.setAddress(0,0);
    lcd.printf("Informacoes do");
    lcd.setAddress(0,1);
    lcd.printf("processo");  
    wait(0.5);
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
        case btnDIREITA:
            informacoesdoprocesso(); break;
            
        case btnBAIXO:
            apdesligar(); break;
            
        case btnCIMA:
            apiniciarpipetagem(); break;
            
        default: apinformacoesdoprocesso();
            
        }
    }
//Função da parte "Informacoes do processo":
void informacoesdoprocesso(){
    lcd.cls();
    lcd.setAddress(0,0);
    lcd.printf("Quantidade?");
    wait(0.5);
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
        case btnESQUERDA: apinformacoesdoprocesso(); break;
        //Caso queira informação sobre a quantidade:
        case btnDIREITA:
            lcd.cls();
            lcd.setAddress(0,0);
            lcd.printf("Quantidade Final");
            lcd.setAddress(0,1);
            lcd.printf("%d",quantidade);
            lcd.printf(" ml");
            wait(0.5);
            lcd_key = read_LCD_buttons();
            switch (lcd_key){
                case btnESQUERDA:
                    informacoesdoprocesso();
                    break;
                }
        case btnBAIXO:
            lcd.cls();
            lcd.printf("Posicao?");
            wait(0.5);
            lcd_key = read_LCD_buttons();
            switch(lcd_key){
                //Caso queira informação sobre a posição:
                case btnDIREITA: 
                    lcd.cls();
                    lcd.printf("x:");
                    lcd.printf("%d", PosicaoUsuario[0]);
                    lcd.printf(", y:");
                    lcd.printf("%d", PosicaoUsuario[1]);
                    lcd.printf(", z:");
                    lcd.printf("%d", PosicaoUsuario[2]);
                    wait(0.5);
                    lcd_key = read_LCD_buttons();
                    switch(lcd_key){
                        case btnESQUERDA:
                            apinformacoesdoprocesso();
                            break;
                        }
                    break;
                case btnESQUERDA: apinformacoesdoprocesso(); break;
                case btnCIMA:
                    informacoesdoprocesso();
                    break;
                default: informacoesdoprocesso();
                }
        }
    }
//Função de apresentação da parte "Desligar":
void apdesligar(){
    lcd.cls();
    lcd.setAddress(0,0);
    lcd.printf("Desligar");
    wait(0.5);
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
        case btnDIREITA:
            desligar(); break;
            
        case btnCIMA:
            apinformacoesdoprocesso(); break;
            
        default: apdesligar();
            
        }
    }
//Função da parte "Desligar":
void desligar(){
    lcd.cls();
    //Desligamento do sistema:
    Emergencia = 1;
    wait(1);
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
        case btnESQUERDA: apdesligar(); break;
        }
    }
//Função de Inicialização do sistema, a qual exibirá o Menu. (Executada no programa principal)
void Inicializacao(){
    
    exibirMenu();
    
    }
//Função para controlar baseado no input do usuário quantas vezes a atividade irá se repetir
void repetir(){ 
    int i;
    for (i=0 ; i<quantidade ; i++) {
        //Execução da própria movimentação: (movimentacao.h)
        movimentacao();
        printf("Completado\n\r");
        }
    }