Autor Tema: menu principal  (Leído 299 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MarcosZarate22

  • PIC10
  • *
  • Mensajes: 2
menu principal
« en: 05 de Agosto de 2019, 12:36:26 »
hola quisiera saber la razón por la que hay que apretar dos veces la tecla del teclado para poder entrar en cualquiera de las opciones del menú desde ya muchas gracias
Les dejo el esquemático y la programación
Uso la libreria de DHT11

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1091
Re:menu principal
« Respuesta #1 en: 05 de Agosto de 2019, 13:14:58 »
Que tal marcoszarate22,

Podrías indicarnos cuál compilador estás usando?

Elreypic

Desconectado MarcosZarate22

  • PIC10
  • *
  • Mensajes: 2
Re:menu principal
« Respuesta #2 en: 05 de Agosto de 2019, 13:52:53 »
Uso el micro c PRO for pic

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7417
Re:menu principal
« Respuesta #3 en: 05 de Agosto de 2019, 14:50:58 »
Tu problemas es la cantidad de veces que lees el teclado :/

Lo lees luego de mostrar en el LCD, luego en el programa para actuar sobre el teclado, etc....
Por ejemplo aca lo lees 2 veces:

Código: C
  1.         tecla= teclado ();
  2.         switch(teclado()){

Ademas la funcion teclado es redundante...

Código: C
  1.     // Wait for key to be pressed and released
  2.     do {
  3.         kp = Keypad_Key_Click();             // Store key code in kp variable
  4.     }while (!kp);

Me explico con la explicacion de esa funcion:

Call to Keypad_Key_Click is a blocking call: the function waits until some key is pressed and released.
Es decir posee un while dentro de esa funcion...

Por otro lado podrias hacer algo mucho mas sencillo con esto:

Código: C
  1.     switch (kp) {
  2.  
  3.         case  1: kp = '1'; break; // 1        // Uncomment this block for keypad4x4
  4.         case  2: kp = '2'; break; // 2
  5.         case  3: kp = '3'; break; // 3
  6.         case  4: kp = 'A'; break; // A
  7.         case  5: kp = '4'; break; // 4
  8.         case  6: kp = '5'; break; // 5
  9.         case  7: kp = '6'; break; // 6
  10.         case  8: kp = 'B'; break; // B
  11.         case  9: kp = '7'; break; // 7
  12.         case 10: kp = '8'; break; // 8
  13.         case 11: kp = '9'; break; // 9
  14.         case 12: kp = 'C'; break; // C
  15.         case 13: kp = '*'; break; // *
  16.         case 14: kp = '0'; break; // 0
  17.         case 15: kp = 35; break; // #
  18.         case 16: kp = 68; break; // D
  19.         }

Reemplazarlo por algo asi:

Código: C
  1.   //Definido arriba
  2.  
  3.   const char teclas[] ={'1','2','3','A','5','6','B','7','8','9','C','*','0',35,38};
  4.  
  5.  //Y usarlo asi:
  6.  
  7.  return teclas[--kp];

Si... super inteligentes los de MikroC por usar una salida que va desde 1 al 16, cuando C tiene indices de array que inician en 0.... Por eso hace falta el -1 antes de acceder al array.


 

anything