• Autor
    Posts
    • 2021-04-05 até 18:23 #40003360841

      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

      }
      }

        2021-04-05 até 18:39 #40003360842

        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 ?

          2021-04-05 até 18:44 #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.

            2021-04-05 até 20:29 #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.

          • Você precisa estar Conectado(a) para Responder a este Tópico.