Ir ao conteúdo

Posts recomendados

Postado

Estou tentando criar um menu de opções através do Switch para acionamento de alguns componentes. Quando vou visualizar no monitor serial ele fica imprimindo em loop infinito o menu do case 0; e caso eu aperte a opção "1" do teclado matricial, ele fica repetindo em loop infinito o menu do case 1 e assim por diante.. 

 

O código está incompleto pessoal, nao colei ele todo aqui,  mas queria resolver esse loop dentro do Switch logo no começo pois está me incomodando. Gostaria que o menu aparecesse uma vez e aguardasse o botão ser pressionado. 

 

obs*: neste código que colei aqui o case 2 está sem o break mas no meu compilador está com ele.

 

#include <Keypad.h>
const uint8_t row_size = 4;                       // Quantidade de linhas.
const uint8_t col_size = 4;                       // Quantidade de colunas.
const uint8_t row_pin[row_size] = {24,26,28,30};   // Pinos que estão ligados as linhas.
const uint8_t col_pin[col_size] = {44,46,48,50}; // Pinos que estão ligados as colunas.
const char keys[row_size][col_size] = {           // Mapa de teclas do teclado.
  { '1', '2', '3', 'A' },
  { '4', '5', '6', 'B' },
  { '7', '8', '9', 'C' },
  { '*', '0', '#', 'D' }
};


int RES = 10; int MOT = 9; int VAL = 8; int BOM = 7;
int cont=0; int estagio=0;
 
Keypad keypad = Keypad(makeKeymap(keys), row_pin, col_pin, row_size, col_size);
 
void setup() {
  Serial.begin(9600);
  pinMode(RES, OUTPUT);
  pinMode(MOT, OUTPUT);
  pinMode(VAL, OUTPUT);
  pinMode(BOM, OUTPUT);
  }
 
void loop() {
  char key = keypad.getKey();   // Retorna a última tecla que foi apertada.
 // if (key != NO_KEY) Serial.println(key); // Imprime tecla na porta serial.

  switch(estagio){
    
  case 0:
  Serial.println ("APERTE 1 PARA MENU");
      if (key == '1'){ estagio=1;}
      break;
      
  case 1:
  Serial.println("A = PAST. LTLT"); Serial.println("B = PAST. HTST"); Serial.println("C = FERMENTADOR"); Serial.println("D = DEF. MANUAL");
          if (key =='A'){ estagio = 2; cont=1;}
     else if (key =='B'){ estagio = 2; cont=2;}  
     else if (key =='C'){ estagio = 2; cont=3;}  
     else if (key =='D'){ estagio = 2; cont=4;}  
     break;

  case 2: 
   if(cont==1){
      Serial.println("Botao A selecionado");
      Serial.println("PASTEURIZACAO LTLT");
      Serial.println("1=INICIAR 2=PARAR");
      Serial.println("0 = VOLTAR");
      if(key == '1'){digitalWrite(RES, HIGH); digitalWrite(MOT, HIGH); digitalWrite(VAL, HIGH); Serial.println("PROCESSO LTLT:ON");} // INICIA O PROCESSO
      else if(key == '2'){ digitalWrite(RES, LOW);digitalWrite(MOT, LOW);digitalWrite(VAL, LOW); Serial.println ("PROCESSO LTLT:OFF");}  // DESATIVA O PROCESSO
      else if(key == '0'){estagio --;}
      
    
  
  }
  }
  }

 

  • Membro VIP
Postado

Uma alternativa pra parar de rodar. Mude o estagio pra uma variável que não satisfaça o if

...

case 0:

estagio=28;

Serial.println ("APERTE 1 PARA MENU");

...

case 1:

estagio=28;

Serial.println("A = PAST. LTLT");

...

 

Sugiro rever a lógica toda pra outra mais simples...

  • Confuso 1
Postado

@Isadora Ferraz Olá Isadora, obrigado pela resposta. Entretanto não entendi bem o que você quis dizer. O if recebe caracteres, o estagio é apenas um contador para controlar em qual janela estou...

  • Membro VIP
Postado

Pelo jeito um de nós está confuso. Acho que sou eu...

 

Então é melhor parar tudo e esperar uma tecla ser pressionada. Algo como

key=NOKEY;
while (key==NOKEY) key = keypad.getKey();

e nem precisa usar o switch case. Use o minimalista if mesmo.

if (key=='a') faça_isso();
if (key=='b') faça_aquilo();
...

Uma lógica mais simples, lembra? De fato a linguagem c 'se resume' a if...

Ah e pra constar, não uso arduino e afins

 

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!