Retornos

Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #40003360841
    derleimiorelliderleimiorelli
    Participante

    Olá, estou com dificuldade em implementar os botões de Pagar e retirar o produto. Acredito que deva ser necessário usar retorno nas funções, mas estou confuso em como utilizar de forma precisa, pois algumas formas no copilador funciona mas na pratica do display não. Segue a baixo meu código até o momento:

    void seleciona(void);
    void ok(void);
    void pagamento(void);
    void cancela(void);

    int bebida =0;

    #define bot_seleciona pin_a2
    #define botao_ok pin_a3
    #define botao_pagamento pin_a4
    #define botao_cancela pin_a6
    #define botao_pagamentos pin_a7

    void main(){

    set_tris_b(0x00);
    inicia_lcd();

    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(“Iniciando”); // Escreve Iniciando na primeira linha do display
    LCD_comando(Linha_2); // Chama comando para escrever na linha 2
    LCD_texto(“Sistema”); // Escreve Sistema na segunda linha do display
    delay_ms(3000); // Aguarda 3 segundos, e depois…
    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(“Selecione”); // Escreve Selecione na primeira linha do display
    LCD_comando(Linha_2); // Chama comando para escrever na linha 2
    LCD_texto(“sua bebida”); // Escreve Sistema na segunda linha do display

    while(TRUE){

    seleciona();

    if(bebida==1){

    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(“Coca-Cola”); // Escreve Coca-Cola no display
    LCD_comando(Linha_2);
    LCD_texto(” “);
    }

    if(!input(botao_ok)){
    ok();
    }

    else if(bebida==2){ // Se bebida for igual a 2

    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(“Guarana “); // Escreve GUARANA no display
    LCD_comando(Linha_2); // Chama comando para escrever na linha 1
    LCD_texto(” “);
    }

    if(!input(botao_ok)){
    ok();
    }

    else if(bebida==3){ // Se bebida for igual a 3

    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(“PEPSI “); // Escreve pepsi no display
    LCD_comando(Linha_2); // Chama comando para escrever na linha 1
    LCD_texto(” “);
    }

    if(!input(botao_ok)){
    ok();
    }

    else if(bebida==4){ // Se bebida for igual a 4

    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(“FANTA “); // Escreve FANTA no display
    LCD_comando(Linha_2); // Chama comando para escrever na linha 1
    LCD_texto(” “);
    }
    if(!input(botao_ok)){
    ok();
    }

    }

    }

    /*****************************************************************************************************
    FUNÇÕES
    *****************************************************************************************************/

    void seleciona(){
    if(!input(bot_seleciona)){
    delay_ms(250);
    bebida++;
    if(bebida>4){
    bebida=1;
    }
    }
    }

    void ok(){ // Função chamada ok, sem retorno e sem parâmetro

    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(” “);
    LCD_comando(Linha_2); // Chama comando para escrever na linha 2
    LCD_texto(” “);
    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(“Efetue o”); // Escreve “Efetue o” na linha 1 do display
    LCD_comando(Linha_2); // Chama comando para escrever na linha 2
    LCD_texto(“Pagamento”); // Escreve Pagamento na linha 2 do display
    }

    void pagamento(){ // Função chamada pagamento, sem retorno e sem parâmetro
    if(!input(botao_pagamento)){ // Se o botão Pagamento for pressionado…
    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(” “);
    LCD_comando(Linha_2); // Chama comando para escrever na linha 2
    LCD_texto(” “);
    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(“Retire o”); // Escreve “Retire o” na linha 1 do display
    LCD_comando(Linha_2); // Chama comando para escrever na linha 1
    LCD_texto(“Produto”); // Escreve “Produto” na linha 2 do display // AQUI TENHO DÚVIDA EM COMO MANTER A FRASE “RETIRE O PRODUTO” ATÉ QUE SEJA PRESSIONADO O BOTÃO “PAGAR”. o WHILE TRUE NÃO MANTEM A FRASE A MENOS QUE UTILIZE DELAY
    }
    }

    void cancela(){ // Função chamada ok, sem retorno e sem parâmetro
    if(!input(botao_cancela)){
    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(” “);
    LCD_comando(Linha_2); // Chama comando para escrever na linha 2
    LCD_texto(” “);
    LCD_comando(Linha_1); // Chama comando para escrever na linha 1
    LCD_texto(“Operacao”); // Escreve “Operação” na linha 1 do display
    LCD_comando(Linha_2); // Chama comando para escrever na linha 2
    LCD_texto(“Cancelada”); // Escreve “Cancelada” na linha 1 do display

    }
    }

    #40003360842
    derleimiorelliderleimiorelli
    Participante

    Inicialmente ao chamar a função “ok” a mensagem Efetue o Pagamento não permanece na tela do display, a menos que utilize delay. Tem outra forma além de utilizar delay ?

    #40003360843

    Fala Derlei!

    Sua dúvida não ficou muito clara, mas vou tentar ajudar com base no que entendi do seu código.

    1 – botões de Pagar
    Essa etapa do projeto deve ocorrer apenas após todas as outras estarem funcionais. Pois bem, o botão pg apenas simula um sistema de pagamento. A grosso modo basta adicionar um botão que ira simular a entrada de notas ou outro meio de pagamento. Sendo assim você pode criar uma função que monitora o botão pg e adicionar essa função apenas no local onde é solicitado o pagamento.

    2 – retirar o produto
    Essa mensagem pode estar inclusa na função que monitora o pagamento.

    3 – botão CANCELA
    Está deve ser uma função que monitora o botão cancelar que pode ser requisitada a qualquer momento do código. Sendo assim crie uma função que monitora um botão e que quando ele for acionado apresenta a mensagem solicitada e reinicia o sistema. Obs.: Faça a chamada dela em todos os locais do código assim poderá cancelar a qualquer operação.

    Se a dúvida ainda persistir deixe uma mensagem aqui.

    Grande abraço.

    #40003360846

    Fala Derlei, nesse caso como você já tem uma mensagem no display LCD é interessante que você limpe o display para inserir a nova mensagem, que tem até um tempo determinado para ser exibida.

Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Você deve fazer login para responder a este tópico.