//Obtener Datos
void Obtenerdatos()
{
TEMPERATURA_MOTOR();
NIVEL_COMBUSTIBLE();
TACOMETRO();
}
void mostrar_variable_1(){
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc, "TEMP = %04.1f ºC",TC);
}
void mostrar_variable_2(){
lcd_putc('\f');
printf(lcd_putc, "\fADC = %4ld", l);
printf(lcd_putc, "\nVoltage = %01.2fV", p);
}
void mostrar_variable_3(){
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"RPM = %0f RPM",RPM);
lcd_gotoxy(1,2);
printf(lcd_putc,"Vel = %0f Km/h",VEL);
}
main(){
CONFIGURACIONES Y TAL
while(TRUE){
Obtenerdatos();
k=kbd_getc();
if (k!=0 & j!=k)
{
j=k;
}
else
{
j=0;
}
//Comprueba que la tecla presionada no sea la misma que se presiono la ultima vez
switch(Nivelmenu){
case 0:
switch (j){ //Menu principal
case '1':
Mostrar_menu_de_variables();
Nivelmenu=1;
break;
case '2':
EnviarDatos();
break;
default:
break;
}
break;
case 1: //Menu de variables, se muestran todas las variables para que se seleccione una
switch (j){
case '1':
Mostrar_menu_var();
variable=1;
Nivelmenu=2;
break;
case '2':
Mostrar_menu_var();
variable=2;
Nivelmenu=2;
break;
case '3':
Mostrar_menu_var();
variable=3;
Nivelmenu=2;
break;
case '4':
Mostrar_menu_var();
variable=4;
Nivelmenu=2;
break;
default:
break;
}
break;
case 2: // Menu de cada variable, todas tienen 2 opciones, obtener datos y salir al menu anterior
switch (variable){
case '1':
mostrar_variable_1();
break;
case '2':
mostrar_variable_2();
break;
case '3':
mostrar_variable_3();
break;
default:
break;
}
if (j=='#')
{
Mostrar_menu_de_variables();
Nivelmenu=1;
break;
}
break;
default: // Caso unico que por algun problema se llegue este punto, poniendo a 0 y el nivel y mostrando el menu inicial
Mostrar_menu_inicial();
Nivelmenu=0;
break;
}
}
Ahora estoy probando de introducirle un retardo al pulsar una tecla debido a que cuando pulsas, le cuesta entrar en los diferentes menus o aveces se salta alguno y va directamente a las variables. Como si no hiciera acción la tecla, he de pulsar mucho para que entre.
Poniendo algún tipo de antirebote serviría?
void mostrar_variable_1(){
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc, "TEMP = %04.1f ºC",TC);
delay_ms(100);
}
//USB
#define USB_HID_DEVICE TRUE //Se activa la comunicacion USB_HID
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT //Activa EP1 para la entrada de transferencias
#define USB_EP1_TX_SIZE 8 //Envio de 8 bytes
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT //Activa EP1 para la salida de transferencias
#define USB_EP1_RX_SIZE 8 //Recepcion de 8 bytes
#define LEDR PIN_C0 //Led rojo USB no conectado
#define LEDV PIN_C1 //Led verde USB conectado
#define LED_ON output_low
#define LED_OFF output_high
int8 Salida[8]; //Vector de salida de 8, cada posicion del vector va a tener un byte
int8 Entrada[8]; //Vector de entrada de 8, cada posicion del vector va a tener un byte
#include <pic18_usb.h> //Libreria para la comunicacion entre el pic18 y USB
#include <usb_desc_hid.h> //Descripcion del dispositivo, para que el sistema operativo, en este caso WINDOWS, lo reconozca
#include <usb.c> //Libreria para la utilizacion del USB